WebRTC开源框架
1、什么是WebRTC
WebRTC (Web Real-Time Communications)是一项实时通讯的技术,旨在使得浏览器能为实时通信提供简单的JavaScript接口,让浏览器通过JS实现即时通信接口。这个接口是通过一系列的信令,建立一个浏览器与浏览器之间(peer-to-peer)的信道,这个信道可以发送任何数据,而不需要经过服务器。并且WebRTC通过实现MediaStream,通过浏览器调用设备的摄像头、话筒,使得浏览器之间可以传递音频和视频。
2、相关开源框架
当前Webrtc技术已经成熟,各大公司都在自己的产品中集成Webrtc功能,Webrtc除了要实现视音频通信外还有需要实现信令传输,而Webrtc的核心模块就是流转发模块,即流媒体服务器,如果要自已实现流媒体服务器困难还是比较大的,付出的时间成本也将不少,它里面要涉及到去研究 DTLS 协议、ICE 协议、SRTP/SRTCP 协议等方面,光理解这些协议就要花不少的时间,更何况要去实现它了,所以最快捷的办法就是使用开源的实现,在构建实时多媒体应用时,服务器技术的选择至关重要。该领域的两大巨头是Janus和MediaSoup,它们都支持 WebRTC 功能。
Mediasoup
由应用层和数据处理层组成。应用层是通过 Node.js 实现的;数据处理层由 C++ 语言实现,包括 DTLS 协议实现、ICE 协议实现、SRTP/SRTCP 协议实现、路由转发等。Mediasoup 把每个实例称为一个 Worker,在 Worker 内部有多个 Router,每个 Router 相当于一个房间。在每个房间里可以有多个用户或称为参与人,每个参与人在 Mediasoup 中由一个 Transport 代理。换句话说,对于房间(Router)来说,Transport 就相当于一个用户。
Github开源地址:https://github.com/versatica/mediasoup
Kurento
Kurento是WebRTC媒体服务器和一组客户端API,可简化针对WWW和智能手机平台的高级视频应用程序的开发。Kurento Media Server的功能包括组通信,音视频流的转码,记录,混合,广播和路由。作为一项与众不同的功能,Kurento Media Server还提供了高级媒体处理功能,包括计算机视觉,视频索引,增强现实和语音分析。Kurento模块化体系结构简化了第三方媒体处理算法(即语音识别,情感分析,面部识别等)的集成,可以由应用程序开发人员透明地用作Kurento的其余内置功能。Kurento的功能和文档都相当出众,文档尤佳,功能介绍极其透彻。Janus 则实为 C 语言开发的 WebRTC 网关,支持 GPR 协议,GitHub Star 数较多,性能也非常好。
Github开源地址:https://github.com/Kurento/kurento
https://github.com/Kurento/kurento-media-server
https://doc-kurento.readthedocs.io/en/latest/user/installation.html
Janus
Janus 是一款开源的通用 WebRTC 网关,由Meeteco设计和开发。专为实时通信而设计。其模块化架构、广泛的协议支持和丰富的功能使其成为实时多媒体应用领域最受欢迎的解决方案之一。Janus 可作为不同多媒体组件之间的桥梁,转换协议并实现各种实时功能。它不仅限于 WebRTC,还支持 SIP、RTSP 和普通 RTP 等协议。Janus 可使用插件架构进行扩展,使其适用于流媒体、视频会议和录制等各种用例。
Github开源地址:https://github.com/meetecho/janus-gateway
官网:https://janus.conf.meetecho.com/
3、Janus媒体模块
ICE:打洞,负责与Peer的连通,Janus可以部署在NAT后⾯,使⽤了libnice;
DTLS:UDP版的TLS,就是加密的UDP,WebRTC⽤来传递SRTP的密钥,使⽤了OpenSSL/BoringSSL;
RTP/RTCP:提供RTP/RTCP 封包解包的接⼝,需要发送⼀些WebRTC⽀持的RTCP包,例如FIR、PLI、RR等;
SRTP:加密的RTP,开启后WebRTC传输的RTP负载都是加密的;
SDP:提供SDP封/解包的接⼝,⽤于协商媒体的协议,可以⽤SDP对WebRTC的⼀些功能进⾏设定(编码器优先、码率限制),媒体能⼒的协商;
candidate:⽹络信息,⽹络协商;
SCTP:WebRTC的数据通道使⽤的协议,就是加上了流控的UDP,可以传输任意数据
4、Coturn打洞服务器
Github地址:
https://github.com/coturn/coturn