SDP里面内容虽然很多,但是条理很清楚。SDP值为字符串,通过换行符生成一行一行的SDP报文,所有行可分为三类:全局行、音频行、视频行
v - Version,版本,版本,应等于0
o - Origin,源,包含一个唯一ID,用于重新协商
s - Session Name,会话名称,应等于-
t - Timing,时间,应等于0 0
m - Media Description,媒体描述,下面有详细说明
a - Attribute,属性,一个自由文本字段,这是WebRTC中最常见的行
c - Connection Data,连接数据,应等于IN IP4 0.0.0.0
v=0
sdp版本号,一直为0,rfc4566规定
o=- 7017624586836067756 2 IN IP4 127.0.0.1
o=
各字段含义如下:
username:发起者的用户名,不允许存在空格,如果应用不支持用户名,则为-。
sess-id:会话id,由应用自行定义,规范的建议是NTP(Network Time Protocol)时间戳。
sess-version:会话版本,用途由应用自行定义,只要会话数据发生变化时(比如编码),sess-version随着递增就行。同样的,规范的建议是NTP时间戳。
nettype:网络类型,比如IN表示Internet。
addrtype:地址类型,比如IP4、IV6
unicast-address:域名,或者IP地址。
s=
会话名,没有的话使用 - 代替
t=0 0
它给出了开始和结束时间。 当它们被设置为0时,意味着会话不受特定时间限制,换句话说,它在任何时候都是永久有效的。
a=group:BUNDLE audio video
BUNDLE分组建立了SDP中包含的几个媒体线之间的关系,通常是音频和视频。在WebRTC中,它用于在相同的RTP会话中复用多个媒体流。 在这种情况下,浏览器提供多路复用音频和视频,但另一方也必须支持和接受。 如果没有这一行,音视频,数据就会分别单独用一个udp端口来发送
a=msid-semantic: WMS h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C
WMS是WebRTC Media Stream简称,这一行定义了本客户端支持同时传输多个流,一个流可以包括多个track, 一般定义了这个,后面a=ssrc这一行就会有msid,mslabel等属性
m=video 60372 UDP/TLS/RTP/SAVPF 100 101 116 117 96
m=video说明本会话包含音频,60372代表视频使用端口60372来传输,但是在webrtc中一现在一般不使用,如果设置为0,代表不传输音频, UDP/TLS/RTP/SAVPF是表示用户来传输视频支持的协议,udp,tls,rtp代表使用udp来传输rtp包,并使用tls加密SAVPF代表使用srtcp的反馈机制来控制通信过程, 后台100 101 116 117 96表示本会话视频支持的编码。
m= ...
【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~
其中:
media:媒体类型。包括 video、audio、text、application、message等。
port:传输媒体流的端口,具体含义取决于使用的网络类型(在c=中声明)和使用的协议(proto,在m=中声明)。
proto:传输协议,具体含义取决于c=中定义的地址类型,比如c=是IP4,那么这里的传输协议运行在IP4之上。比如:
UDP:传输层协议是UDP。
RTP/AVP:针对视频、音频的RTP协议,跑在UDP之上。
RTP/SAVP:针对视频、音频的SRTP协议,跑在UDP之上。
fmt:媒体格式的描述,可能有多个。根据 proto 的不同,fmt 的含义也不同。比如 proto 为 RTP/SAVP 时,fmt 表示 RTP payload 的类型。如果有多个,表示在这次会话中,多种payload类型可能会用到,且第一个为默认的payload类型。 举例,下面表示媒体类型是视频,采用SRTP传输流媒体数据,且RTP包的类型可能是122、102...119,默认是122。
m=video 9 UDP/TLS/RTP/SAVPF 122 102 100 101 124 120 123 119
对于 RTP/SAVP,需要注意的是,payload type 又分两种类型:
动态类型:在a=fmtp:里进行定义。(a=为附加属性,见后面小节)
举例,下面的SDP中:
对于audio,111 是动态类型,表示opus/48000/2。
对于video,122 是动态类型,表示H264/90000。
- m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 126
- a=rtpmap:111 opus/48000/2
- m=video 9 UDP/TLS/RTP/SAVPF 122 102 100 101 124 120 123 119
- a=rtpmap:122 H264/90000
c=IN IP4 217.130.243.155
c=
每个SDP至少需要包含一个会话级别的c=字段,或者在每个媒体描述后面各包含一个c=字段。(媒体描述后的c=会覆盖会话级别的c=)
nettype:网络类型,比如IN,表示 Internet。
addrtype:地址类型,比如IP4、IP6。
connection-address:如果是广播,则为广播地址组;如果是单播,则为单播地址;
举例01:
c=IN IP4 224.2.36.42/127