webrtc入门之sdp协议
目录
背景:
视频行业在建立具体得数据传输之前,都会走一个控制信令,这个信令会协商交互彼此得音视频编解码能力,网络带宽和传输协议等信息,这个描述协议就是Session Description Protocol.协议详细内容在RFC4566中规定。本篇文章主要记录下我在学习webrtc中遇到sdp协商格式得一些笔记。
具体详细得sdp协议在webrtc中得应用 可参考https://www.ietf.org/archive/id/draft-nandakumar-rtcweb-sdp-08.txt。
SDP格式组成
标准sdp规范里主要包括sdp描述格式和sdp结构,其中sdp结构里面最重要的2项内容是会话描述信息和媒体描述信息。
v=0
o=- 6973940625606599847 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video
a=msid-semantic: WMS stream_label
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:Sq4a
a=ice-pwd:SZ5VkclYMTzGQVX91fFbYvbn
........
sdp是由多个<type> = <value>这样的表达式组成
1.会话级描述一般是从v=开始到第一个媒体描述行m=出现之前。
2.媒体描述信息主要是m=行到下一个m=出现之间,是对单个媒体流即音频流,视频流和字幕流的单个描述,如果有多个则会存在多个m行。
会话描述部分
1.v=
v就是protocol version,必选字段,表示了sdp的版本号,但是不包含子版本号,一般就是v=0.
2.o=
o是owner,必要字段,主要包含用户名,会话id,version,网络地址等信息
o=<username><session id><version><network type><address>
3.s=
s即seesion name,表示的会话名称,必选字段,在整个sdp里面只有一个会话名称,只存在一个这样的字段
4.t=
t=<start time><stop time> 表示会话的开始和结束时间,必选字段,持久会话,为0
媒体描述部分
1.m=
可选字段,代表具体的音频流或者视频流或者别的媒体流
m=<media type><port><transport><fmt list>
媒体类型 audio video
媒体端口 发流端口 或者收流端口
传输协议 表示码流的传输协议,例如;UDP/TLS/RTP/SAVPF
媒体格式 :这里表示负载类型 一般表示的是视频的h264 h265 vp8 音频则是g7xx aac opus等类型
2.a=
a=<type>
a=<type>:<value>
rtmap属性
a=rtpmap:<payload type> <encoding name>/<clock rate>[/encoding paramters]
payload type 负载类型
encoding name 编码器名称
clock rate 采样率
encoding paramters 编码参数(视频就是分辨率 帧率,音频有单双声道等信息)
fmtp属性
a=fmtp:<payload type><format specific parameters>
payload type 负载类型
format specific parameters 具体的参数
webrtc中发布端示例分析
SFU模式下请求媒体服务的offer
v=0 //版本号
o=- 5045391719999432688 2 IN IP4 127.0.0.1 //o行 上面已解释过
s=- //忽略
t=0 0 //持久会话 都填0
a=group:BUNDLE audio video //共用一个传输通道传输的媒体,如果没有这一行,音视频,数据就会分别单独用一个udp端口来发送
a=msid-semantic: WMS stream_label //WMS是WebRTC Media Stream简称,这一行定义了本客户端支持同时传输多个流,一个流可以包括多个track。出现此行 后面a=ssrc这一行就会有msid,mslabel等属性
会话描述
/音频媒体描述/
//说明本会话包含音频,9代表音频使用端口9来传输,但是在webrtc中一现在一般不使用,如果设置为0,代表不传输音频,UDP/TLS/RTP/SAVPF是表示用户来传输音频支持的协 议,udp,tls,rtp代表使用udp来传输rtp包,并使用tls加密,SAVPF代表使用srtcp的反馈机制来控制通信过程,111表示音频支持的编码。
m=audio 9 UDP/T