20220905-WebRTC
WebRTC
WebRTC(Web Real-Time Communication)是一个可以用在视频聊天、音频聊天或P2P文件分享Web App中的API。
WebRTC是一个可以在Web程序中实现音频,视频和数据的实时通信的开源项目。在实时通信中,音视频的采集和处理是一个很复杂的过程。比如音视频流的编解码、降噪和回声消除等,但是在WebRTC中,这一切都交由浏览器的底层封装来完成。我们可以直接拿到优化后的媒体流,然后在其输出到本地屏幕和扬声器,或者转发给其对等端。长话短说,就是一个支持网页浏览器进行实时语音对话、视频对话、数据传输的API。
- WebRTC已经实现了对于实时通信,免插件音视频数据传输的标准制定,需求是:
- 许多网络服务已经使用了RTC,但是需要下载,本地应用或者是插件;
- 下载安装升级插件是复杂的,可能出错的;
- 插件可能很难部署、调试、故障排除等;
- 插件可能需要技术授权,复杂集成和昂贵的技术;
- 因此WebRTC项目的指导原则是:API应该是开源的,免费的,标准化的,浏览器内置的,比现有技术更高效的;
- WebRTC有3个模块:
- Voice Engine(音频引擎)
- voice engine包含iSAC/iLBC Codec(音频编解码器,前者是针对宽带和超宽带,后者是针对窄带);
- netEQ for voice(处理网络抖动和语音包丢失);
- Echo Canceler(回声消除器)/noise reduction(噪声抑制);
- NetEQ Engine(视频引擎)
- VP8 Codec(视频图像编解码器);
- Video jitter buffer(视频抖动缓冲器、处理视频抖动和视频信息包丢失);
- Image enhancements(图像质量增强);
- Transport(数据传输)
- SRTP(安全的实时传输协议,用以音视频流传输);
- Multiplexing(多路复用);
- P2P, STUN+TURN+ICE(用于NAT网络和防火墙穿越的);
- 除此之外,安全传输可能还会用到DTLS(数据报安全传输),用于加密传输和密钥协商;
- 整个WebRTC通信是基于UDP的;
- Voice Engine(音频引擎)
- 核心组件
- 音视频引擎:OPUS、VP8/VP9、H264
- 传输层协议:底层传输协议为UDP
- 媒体协议:SRTP/SCTP
- 数据协议:DTLS/SCTP
- P2P内网穿透:STUN/TURN/ICE/Trickle ICE;
- 信令与SDP协商:HTTP/WebSocket/SIP/Offer Answer模型;
- NAT和NAT穿透
- NAT即网络地址转换,就是替换IP报文头部的地址信息。NAT通常部署在一个组织的网络出口位置,通过将内部网络IP转换为出口的IP地址提供公网可达以及和上层协议的连接能力;
- NAT的分类:
- 静态NAT:将单个私有IP地址与单个公共地址映射,即将私有IP地址转换为公共IP地址;
- 动态NAT:多个专用IP地址映射到公用IP地址池。当我们知道固定用户想要在给定的时间点访问Internet的数量时,将使用它;
- PAT(NAT重载):使用NAT重载可以将需要本地(专用)IP地址转换为单个公用IP地址。端口号用于区分流量,即哪个流量属于哪个IP地址。这是最常用的方法,因为它具有成本效益,因为仅使用一个真实的全局(公共)IP地址就可以将数千个用户连接到Internet.
- STUN协议(Simple traversal of UDP over NAT protocol)