# 测试文件所在目录 record.c # Janus的录制功能在该文件中实现 record.h ice.c # Janus 使用 libnice 实现 ICE 功能,该文件是对libnice库的封装 ice.h janus.c # 该文件是Janus的主框架程序,里边做了很多事儿 janus.h log.c 它自己实现了 RTP/RTCP、SRTP、SCTP、DTLS/DTLS-BIO、SDP 等 WebRTC 必要的协议,而对于数据传输,则是使用 libnice 库,并通过 ice.c/h 对libnice
Janus使用了Libnice库作为底层网络传输库,该库本身是多端口的实现,因此要在Janus基础上实现单端口存在两种方案:一种是直接替换掉Libnice库,重新构建底层,改为单端口的传输方式。 但是由于Janus和Libnice库的耦合非常紧密,若要使用重新构建底层的方式,实现较为复杂的,难度很大;另外一种方式就是保留Libnice多端口的实现,在Janus上增加单端口代理的功能。 代理的功能是指将单一的对外端口传输的客户端的数据,在接收到数据之后,同时将相应的数据转发到Libnice内部分配的不同服务端的内部端口中。这种方式修改起来会更简单一些。 MediaSoup虽然也是多端口方案,但是并未使用Libnice库,因此可以直接在底层实现整套单端口方案,并不需要Porxy的存在。 这里值得一提的是SRS4,虽然SRS4目前只支持WebRTC的拉流,但是其实现是基于原生的单端口方案,没有使用Libnice库,整个MAP的建立过程与前面所描述的是一致的,也不需要Porxy的存在。
janus_videoroom的包转发实现 该插件模式具备SFU的包转发能力,每一个进入房间的与会者,可以通过Publish发布自己的音视频,也可以通过Subscribe订阅其他人的音视频,转发能力由libnice 库提供,libnice可以修改为支持单端口转发RTP包; 二、理解POC对讲半双工模式下的包转发实现 POC,是PTT Over Cell 的简写,PTT是按下讲话的意思,要么说,要么听别人说,不会出现同时讲话
192.168.1.40]:30008 --> [20.80.4.131]:52652 并且服务器给出了配对失败的错误,其实互联的Socket都是正常的话,ice的交互显得有些多此一举了,所以果断修改libnice 的ice交互流程,去掉了ICE的地址配对完成后服务器的地址匹配判断逻辑,libnice的ice服务器这么修改:忽略客户端返回的stun response 中的服务器的公网地址; static CandidateCheckPair
编译依赖 基本依赖 Jansson libconfig libnice (at least v0.1.16 suggested, master recommended) OpenSSL (at least
二是对于每一路上传和转发,Janus都分配一个对应的UDP端口和socket描述符,该分配行为是Janus所使用的网络库Libnice决定的。 三是Libnice的内部采用poll做事件处理,在描述符量很大时,它的效率很低。 在实现单端口方案的过程中, 采用epoll来实现描述符事件管理,去掉对libnice和glib的依赖。最终可以通过单一(或少量)的端口对外提供网关的服务,同时降低CPU的消耗。 相比前面的几种方案,这种方案会复杂很多,首先需要实现ICE逻辑并在Janus Core中把libnice替换成自实现方案,同时还需要实现相关的辅助结构,如ICE定时器等, 总体来看有一定的工程复杂度,但从效果上来说是值得一做的
而当前的网络环境下,开放端口池给运维带来了维护的风险,也给部分代理场景下带来了实现的复杂度,所以如果使用一个端口用来做媒体数据包的转发,那带来了极大的便利; 以WebRTC的服务器Janus为例,主要需要修改libnice
文章内容主要描述RFC 5245中 ICE 相关的状态和 ICE 提名机制,并结合 libnice(0.14)版本进行分析。
gengetopt libtool automake libscrtp-dev \ libwebsockets-dev librabbitmq-dev libnanomsg-dev libnice-dev
此外,libnice中存在一个已知的bug,它在我们的初始测试期间影响了Kurento / OpenVidu和Janus。按照Janus团队的建议应用libnice补丁后,他们的结果显着改善。
aptitude: sudo apt-get install aptitude b、命令安装依赖: sudo aptitude install libmicrohttpd-dev libjansson-dev libnice-dev
. ==> New Formulae cyphernetes goku libnice-gstreamer mbpoll
libmtp-1.1.18-1 libmusicbrainz5-5.1.0-4 libnautilus-extension-40.2-1 libnfs-4.0.0-4 libnice