WebRTC整体架构大概可以分为接口层、会话层、引擎层和设备I/O层: 1)接口层包括Web API和WebRTC C++ API,Web API给Web开发者提供了JavaScript接口,这样Web端就具备了接入WebRTC的能力;WebRTC C++ API面向的是浏览器开发者,让浏览器开发商具备集成WebRTC的能力。当然,WebRTC C++ API也可以用于Native客户端接入; 2)会话层主要包含信令相关的逻辑,比如媒体协商,P2P连接管理等; 3)引擎层是WebRTC最核心的功能,包括音频引擎、视频引擎和传输模块。音频引擎包含音频编解码器(Opus)、NetEQ和著名的3A(回声消除、自动增益、降噪)算法;视频引擎包括视频编解码器(VP8、VP9、H264)、JitterBufer和图像增强(降噪)算法;传输模块包含SRTP、多路复用和P2P模块; 4)设备I/O层主要和硬件交互,包括音视频采集和渲染,以及网络I/O。
上面一节描述的实时音视频关键技术中,WebRTC实现了除“最优路径”之外的全部内容。WebRTC几乎每个模块都是可以按需替换的,便于我们增加定制的内容。我们可以根据实际需求决定如何使用WebRTC,Native客户端可以通PeerConnection接口接入,服务端拿到RTP/RTCP包以后完全可以直接调用引擎层处理拿到最终的YUV和PCM数据,甚至只把WebRTC内部模块抠出来用在自己的系统上也是没问题的。 更多相关资料可阅读: