webrtc-sdp详解

1、SDP协议简介

SDP(Session Description Protocol) 是一种会话描述协议,基于文本,其本身并不属于传输协议,需要依赖其它的传输协议(比如 SIP 和 HTTP)来交换必要的媒体信息,用于两个会话实体之间的媒体协商,详细的标注规范可参考RFC2327和RFC4566。WebRTC 中使用 Offer-Answer 模型交换 SDP,本文详细介绍SDP各属性在WebRTC中的应用。

2、SDP组成

SDP是由多行文本组成的一个纯文本协议,如果将SDP从语义上分解成不同组件来描述一个多媒体会话信息,那么SDP主要由以下部分组成:会话信息、网络信息、媒体信息、安全信息、服务质量和分组信息、DTLS角色、ICE策略等,具体的如下图所示:

SDP属性.png

3、offer SDP

offer sdp:
v=0
//version:sdp协议版本号,值固定为0
o=- 5558452382581391502 2 IN IP4 127.0.0.1
//origin:会话的发起者

user name:没有用“-”代替
session id:会话id
session version:会话版本,如果在会话过程中有改变编码之类的操作,重新生成sdp时,sess-id不变,sess-version加1
net type:Internet
addr type:IP4 or IP6
addr:IP地址
s=-
//Session name:会话名称,没有用“-”替代
t=0 0
//t(timing)=
webrtc始终是0,0代表没有限制
a=group:BUNDLE 0 1
// 表示需要共用一个传输通道传输的媒体,通过ssrc进行区分不同的流。如果没有这一行,音视频数据就会分别用单独udp端口来发送。也可表示为a=group:BUNDLE audio video。
a=extmap-allow-mixed
Chrome自从M71版本就开始支持SDP协议属性extmap-allow-mixed,但是如果提供了extmap-allow-mixed,M71之前版本Chrome的SDP协商将会失败。从Chrome M89版本开始,extmap-allow-mixed 将被默认提供。
a=msid-semantic: WMS(a=msid-semantic: WMS live/123)
msid:media stream id
WMS:WebRTC Media Stream
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
Media Descriptions:媒体描述
m= …
audio:表示音频
9:代表音频使用端口9来传输,但是在webrtc中现在一般不使用,如果设置为0,代表不传输音频。
UDP/TLS/RTP/SAVPF:表示用户支持来传输音频的协议,udp,tls,rtp代表使用udp,来传输rtp包,并使用tls加密。
SAVPF:secret audio video protocol family,表示使用srtcp的反馈机制来控制通信过程。
111…126:表示本会话音频支持的编码
c=IN IP4 0.0.0.0
connection:表示要用来接收或者发送音频使用的IP地址,webrtc使用ice传输,不使用这个地址,该属性webrtc并没有使用。
a=rtcp:9 IN IP4 0.0.0.0
用来传输rtcp的地址和端口,webrtc中不使用
a=ice-ufrag:mlU2
ICE short-term 认证算法用到的用户名
a=ice-pwd:LefAeJLo7QQba6T17xMv4gVb
ICE short-term 认证算法用到的密码
a=ice-options:trickle
支持trickle,即sdp里面只描述媒体信息, ice候选项的信息另行通知。即说明 SDP 中没有包含 candidate 信息,Candidate 是通过信令单独交换的,这样可以做到 Connectivity checks 和 Candidate harvesting 并行处理,提高会话建立的速度。
a=fingerprint:sha-256 42:3B:E0:D9:3D:CD:85:1C:2C:30:BD:D9:45:5A:B1:B2:79:92:80:DD:C1:16:03:59:56:87:2A:06:D1:39:9B:31
dtls协商过程中需要的认证信息,sha-256加密算法。即fingerprint 是 DTLS 过程中的 Certificate 证书的签名,防止客户端和服务器的证书被篡改。
a=setup:actpass
setup:指的是 DTLS 的角色,也就是谁是 DTLS Client(active),谁是 DTLS Server(passive),如果自己两个都可以那就是 actpass。这里我们是 actpass,那么就要由对方在 Answer 中确定最终的 DTLS 角色。
a=mid:0
表示media的名字,用于查找具体的media。前面BUNDLE行中用到的媒体标识。
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
RTP 扩展项,接收者可以自己解码获取里面的数据
a=

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值