副标题:webRTC使用记录之 媒体协商SDP及媒体服务器
媒体协商
- Amy 创建 offer,告知待协商信息同时存入本地的 setLocalDescription。
- offer 经由信令服务器抵达 Bob。
- Bob 提取 offer,存入本地的setRemoteDescription。
- Bob 自己做判断,将协商结果发起Answer,同时存入本地的 setLocalDescription。
- Answer 经由信令服务器抵达 Amy。
- Amy提取 Answer,存入本地的 setRemoteDescription。同时 Amy 依据协商结果,对格式等信息进行一些调整。
待协商信息一般是SDP,也可以是其他。
SDP 协议
SDP 协议,属于一种文本规范。
- 多个媒体级描述
- 媒体格式
- 传输协议
- 传输 ip 和 port
- 媒体负载类型
- 一个会话级描述
- 会话名称、目的
- 会话存活时间
- 包含多个媒体信息
- 由多个 type = value 组成
1 | # SDP 范例 s session/o owner/m media /c connect/a attribute/ rtpmap |
WebRTC 中的 SDP
与上文 SDP 有所区别。webRTC的 SDP 组成:
- 会话元
- 网络描述
- 流描述
- 安全描述
- 服务质量
参考链接:WebRTC会话描述协议(SDP)详解
1 | // 复制以下代码到 chrome 的 console 即可拿到 SDP 数据 |
主流媒体服务器
多人音视频架构
- Mesh 方案:建立多个 p2p 通信,难以商用。
- MCU 方案:中心服务器,硬件实现架构,价格昂贵。
- SFU 方案:主要进行网络流的转发,传输量大,可能丢包。 主流方案。
1 对 1 方案:
SFU 方案:
tips:
- SFU 不进行音视频的编解码,直接转发
- webRTC 使用signaling(空耳) 或者 SVC 的方式,应对传输带宽的难题,比如先传核心层(较模糊的音视频),等带宽足够了,再传细节层(粗粗的理解)。
Mediasoup 方案:
其中 Nodejs 部分可以用其他方案替代:Tomcat、jetty、nginx 都行。
- 提供 www 服务、提供客户端代码
- 提供信令服务,执行 SDP 消息传递、room 的创建及销毁等