WebRTC直播技术(一)-初探WebRTC

2019-12-03 16:09:50 浏览数 (1)

本文作者:IMWeb jaychen 原文出处:IMWeb社区 未经同意,禁止转载

什么是WebRTC
  • webrtc 是为浏览器之间提供实时数据传输(Web Real-Time Communication)的javascript API
  • 支持 peer-to-peer 音频、视频、数据流传输能力
兼容性
主要的API
  • getUserMedia : 获取音视频
  • MediaRecorder: 录制音视频
  • RTCPeerConnection: 浏览器之间音视频流连接对象
  • RTCDataChannel: 浏览器数据流连接对象
结构图
信令(signaling)

信令是WebRTC用来协助建立p2p通讯的。主要用于协商双方通讯过程,传递基本信息SDP(会话描述协议)。

例如:打开/关闭连接的指令;视频信息,比如解码器,解码器的设置,带宽,以及视频的格式等;网关信息,比如双方的 IP,port...

一个简单的SDP格式:

具体字段含义可查询: https://datatracker.ietf.org/doc/draft-nandakumar-rtcweb-sdp/?include_text=1

SDP握手

下图为WebRTC通过信令建立一个SDP握手的过程。只有通过SDP握手,双方才知道对方的信息,这是建立p2p通道的基础。

  • 主播端通过 createOffer 生成 SDP 描述
  • 主播通过 setLocalDescription,设置本地的描述信息
  • 主播将 offer SDP 发送给用户
  • 用户通过 setRemoteDescription,设置远端的描述信息
  • 用户通过 createAnswer 创建出自己的 SDP 描述
  • 用户通过 setLocalDescription,设置本地的描述信息
  • 用户将 anwser SDP 发送给主播
  • 主播通过 setRemoteDescription,设置远端的描述信息。

通过SDP握手后,浏览器之间就会建立起一个点对点点直接通讯通道。但是由于我们所处的网络环境错综复杂,用户可能处在私有内网内,使用p2p传输时,将会遇到NAT以及防火墙等阻碍。这个时候我们就需要在SDP握手时,通过STUN/TURN/ICE相关NAT穿透技术来保障p2p链接的建立。具体将放在下一篇详细讲解。

0 人点赞