WebRTC(Web Real-Time Communications)是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC 包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。
它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。谷歌2011年6月3日宣布向开发人员开放WebRTC架构的源代码。
WebRTC 包含了若干相互关联的 API 和协议以达到这个目标。你在这里看到的文档将会帮助你理解 WebRTC 的基本概念,还会教你如何去建立和使用可以传输媒体数据和其他任意数据的连接。当然你还会学到更多其他的东西。
(1)紫色部分是Web开发者API层;
(2)蓝色实线部分是面向浏览器厂商的API层;
(3)蓝色虚线部分浏览器厂商可以自定义实现。
Your Web App
Web开发者开发的程序,Web开发者可以基于集成WebRTC的浏览器提供的web API开发基于视频、音频的实时通信应用。
Web API
面向第三方开发者的WebRTC标准API(Javascript),使开发者能够容易地开发出类似于网络视频聊天的web应用,最新的标准化进程可以查看这里。
WebRTC Native C++ API
本地C++ API层,使浏览器厂商容易实现WebRTC标准的Web API,抽象地对数字信号过程进行处理。这层的API相对比较少,最主要就是实现P2P连接。在PeerConnection里面又包含了很多接口,如传输质量,传输质量报告,统计数据,各种流都是封装在PeerConnection模块里面。除此之外主要有音视频采集,音视频传输,非音视频数据传输等。
Transport / Session
传输/会话层,用来管理音视频,非音视频数据传输,处理相关逻辑。。
VoiceEngine
音频引擎是包含一系列音频多媒体处理的框架,包括从视频采集卡到网络传输端等整个解决方案。
VideoEngine
WebRTC视频处理引擎,VideoEngine是包含一系列视频处理的整体框架,从摄像头采集视频到视频信息网络传输再到视频显示整个完整过程的解决方案。
蓝色虚线部分
底层是与硬件相关的硬件适配层:这层包含:音频的采集和渲染,视频的捕捉,网络IO。注意到上图中底层的这个三个模块都是画的虚线,表示这些模块是可以自己去实现的,可以重载的,这样大大增加WebRTC的灵活性,为跨平台提供了基础。
优点:
缺点:
P2P连接需要解决的问题:
1、两台设备如何进行连接?
2、两天设备传输的音频设备如何进行解码?
实现一个简单的P2P连接需要使用到如下几个部分:
1、n个端口设备,需要支持WebRTC(如何支持目前还有疑惑?)。
2、实现一个信令服务器,用于在连接前期进行媒体协商和网络协商。
3、实现一个中继服务器用于NAT 转换和中继传输。
结构图如下:
信令服务器在WebRTC架构中的作用:
信令服务器的作用是在设备前期还没有连接的时候进行数据交换的。主要是进行媒体协商和网络协商。
媒体协商:交换两个设备中音视频的编解码格式等先关信息,最终协商出来一个两边都支持的编解码格式。媒体协商过程需要使用到SDP协议。SDP 是描述信息的一种格式。
网络协商:交换两个设备经过NAT 转换之后的公网接口,在两个设备直连的时候使用。candidate 也是一种描述信息的一种格式
信令服务器的搭建:
目前查询的资料都是nodejs + webSocket、nodejs + okhttp搭建的。
问题:具体搭建方式未知?
中继服务器在WebRTC架构中的作用:
中继服务包含了ICM、STUN、TURN>等协议。中继服务器的主要作用就是进行设备网络转换(NAT ),将连接在局域网中设备转换成公网的网络接口,一般是路由器Ip+接口。还有一个作用就是当使用NET转换的网络接口无法连接的时候,则进行中继连接的功能。
STUN: 是一种网络协议,其目的是进行 NAT 穿越。STUN 的作用就是能够检测网络中是否存在 NAT 设备,有就可以获取到 NAT 分配的 IP + 端口地址,然后建立一条可穿越 NAT 的 P2P 连接(这一过程就是打洞)。
TURN:TURN 是 STUN 协议的扩展协议,其目的是如果 STUN 在无法打通的情况下,能够正常进行连接,其原理是通过一个中继服务器进行数据转发,此服务器需要拥有独立的公网 IP。TURN 很明显的一个问题就是其转发数据所产生的带宽费用需要由自己承担!
ICE:ICE(Interactive Connectivity Establishment),是一种用于实现网络连接的技术框架,用于在对等连接(如实时通信、P2P 文件共享等)中解决 NAT(Network Address Translation)和防火墙等网络障碍的问题。 ICE 是一种框架,可以通过使用多种技术(如 STUN、TURN、NAT 透明性检测等)来搜索可用的网络路径,并选择最优的路径建立连接,从而解决了 NAT 和防火墙等网络障碍的问题。 ICE 框架包含了以下几个步骤:
也就是,ICE 更好的进行 NAT 穿越效果,从而提高实时通信的质量和效率。
中继服务器的搭建:
目前了解的资料都是使用coturn服务器>来搭建中继服务器。
问题:coturn是什么? 如何使用的STUN、TURN和ICE。
Coturn 是一个开源的 TURN & STUN 服务器。
中继服务器的搭建链接如下:coturn服务器的搭建-CSDN博客
问题:
1、信令服务器如何搭建
2、WebRTC如何引入到C++项目中