20220905-WebRTC

WebRTC

WebRTC(Web Real-Time Communication)是一个可以用在视频聊天、音频聊天或P2P文件分享Web App中的API。

WebRTC是一个可以在Web程序中实现音频,视频和数据的实时通信的开源项目。在实时通信中,音视频的采集和处理是一个很复杂的过程。比如音视频流的编解码、降噪和回声消除等,但是在WebRTC中,这一切都交由浏览器的底层封装来完成。我们可以直接拿到优化后的媒体流,然后在其输出到本地屏幕和扬声器,或者转发给其对等端。长话短说,就是一个支持网页浏览器进行实时语音对话、视频对话、数据传输的API

  1. WebRTC已经实现了对于实时通信,免插件音视频数据传输的标准制定,需求是:
    • 许多网络服务已经使用了RTC,但是需要下载,本地应用或者是插件;
    • 下载安装升级插件是复杂的,可能出错的;
    • 插件可能很难部署、调试、故障排除等;
    • 插件可能需要技术授权,复杂集成和昂贵的技术;
  2. 因此WebRTC项目的指导原则是:API应该是开源的,免费的,标准化的,浏览器内置的,比现有技术更高效的;
  3. 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的;
  4. 核心组件
    • 音视频引擎:OPUS、VP8/VP9、H264
    • 传输层协议:底层传输协议为UDP
    • 媒体协议:SRTP/SCTP
    • 数据协议:DTLS/SCTP
    • P2P内网穿透:STUN/TURN/ICE/Trickle ICE;
    • 信令与SDP协商:HTTP/WebSocket/SIP/Offer Answer模型;
  5. NAT和NAT穿透
    • NAT即网络地址转换,就是替换IP报文头部的地址信息。NAT通常部署在一个组织的网络出口位置,通过将内部网络IP转换为出口的IP地址提供公网可达以及和上层协议的连接能力;
    • NAT的分类:
      • 静态NAT:将单个私有IP地址与单个公共地址映射,即将私有IP地址转换为公共IP地址;
      • 动态NAT:多个专用IP地址映射到公用IP地址池。当我们知道固定用户想要在给定的时间点访问Internet的数量时,将使用它;
      • PAT(NAT重载):使用NAT重载可以将需要本地(专用)IP地址转换为单个公用IP地址。端口号用于区分流量,即哪个流量属于哪个IP地址。这是最常用的方法,因为它具有成本效益,因为仅使用一个真实的全局(公共)IP地址就可以将数千个用户连接到Internet.
  6. STUN协议(Simple traversal of UDP over NAT protocol)