我们都知道,WebRTC是面向互联网的一种即时通信标准,由于被Chrome、火狐、Safari等主流浏览器支持,并提供了一致和简洁的API,使得开发WebRTC的视频通信应用非常简单和流行。
![v2-e5c71342e6653410c649d7ff76f9b185_720w.jpg](https://i-blog.csdnimg.cn/blog_migrate/dddb79346b442406167c1d89286e1574.png)
在大多数情况下,我们认为双向视频通信技术和视频直播技术是两种不同的技术,一个做视频通话,一个做单向直播(在以往的直播方案中,绝大部分是采用rtmp协议做直播上行的)。有没有可能使用WebRTC进行视频直播呢?这样既可以利用WebRTC的低延迟和良好的网络适应性,又可以充分利用WebRTC API的简洁性获得更高的开发效率和灵活性。更关键的一点是,使用WebRTC技术做直播,我们可以直接利用Chrome等浏览器的强大能力和跨平台特性,衍生出更灵活和简单的视频直播生态。
答案是肯定的,WebRTP做直播的方案完全可行: 使用WebRTC终端(浏览器或APP)作为视频采集端,将视频通过RTP协议上行传输到流媒体服务器,再由服务器进行视频协议的转换和播出。
![v2-3652c8425b283f7bbc3c3b161ee31279_720w.jpg](https://i-blog.csdnimg.cn/blog_migrate/a09c8a5468f4243db34c46c9586b2f9b.png)
直播流程中参与的节点主要有三个: 直播发起端、流媒体服务器和播放终端。
直播发起端的实现相对简单,可以使用js脚本,利用浏览器的WebRTC API来实现视音频的采集、合成、编码和传输,也可以使用的Android或iOS的WebRTC SDK来实现。有一定js开发能力或app开发能力的程序员可以胜任这部分工作。
流媒体服务器的开发相对是个难点,需要能够处理WebRTC信令、接收RTP协议并进行协议转换后对外提供大并发的直播输出。如果要想降低开发周期和投入,可以使用现有的成熟产品,例如可以选择国内的流媒体服务器软件NTV Media Server G3,这个系统在协议转换和播出能力上表现都是不错的。
无论采用哪个产品,服务器上的实现功能应该是一致的,即: WebRTP协议适配、音视频流接收、协议重新复用、播出。这个过程如下图:
![v2-7fcea51f869ef4a783d8d6bacdc77417_720w.jpg](https://i-blog.csdnimg.cn/blog_migrate/79b64b70f64cd5b88ea845c13de38bd6.png)
播放终端的工作相对较小,通过流媒体服务器适配后,一般终端不需要做任何改进,可以继续使用原有的协议和方法进行播出,例如http-flv协议或hls协议。当然也可以开发WebRTC的播放终端。
好了,由于时间原因,我们今天暂时探讨到这里,有疑问的同学可以在知乎和我交流。