janus本身部署在公网时,其内部使用的libnice库已经实现了stun的功能,在配置文件janus.jcfg里面,nat_1_1_mapping配置成公网地址,其位于NAT后面的局域网客户端之间可以实现媒体流之间的分享,发布者将媒体流推到公网,而janus服务端将媒体流推给订阅者。
如下图所示:

这种情况下,根本不需要coturn,现在引入coturn,coturn是stun和turn的结合体,其中stun用于发现地址发现,turn用于流转发。
关于coturn,看到的博客都是用于地址发现,如下图这样一个场景,收集candidate。

而对于流转发,尚未找到合适的博客。
本篇博客,主要说明coturn的流转发功能。
首先,本人在公网上部署了coturn,关于部署的过程,本人参考了博客
coturn服务配置
其中在turnserver.conf的最后,本人添加了如下内容:
listening-port=19302
listening-ip=0.0.0.0
external-ip=xxx.xxx.251.92
min-port=20000
max-port=40000
user=li:li123
realm=stun.XX.cn
cli-password=qwerty
cert=/usr/local/turnserver/etc/turn_server_cert.pem
pkey=/usr/local/turnserver/etc/turn_server_pkey.pem
其中external-ip是公网地址,为了隐私,本人将ip段的前面部分用xxx.xxx代替。
然后用下面命令启动coturn服务
./bin/turnserver -v -r xxx.xxx.251.92 -a -o -c ./etc/turnserver.conf
启动服务后,发现19302既是tcp端口,又是udp端口。
下面我们将NAT内的客户端的流经过coturn转发,推给janus服务端,下面分别给出地址信息:
coturn:公网地址为xxx.xxx.251.92(中国 天津市),本地地址为10.0.0.143
janus:公网地址为xxx.xxx.251.90(中国 天津市),本地地址为10.0.0.122
客户端地址:本地地址10.0.0.2,所在NAT:60.12.13.106(中国 浙江省 杭州市 滨江区)
注意,客户端的本地地址和上面的coturn以及janus的本地地址不能互通。
此时媒体发布者的流走向如下:

媒体订阅端走向为:

下面我们讲解下媒体发布情况下,终端将流推经过coturn转发推给janus的过程。
首先,janus的配置文件中,nat_1_1_mapping注释掉,关于turn的配置开启,如下图所示:

其中公网地址的前部分做了马赛克处理,turn_user和turn_pwd按照配置coturn时设置的信息来,不要配错。
同时webrtc客户端也需要将coturn的地址加入进来,代码如下:

关于客户端为何需要将coturn的地址添加进去,后面再做解释。
然后启动客户端,加入会议,接着在客户端所在机器,coturn所在机器,janus所在机器,开启抓包,然后打开摄像头,向服务端推流,结果发现,流直接推给了janus,没有经过coturn。
我查看了在sdp交互时,janus回给客户端的answer sdp,如下所示:
o=- 2743266240368598531 2 IN IP4 10.0.0.122
s=VideoRoom 38584232
t=0 0
a=group:BUNDLE video
a=</

文章详细介绍了在JanusGateway上部署coturn服务器以处理NAT后的WebRTC媒体流传输问题。通过配置和抓包分析,展示了如何使客户端的流经过coturn转发至Janus服务端,强调了coturn在STUN和TURN服务中的作用,以及客户端如何通过coturn进行地址发现和端口打洞以成功建立连接。
最低0.47元/天 解锁文章
2401

被折叠的 条评论
为什么被折叠?



