WebRTC基本介绍

2,307 阅读4分钟

WebRTC是Google开源的一套视频通话技术WebRTC官网,可以使用Web或者移动应用程序实现强大的实时语音、视频、数据和视频会议等服务,Google开源WebRTC大大降低了互联网厂商进入视频通话领域的门槛,为开源社区做了很大贡献

WebRTC使用P2P媒体流,音频、视频和数据的连接直接通过浏览器实现。但是,浏览器却隐藏在NAT(网络地址翻译)和防火墙的后面,这增加了建立P2P媒体会话的难度。这些流程和协议,如ICE或Trickle ICE,STUN和TURN

下图是WebRTC基本架构



本地C++ API层,使浏览器厂商容易实现WebRTC标准的Web API,抽象地对数字信号过程进行处理。

Transport / Session 传输/会话层

会话层组件采用了libjingle库的部分组件实现

VoiceEngine 音频引擎是包含一系列音频多媒体处理的框架。

VoiceEngine是WebRTC极具价值的技术之一,是Google收购GIPS公司后开源的。在VoIP上,技术业界领先。

Opus:支持从6 kbit/s到510 kbit/s的恒定和可变比特率编码,帧大小从2.5 ms到60 ms,各种采样率从8 kHz(4 kHz带宽)到48 kHz(20 kHz带宽,可复制人类听觉系统的整个听力范围)。

NetEQ模块是Webrtc语音引擎中的核心模块 ,一种动态抖动缓冲和错误隐藏算法,用于隐藏网络抖动和数据包丢失的负面影响。保持尽可能低的延迟,同时保持最高的语音质量。

AEC(Acoustic Echo Canceller) WebRTC中使用的回音消除算法,和WebRTC中的NS(noise suppression)AGC(Automatic Gain Control)等声音处理算法一起,包含在APM模块中

VideoEngineWebRTC视频处理引擎

VideoEngine是包含一系列视频处理的整体框架,从摄像头采集视频到视频信息网络传输再到视频显示整个完整过程的解决方案。

VP8 视频图像编解码器,是WebRTC视频引擎的默认的编解码器

VP8适合实时通信应用场景,因为它主要是针对低延时而设计的编解码器。

除了Google自研的VP8编码器,WebRTC也支持H264,H265等其他编码格式,目前H264硬件编码器支持比较多,适合做首选编码格式

STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间创建UDP通信

TURN的全称为Traversal Using Relays around NAT,是STUN/RFC5389的一个拓展,主要添加了Relay功能。如图一所示,TURN协议是建立在UDP协议之上的一个应用层协议。如果一台主机处于NAT后面,那么在一定条件下(NAT穿透失败)两台主机无法之间进行通讯。在这种条件下,那么使用中继服务提供通讯是有必要的。TURN协议允许一台主机使用中继服务与对端进行报文传输。TURN协议也是ICE(交互式连接建立)协议的组成部分,也可以单独使用

ICE: 交互式连接建立(Interactive Connectivity Establishment)ICE是一种标准穿透协议,利用STUN和TURN服务器来帮助端点建立连接。WebRTC当通过信令server交换完sdp, candidate后,之后依靠ICE框架在2端之间建立一个通道

SRTP是一套加密协议,用于UDP数据传输

Video jitter buffer 是WebRTC底层音视频数据的缓存技术,有一套缓存区调整的算法,

Audio capture, Video capture,Network IO都是平台相关的代码,WebRTC对不同平台都有一套实现,和底层其他代码,通过基类API调用方法

WebRTC是优秀的开源库,使用了很多算法,和优秀的代码结构,值得大家去深入学习