如何做基于WebRTC的应用开发
做基于WebRTC的应用开发相关步骤:1、首先要让终端具备WebRTC能力;2、互联互通依赖于调度; 3、Peer2Peer模式。 其中,如果终端运行环境是浏览器,大部分是具备WebRTC能力是,如果不是浏览器,则可以采用其他的开源SDK或商业SDK将其集成在终端应用程序中。
1、首先要让终端具备WebRTC能力
如果终端运行环境是浏览器,目前绝大部分浏览器都已经实现了对WebRTC的支持(其中Safari和Edge的支持还在持续完善中),虽然彼此有一些差异,但是可以借助adapter.js等适配层屏蔽掉这些差异。如果终端运行环境不是浏览器,则可以采用其他的开源SDK或商业SDK,将其集成在终端应用程序中。当然也可以基于Google的开源WebRTC实现的Native代码进行裁剪或移植。值得一提的是Google的开源WebRTC代码库中有大量的终端多媒体问题和传输问题的应对方案的实现,包括音视频的编解码、同步、带宽预测、QoS,AEC等,都是做终端(特别是IoT设备或桌面环境应用)开发时很好的参考。
2、互联互通依赖于调度
终端实现了WebRTC只是表示它具备了实时通信的能力,但各个终端任然是孤立的,需要将各个终端的SDP进行交换才能让它们完成媒体和传输的协商才能让各个终端之间真正通起来。WebRTC并未就各个实现之间交换SDP的传输方式以及终端的“寻址”方式做出规定,这跟具体应用场景和其实现方式高度相关。因此要实现基于WebRTC的应用还需要一些“额外”的工作,通过一个各个终端都“认识”并能“找到”的“中间人”来进行SDP交换。譬如最简单的“1对1”呼叫的场景,这个“中间人”就是信令服务器,这种WebRTC的信令服务器可以基于任何消息系统构建,有很多开源实现可以利用或参考,自研开发也并不复杂
如果要基于WebRTC做“1对多”或者“多对多”的实时通信应用,则情况要复杂一些,具体的做法也会因实际应用场景而不同,根据通信终端之间的媒体流拓扑结构,大体上可以分为Peer2Peer(终端点对点连接)模式、SFU(Selective Forwarding Unit,服务器选择性转发)模式和MCU(MultipointControl Unit,服务器混音混流)模式。
3、Peer2Peer模式
Peer2Peer模式(又称Mesh模式)是所有参与方均需与其他所有参与方通信的情景又叫Mesh模式)的特征是呼叫中每两个需要进行通信的参与者之间都建立起点对点的媒体连接(PeerConnection),所有的媒体连接都是终端之间的(有可能通过TURN服务器进行NAT穿越,但不影响本质流拓扑),服务器侧不参与。Peer2Peer模式的优点是媒体拓扑去中心化,服务器侧实现简单,只需要将各个终端之间的信令交换送达即可;缺点是终端需要受理多路媒体流的收发,随着呼叫中参与方数的增加,媒体连接数会阶乘函数式增长,无论对终端的编解码计算力还是带宽资源都会带来巨大的压力。如果一个呼叫中参数方数很少(譬如大多数时间2方偶尔3方),则可以考虑选用Peer2Peer模式的服务器侧实现方案。