webRTC介绍与运行机制
webRTC是 Google在2011年开源的跨平台的音视频引擎,可用于浏览器,提供简单的javascript就可以达到实时通讯。提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android。
可应用于游戏、即时通讯、文件传输等领域,对音视频处理有完整的解决方案,如回音消除、降噪等。
目录结构
紫色区域为应用层,为web开发者接口API
绿色区域为核心层,分为四层
1)提供C++API(peerconection)
2)session层,上下文管理层,包括音视频,非音视频信息处理
3)音频引擎:包括编解码器、音频缓冲buffer,用于适配、回音消除、降噪,静音检测
视频引擎:包括编解码器,视频缓冲buffer,图像增强
传输:SRTP、RTCP、复用、P2P等
4)音频采集、视频采集、网络IO,虚线代表可重载,可以自己实现模块代替它
webRTC源码目录结构
| 目录 | 功能 |
|---|---|
| api | WebRTC接口层,浏览器都是通过该接口调用webRTC |
| call | 数据流等管理层、call代表同一断点等所有数据的流入流出 |
| video | 与视频相关的逻辑 |
| audio | 与音频相关的逻辑 |
| common_audio | |
| common_video | 视频算法相关 |
| media | 与多媒体相关的逻辑,如编解码的逻辑处理 |
| logging | 日志相关 |
| module | 最重要的目录,子模块 |
| pc | peerconnection,连接相关的逻辑层 |
| P2P | 端对端相关代码,stun,turn |
| rtc_base | 基础代码,如线程、锁相关的统一接口代码 |
| rtc_tool | 音视频分析相关的工具代码 |
| tool_webrtc | webRTC测试相关的代码,如网络模拟器 |
| system_wrappers | 与具体操作系统相关的,如CPU特性,原子操作等 |
| stats | 存放各种数据统计相关的类 |
| sdk | 存放Android和IOS层代码,如视频采集,渲染等 |
webRTC modules目录结构
| 目录 | 功能 |
|---|---|
| audio_coding | 音视频编辑吗相关代码 |
| audio_device | 音频采集与音频播放相关代码 |
| audio_mixer | 混音相关代码 |
| audio_processing | 音频前后处理的相关代码,如回音消除,降噪等 |
| bitrate_controller | 码率控制相关代码 |
| congestion_controller | 流控相关代码 |
| desktop_capture | 桌面采集相关的代码 |
| pacing | 码率探测及平滑处理相关的代码 |
| remote_bitrate_estimator | 远端码率估算相关的代码 |
| rtp_rtcp | rtp/rtcp协议相关代码 |
| video_capture | 视频采集相关的代码 |
| video_coding | 视频编辑吗相关的代码 |
| video_processing | 视频前后处理相关的代码 |
webRTC运行机制
1.Peerconnection调用过程的步骤
1)内部有两个线程worker thread和signaling thread
2)创建工厂PeerConnectionFactoryInterface
3)创建音视频轨
4)通过AddTrack创建音视频流
5)通过AddStream创建PeerConnectionInterace
6)最后通过Observer输出
2.调用时序图
1)应用层触发creatPeerconnectionFactory创建工厂
2)通过CreatPeerConnection创建连接,创建流和视频轨
3)通过Addstream添加到连接中
4)当流发生变化会触发一个信息offer发送到信令
5)信令收到answer后传给连接
6)连接拿到媒体信息建立通道
7)连接将远端的流发送到APP中去