文学起点网
当前位置: 首页 文学百科

软路由openwrt详细设置(WebRTC入门教程WebRTC信令控制与STUN)

时间:2023-07-20 作者: 小编 阅读量: 3 栏目名: 文学百科

网络信息消息网络信息消息用于两个客户端之间交换网络信息。在WebRTC中有三种类型的候选者,它们分别是:主机候选者反射候选者中继候选者主机候选者,表示的是本地局域网内的IP地址及端口。其优先级低于主机候选者。在WebRTC内部会探测用户的NAT类型,最终采用不同的方法进行NAT穿越。在WebRTC信令服务器端,收到网络消息信令,即message消息时,不做任何处理,直接转发。offer消息中的内容是Amy的SDP信息。第七步,Bob将anwser消息通过信令服务器传给Amy。

软路由openwrt详细设置?在前面的文章中已经向大家介绍了如何构建信令服务器但构建的信令服务器是如何工作的?哪些消息需要信令服务器控制和中转?这些此前并没有做详细的说明,而本文将对这些问题做详细的讨论,下面我们就来说一说关于软路由openwrt详细设置?我们一起去了解并探讨一下这个问题吧!

软路由openwrt详细设置

在前面的文章中已经向大家介绍了如何构建信令服务器。但构建的信令服务器是如何工作的?哪些消息需要信令服务器控制和中转?这些此前并没有做详细的说明,而本文将对这些问题做详细的讨论。

另一方面,在真实的网络中,WebRTC是如何进行NAT穿越的呢?如果穿越不成功,我们又该如何保证用户服务的呢?这些知识也将在本文中给出答案。

信令

WebRTC 信令控制的架构图如下所示:

信令服务器用于交换三种类型的信息:

会话控制消息:初始化/关闭,各种业务逻辑消息以及错误报告。

网络相关:外部可以识别的IP地址和端口。

媒体能力:客户端能控制的编解码器、分辩率,以及它想与谁通讯。

下面我们就来详细讨论一下这三类消息:

会话控制消息

会话控制消息比较简单,像房间的创建与销毁、加入房间、离开房间、开启音频/关闭音频、开启视频/关闭视频等等这些都是会话控制消息。

对于一个真正商业的WebRTC信令服务器,还有许多的会话控制消息。像获取房间人数、静音/取消静音、切换主讲人、视频轮询、白板中的画笔、各种图型等等。但相对来说都是一引起比较简单的消息。

在我们之前的例子中,服务端只处理了一个会话消息 create or join,即房间的创建与加入消息。代码如下:

...socket.on('create or join', function(room) {var clientsInRoom = io.sockets.adapter.rooms[room];var numClients = clientsInRoom ? Object.keys(clientsInRoom.sockets).length : 0;if (numClients === 0) {socket.join(room);logger.debug('Client ID 'socket.id' created room 'room);socket.emit('created', room, socket.id);} else if (numClients === 1) {io.sockets.in(room).emit('join', room);socket.join(room);socket.emit('joined', room, socket.id);io.sockets.in(room).emit('ready');} else { // max two clientssocket.emit('full', room);}});...

该代码的逻辑非常简单,当收到 create or join 消息后,判断房间里当前人数,如果房间里的人数为 0,说明是第一个人进来,此时,需要向连接的客户端发送 created 消息;如果房间里的人数为 1,说明是第二个人进来,需要向客户端发送 joined消息;否则发送 full 消息,说明房间已满,因为目前一个房间最多只允许有两个人。

网络信息消息

网络信息消息用于两个客户端之间交换网络信息。在WebRTC中使用 ICE 机制建立网络连接。

在WebRTC的每一端,当创建好 RTCPeerConnection 对象,且调用了setLocalDescription 方法后,就开始收集 ICE候选者 了。

在WebRTC中有三种类型的候选者,它们分别是:

主机候选者

反射候选者

中继候选者

主机候选者,表示的是本地局域网内的 IP 地址及端口。它是三个候选者中优先级最高的,也就是说在 WebRTC 底层,首先会偿试本地局域网内建立连接。

反射候选者,表示的是获取 NAT 内主机的外网IP地址和端口。其优先级低于 主机候选者。也就是说当WebRTC偿试本地连接不通时,会偿试通过反射候选者获得的 IP地址和端口进行连接。

其结构如下图所示:

在上面这幅图中可以看到,WebRTC通过 STUN server 获得自己的外网IP和端口,然后通过信令服务器与远端的WebRTC交换网络信息。之后双方就可以尝试建立 P2P 连接了。

以上就是我们通常所说的 P2P NAT 穿越。在WebRTC内部会探测用户的 NAT 类型,最终采用不同的方法进行 NAT 穿越。不过,如果双方都是 对称NAT 类型,是无法进行 P2P NAT 穿越的,此时只能使用中继了。

中继候选者,表示的是中继服务器的IP地址与端口,即通过服务器中转媒体数据。当WebRTC客户端通信双方无法穿越 P2P NAT 时,为了保证双方可以正常通讯,此时只能通过服务器中转来保证服务质量了。

所以 中继候选者的优先级是最低的,只有上述两种候选者都无法进行连接时,才会使用它。

在 WebRTC 信令服务器端,收到网络消息信令,即 message 消息时,不做任何处理,直接转发。代码如下:

socket.on('message', function(message) {socket.broadcast.emit('message', message);});

客户端接收到 message 消息后,会做进一步判断。如果消息类型为 candidate,即 网络消息信令时,会生成 RTCIceCandidate 对象,并将其添加到 RTCPeerConnection 对象中,从而使 WebRTC 在底层自动建立连接。 其代码如下:

socket.on('message', function(message) {...} else if (message.type === 'candidate') {var candidate = new RTCIceCandidate({sdpMLineIndex: message.label,candidate: message.candidate});pc.addIceCandidate(candidate);} else if (...) {...}});

交换媒体能力消息

在WebRTC中,媒体能力最终通过 SDP 呈现。在传输媒体数据之前,首先要进行媒体能力协商,看双方都支持哪些编码方式,支持哪些分辨率等。协商的方法是通过信令服务器交换媒体能力信息。

WebRTC 媒体协商的过种如上图所示。

第一步,Amy 调用 createOffer 方法创建 offer 消息。offer 消息中的内容是 Amy 的 SDP 信息。

第二步,Amy 调用 setLocalDescription 方法,将本端的 SDP 信息保存起来。

第三步,Amy 将 offer 消息通过信令服务器传给 Bob。

第四步,Bob 收到 offer 消息后,调用 setRemoteDescription 方法将其存储起来。

第五步,Bob 调用 createAnswer 方法创建 answer 消息, 同样,answer 消息中的内容是 Bob 的 SDP 信息。

第六步,Bob 调用 setLocalDescription 方法,将本端的 SDP 信息保存起来。

第七步,Bob 将 anwser 消息通过信令服务器传给 Amy。

第八步,Amy 收到 anwser 消息后,调用 setRemoteDescription 方法,将其保存起来。

通过以上步骤就完成了通信双方媒体能力的交换。

上以就是信令服务器应该处理的所有消息,这些消息组成了信令服务器最基本的信令,每一个都必不可少,否则的话双方就无法进行最终的通信了。

在WebRTC 通讯时,光有信令是远远不够的。因为 WebRTC真正要传输的是媒体数据,信令只不过是其中的一部分。在WebRTC中他会尽可能地通过P2P进行数据的传输,但在 P2P穿越不成功时怎么办呢?

那就需要通过媒体中继服务器进行媒体数据的转发,下面我们就来看一下如何搭建媒体中继服务器吧。

搭建 STUN/TURN

在公网搭建一套 STUN/TURN 服务并不难。首先要有一台云主机,云主机的话我就不做介绍了,大家去某个云厂商购买就好了。

目前比较流行的 STUN/TURN 服务器是 coturn,使用它搭建 STUN/TURN 服务非常的方便。

下面我们就来看一下它的基本步骤:

获取 coturn 源码

git clone http://github.com/coturn/coturn.git

编译安装

cd coturn/configure --prefix=/usr/local/coturnsudo make -j 4 && make install

配置 coturn

网上有很多关于 coturn 的配置文章,搞得很复杂。大多数人都是从网上拷贝转发的,其中有很多错误。其实只要使用 coturn 的默认设置就可以了,我这里整理了一份,如下:

listening-port=3478#指定侦听的端口external-ip=39.105.185.198 #指定云主机的公网IP地址user=aaaaaa:bbbbbb#访问 stun/turn服务的用户名和密码realm=stun.xxx.cn#域名,这个一定要设置

所以,只需将上面 4 行配置项写入到 /usr/local/coturn/etc/turnserver.conf 配置文件中,你的 stun/turn 服务就配置好了。

启动 stun/turn 服务

cd /usr/local/coturn/binturnserver -c ./etc/turnserver.conf

测试 stun/turn 服务

打开 trickle-ice ,按里面的要求输入 stun/turn 地址、用户和密码后就可以探测stun/turn服务是否正常了。

以我们的配置为例,输入的信息分别是:

STUN or TURN URI 的值为: turn:stun.xxx.cn

用户名为: aaaaaa

密码为: bbbbbb

测试的结果如下图所示:

从上图我们可以看到该服务提供了 stun(srflx)和turn(relay)两种服务。

STUN/TURN布署好后,我们就可以使用它进行多媒体数据的传输了,再也不怕因为 NAT 和防火墙的原因导致双方无法通信的问题了。

小结

本文首先向大家详细介绍了 WebRTC 三种类型信令消息的控制与交换。然后给出了 STUN/TURN 服务器的布署、配置以及如何进行测试。

这里需要特别强调的是,STUN/TURN的布署虽然非常简单,但像 WebRTC 一样,其背后的原理却很复杂。由于篇幅的原因,我这里并没有向大家做详细的介绍,感兴趣的同学可以将其做为了一切入点进行深入的研究。

    推荐阅读
  • 荷塘月色简笔画彩图(荷塘的场景图简笔画)

    今日份简笔画荷塘月色.感恩日记1.,我来为整理几张简单漂亮的荷塘月色简笔画彩图?以下简笔画图片总有一款是你喜欢的,希望对你有帮助来看看吧!荷塘月色简笔画彩图今日份简笔画荷塘月色.感恩日记1.荷塘月色好看的儿童画图片儿童简笔画大全荷塘月色简笔画儿童画

  • 直硬头发软化前后效果图(头发软化前后效果图)

    可以使头发变软,变柔顺,变贴服,且价格也很便宜,普通的美发沙龙价格为50到80元左右,软化比较自然。头发软化后几天可以洗刚做完软化2至3天不要洗头,刚做完软化不要用力拉头发,会有损发质和效果。软化也是伤头发的,不过比不停地做一次性夹头发而言小很多,如果是短发做软化还是不错的。如果想让头发蓬蓬的,最好不要全头做软化,甚至不建议做软化。具体情况,建议咨询理发师。用药水要用好一点的,对头发伤害才不会很大。

  • 赞美运动员的话(赞美运动员的话有什么)

    年轻的我们自信飞扬,青春的气息如同出生的朝阳,蓬勃的力量如同阳光的挥洒此时此刻,跑道便是我们精彩的舞台,声声加油便是我们最高的奖项论何成功,谈何荣辱,心中的信念只有一个:拼搏,我来为大家科普一下关于赞美运动员的话?赞美运动员的话年轻的我们自信飞扬,青春的气息如同出生的朝阳,蓬勃的力量如同阳光的挥洒。所有的努力都是为了迎接这一刹那,所有的拼搏都是为了这一声令下。

  • 长安uni-k车主反映这款车怎么样(新车长安UNI-K登场)

    据长安汽车最新消息,中大型SUVUNI-K官图曝光,这是长安UNI系列的第二款车型。新车将搭载蓝鲸系列2.0T发动机并匹配8AT变速箱,将于广州车展首发亮相。新车亮点1.采用了全新的“V”型面设计和无边界格栅。新车概况新车前脸依然采用无边界设计并融入了V型面概念,不同于UNI-T,UNI-K的大灯位置设计在了最上方。车尾方面采用了时下流行的贯穿式尾灯设计,与UNI-T的V型后导流造型不同,UNI-K采用了新的航天器式造型,立式尾灯十分显眼。

  • 渡劫经典语录(关于渡劫的语录精选)

    情到深处人孤独,爱至穷时尽沧桑堕落的天使啊,你无知的游走着。我将于茫茫人海中访我唯一灵魂之伴侣;得之,我幸;不得,我命。玲珑骰子安红豆,入骨相思君知否。于千万人之中遇见你所遇见的人,于千万年时间无涯的荒野里,没有早一步,也没有晚一步,刚巧赶上了。生命是一朵千瓣莲花,我拒绝了绽放的同时,我也拒绝了枯萎和零落。就算哭泣也要皱眉优雅,就算失败也要转身潇洒。之后我也学会了阳奉阴违,发生了什么与我再无所谓。

  • 孤城闭什么时候上映(谁是主演)

    以下内容大家不妨参考一二希望能帮到您!孤城闭什么时候上映《孤城闭》将于2020年起在湖南卫视上映播出。该剧主要由王凯、江疏影、任敏、杨玏、边程、叶祖新、喻恩泰、王楚然、刘钧、孙坚等主演。《孤城闭》改编自米兰lady同名小说,以北宋为背景,在风起云涌的朝堂之事与剪不断理还乱的儿女情长之间,还原了一个复杂而真实的宋仁宗。

  • 大众朗逸所有灯图解(认识汽车灯图解)

    大众朗逸所有灯图解作为新手,汽车灯光就是一道难题,下面我们一起通过图解来认识一下汽车各种灯光吧。双闪灯的作用是当车辆发生意外情况后,引起其他车辆警惕,防止发生追尾事故。当踩下制动踏板后,制动灯立即亮起,并发出红色灯光,提醒后方车辆。倒车灯是白色,作用是为了照亮车尾的路面,减少倒车时盲区,另外也是对后方的提醒。

  • 雪里红的腌制方法(做雪里红腌菜的步骤)

    下面更多详细答案一起来看看吧!雪里红的腌制方法雪里红摘干净,根部用刀劈开,正一层反一层放入盆中,取盐均匀地洒在雪里红上,腌制1-2天。烧开水放凉,加盐,搅拌均匀,盐水倒入雪里红中泡制一天。泡好的雪里红捆成一小捆放入密封罐,倒入泡雪里红的盐水,盖好密封罐,即吃即取。

  • 郑州婚纱照推荐哪家好(郑州拍婚纱照团购)

    中国红喜嫁秀爆朋友圈的婚纱照中式婚纱照新中式婚纱照婚纱照风格高级感婚纱照婚纱照秀禾服的中式嫁衣,是完美诠释了东方女性温婉古典美。让人完全移不开目光~每一个女孩子都应该拥有这样华丽的喜嫁风太精致完全属于中式婚纱照的浪漫感~

  • 胎梦最准的位置(从胎梦看看你腹中的孩子给你暗示了吗)

    估计生完孩子和正在孕期的妈妈都会经历过这种事情,就是我们会经常做梦,而且会梦见一些动物植物什么的,这在老人眼里属于“胎梦”。你梦见的什么会预示着即将出生的宝宝是男孩还是女孩。你的胎梦准不准,来看看一下别人的胎梦。哈哈,看来有些胎梦还是挺准的,或许都是巧合吧,总之,宝宝来了就是我们的命中注定。