文章目录
- 1 SDP简介
- 2 SDP协议格式
- 2.1 字段描述
- 2.1.1 Version(必选)
- 2.1.2 origion(必选)
- 2.1.3 Session Name(必选)
- 2.1.4 Connection Data(可选)
- 2.1.5 Bandwidth(可选)
- 2.1.6 Times(必选), RepeatTimesand Time Zones
- 2.1.7 Repeat(可选)
- 2.1.8 Media Announcements (必选)
- 2.1.9 (可选)
- 2.1.9.1 会话级属性
- 2.1.9.2 媒体级属性
- 2.1.9.2.1 rtpmap
- 2.1.9.2.2 fmtp
- 3 举例
- 3.1 示例1
- 3.2 示例2
- 参考资料
SIP和其他协议一样都有这样的一个要求:在会话开头时两端要有充分的信息交流。使用的两个协议就是定义在RFC 2974中的SAP(Session Announcement Protocol )和定义在RFC 2327的SDP (Session Description Protocol)。简单来说,SAP提供了一种定期宣传多媒体会话,向有意参与会话者传递相关会话信息的机制。使用它来支持Mbone(Internet Multicast Backbone),因此关兴趣的各方都会清楚的指导目前正在进行的一些会话。而SDP则定义了描述一个通信会话的格式,同样的,它也可以用于不同的传输协议,比如SAP、SIP、HTTP或其他等传输协议。本节主要介绍 SDP协议格式。
SDP全称是Session Description Protocol,翻译过来就是描述会话的协议。主要用于两个会话实体之间的媒体协商。
Sip负责建立和释放会话,一般来说,会话会包含相关的媒体,如视频和音频。媒体数据是有sdp描述的。Sdp一般不单独使用,他与sip配合使用时会放到sip协议的正文(boby)中。会话建立时,需要媒体协商,双方才能确定对方的媒体能力以及交换媒体数据。(这就是sdp的工作)
那为什么要去发这个描述文本呢,主要是为了解决参与会话的各成员之间能力不对等的问题,如果参加本次通话的成员都支持高质量的通话,但是我们没有去进行协议,为了兼容性,使用的都是普通质量的通话格式,这样就很浪费资源了。所以SDP的作用还是很有必要的。
在SIP协议的包含的内容是SDP时,应该把Content-Type设置成application/sdp。SDP协议于RFC4566中发布
样例:
1 SDP简介
SDP是会话描述协议的缩写,是描述流媒体初始化参数的格式,由IETF作为RFC 4566颁布。流媒体是指在传输过程中看到或听到的内容,SDP包通常包括以下信息:
(1)会话信息
- 会话名和目的。
- 会话活动时间。
由于参与会话的资源是受限制的,因此包括以下附加信息是非常有用的。
- 会话使用的带宽信息。
- 会话负责人的联系信息。
(2)媒体信息
- 媒体类型,例如视频和音频。
- 传输协议,例如RTP/UDP/IP和H.320。
- 媒体格式,例如H.261视频和MPEG视频。
- 多播地址和媒体传输端口(IP多播会话)。
- 用于联系地址的媒体和传输端口的远端地址(IP单播会话)。
SDP描述由许多文本行组成,文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构化的文本串,其格式依<类型>而定。“=”两侧不允许有空格,一个值中的多个参数用空格分隔。
2 SDP协议格式
SDP会话描述由一个会话级描述(session_level description)和多个媒体级描述(media_level description)组成。会话级(session_level)的作用域是整个会话。其位置是从’v=’行开始到第一个媒体描述为止。媒体级(media_level)描述是对单个的媒体流进行描述(例如传送单个音频或者视频的vlc sdp文件只有短短的几句话,从m=开始,这其实就是个媒体机描述),其位置是从’m=’行开始到下一个媒体描述为止。总之,除非媒体部分重载,会话级的值是各个媒体的缺省默认值(就是说媒体级描述其实也是一个会话级描述,只不过没写出来的会话级描述参数都用的缺省值)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28Session description (会话名称和意图描述) v= (protocol version) #协议版本 o= (owner/creator and session identifier) #所有者/创建者和会话标识符 s= (session name) #会话名称 i=* (session information) #会话信息 u=* (URI of description) #URI 描述 e=* (email address) #Email 地址 p=* (phone number) #电话号码 c=* (connection information - not required if included in all media) #连接信息 ― 如果包含在所有媒体中,则不需要该字段 b=* (zero or more bandwidth information lines) #带宽信息 One or more time descriptions ("t=" and "r=" lines, see below) z=* (time zone adjustments) # 时区调整 k=* (encryption key) # 加密密钥 k=已定义的方法有: k=clear:<加密密钥>密钥没有变换;k=base64:<编码密钥>已编码,因为它含有SDP禁用的字符;k=uri:<获得密钥的URI>;k=prompt。SDP没有提供密钥但该会话或媒体流是要求加密的。 a=* (zero or more session attribute lines) Zero or more media descriptions Time description # 时间描述 t= (time the session is active) # 会话活动时间 r=* (zero or more repeat times) # 0或多次重复次数 Media description, if present # 媒体描述 m= (media name and transport address) # 媒体名称和传输地址 i=* (media title) # 媒体标题 c=* (connection information - optional if included at session-level) # 连接信息 — 如果包含在会话层则该字段可选 b=* (zero or more bandwidth information lines) #带宽信息 k=* (encryption key) # 加密密钥 a=* (zero or more media attribute lines) #0 个或多个会话属性行
以上带*
号的是可选的,其余的是必须的。一般顺序也按照上面的顺序来排列。
a=*是sdp协议扩展属性定义,除上面以外的,分解时其它的都可以扔掉。
a=charset属性指定协议使用的字符集。一般的是ISO-10646。
2.1 字段描述
2.1.1 Version(必选)
SDP的版本号,不包括次版本号。
1
2v=0
2.1.2 origion(必选)
“o=”项对会话的发起者进行了描述。
1
2
3o=<username> <sessionid> <version> <network type> <address type> <address> o=<用户名> <session id> <会话版本> <网络类型><地址类型> <地址>
<username>
是用户的登录名。如果主机不支持< username>,则为-
。注意:< username>不能含空格。<session id>
是一个数字串。在整个会话中,必须是唯一的。为了确保其唯一,建议使用NTP(Network Time Protocol)timestamp。<version>
该会话公告的版本,供公告代理服务器检测同一会话的若干个公告哪个是最新公告.基本要求是会话数据修改后该版本值递增,建议用NTP时戳。<networktype>
网络类型,一般为IN
,表示”internet”<address type>
地址类型,一般为IP4
<address>
地址
2.1.3 Session Name(必选)
表示本sdp所描述的session的名称,没有的话使用-
代替,在整个会话中有且只有一个s=
。
1
2s=<sessionname>
2.1.4 Connection Data(可选)
表示媒体连接信息。
一个会话声明中,会话级描述中必须有”c=”项或者在每个媒体级描述中有一个”c=”项。可能在会话级描述和每个媒体级描述中都有”c=”项。
其中值域中以空格分配的两个字段分贝是网络类型和网络地址,以后的RTP流就会发到该地址上。
1
2c=<networktype> <address type> <connection address>
<network type>
网络类型,一般为IN
,表示”internet”<address type>
地址类型,一般为IP4
。<connection address>
应用程序必须处理域名和ip地址两种情形。单播时,为域名或IP地址,推荐使用域名;多播,为IP地址,且IP后面必须有TTL(取值范围是0-255),地址和TTL决定了多播包被传播的范围。
例:
c=IN IP4 224.2.1.1/127
分层编码方案是一个数据流被分为多层,接受者能够通过申请不同层的流选择流的质量(包括带宽)如下:
<base multicastaddress>/< ttl>/< number of addresses>
如果< number of addresses>
没有给定,则默认为1。
由此得出:
c=INIP4 224.2.1.1/127/3
等价于
1
2
3
4c=IN IP4 224.2.1.1/127 c=IN IP4 224.2.1.2/127 c=IN IP4 224.2.1.3/127
2.1.5 Bandwidth(可选)
描述了建议的带宽,单位kilobits per second(缺省带宽是千比特每秒)。
1
2b=<bwtype>:<bandwidth-value>
包括两种CT和AS。CT:ConferenceTotal,总带宽。AS:Application-SpecificMaximum,单个媒体带宽的最大值。
扩展机制:<bwtype>
以”X-”开始。建议bwtype越短越好。例b=X-YZ:128
2.1.6 Times(必选), RepeatTimesand Time Zones
描述了会话的开始时间和结束时间。这个可以有行,指定多个不规则时间段,如果是规则的时间段,则r=
属性可以使用。
1
2t=<start time> <stop time>
<start time>
和<stop time>
为NTP时间,单位是秒。- 假如
<stop time>
为零表示过了<start time>
时间后会话一直持续。 - 当
<start time>
和<stoptime>
均为零时表示持久会话。
2.1.7 Repeat(可选)
重复次数
1
2r=<repeat-interval> <active duration> <offsets from start-time>
在时间表示里面可以如下表示:
- d - days (86400 seconds)
- h - hours (3600 seconds)
- m - minutes (60 seconds)
- s - seconds (allowed for completeness)
2.1.8 Media Announcements (必选)
一个会话描述包括几个媒体描述。一个媒体描述以”m=”开始到下一个”m=”结束。
1
2m=<media> <port> <transport> <fmt list>
-
<media>
表示媒体类型。有"audio", “video”,“application”(例白板信息), “data”(不向用户显示的数据) 和"control"(描述额外的控制通道)。 -
<port>
媒体流发往传输层的端口。取决于c=行规定的网络类型和接下来的传输层协议:- 对UDP为1024-65535;
- 对于RTP为偶数。
当分层编码流被发送到一个单播地址时,需要列出多个端口。方式如下:m=<media> <port>/<number of ports> <transport> <fmt list>
对于RTP,偶数端口被用来传输数据,奇数端口用来传输RTCP包。例:m=video49170/2 RTP/AVP 31
端口49170和49171为第一对RTP/RTCP端口,49172和49173为第二对的端口。传输协议是RTP/AVP,媒体格式为31(媒体格式是rtp头中payload参数对应的)。
-
<transport>
传输协议,与c=行的地址类型有关。两种:- RTP/AVP,表示RealtimeTransport Protocol using the Audio/Video profile carried over UDP;
- UDP
-
<fmt list>
媒体格式。对于音频和视频就是在RTP Audio/Video Profile定义的负载类型(payload type)。但第一个为缺省值。分为静态绑定和动态绑定:
- 静态绑定即媒体编码方式与RTP流中的PayloadType(载荷类型)一一对应。
- 动态绑定即媒体编码方式(如时钟频率,音频信道数等)没有完全确定,动态编码都大于95,并且需要在后面使用“a=rtpmap”进行说明。
静态绑定的例子:
u_law的PCM编码单信道Audio,采样率8KHZ。在RTPAudio/Video profile中对应的payload type为0。即: `复制代码1
2m=audio 49232 RTP/AVP 0
动态绑定的例子:
16位线形编码,采样率为16KHZ,假如我们希望动态RTP/AVP 类型98表示此此流,写法如下:复制代码1
2
3m=video49232 RTP/AVP 98 a=rtpmap:98 L16/16000/2
有关RTP载荷类型,请参考:RTP有效负载(载荷)类型,RTP Payload Type
2.1.9 (可选)
属性,它用于描述上面的音频的属性。
1
2
3a=<attribute> a=<attribute>:<value>
2.1.9.1 会话级属性
一般在t之后
a=cat:<类别>
给出点分层次式会话分类号,供接收方筛选会话a=keywds:<关键词>
供接收方筛选会话a=tool:<工具名和版本号>
创建会话描述的工具名和版本号a=recvonly/sendrecv/sendonly
收发模式a=type:<会议类型>
有:广播,聚会,主席主持,测试,H.323a=charset:<字符集>
显示会话名和信息数据的字符集a=sdplang:<语言标记>
描述所有语言a=lang:<语言标记>
会话描述的缺省语言或媒体描述的语言a=framerate:<帧速率>
1s播放几个rtp包,导数为一个rtp包承载的数据播放的时间单位s。单位:帧/秒
音频的话 a=framerate:50 1byte8000hz20ms=160B,则每个rtp包的音频数据量为160B 时间戳增值为160a=quality:<质量>
视频的建议质量(10/5/0)
2.1.9.2 媒体级属性
一般在m之后
a=ptime:<分组时间>
媒体分组的时长(单位:秒)a=recvonly/sendrecv/sendonly
收发模式a=orient:<白板方向>
指明白板在屏莫上的方向a=sdplang:<语言标记>
描述所有语言a=lang:<语言标记>
会话描述的缺省语言或媒体描述的语言
2.1.9.2.1 rtpmap
rtpmap是rtp与map的结合, 即RTP参数映射表。对于音频流,<编码参数>说明了音频的通道数。通道数默认缺省值为1。对于视频流,现阶段没有<编码参数>。
1
2
3a=rtpmap:<payload type> <encoding name>/<clock rate>[/<encodingparameters>] a=rtpmap:<负载类型> <编码名>/<时钟速率>[/<编码参数>]
- : 负载类型, 对应RTP包中的音视频数据负载类型.
- : 编码器名称, 如VP8, VP9, OPUS.
- : 采样率.
- : 编码参数, 如音频是否是双声道, 通道数默认缺省值为1(单声道)。
示例:
1
2
3
4
5
6
7
8
9
10
11m=audio 49230 RTP/AVP 96 97 98 a=rtpmap:96 L8/8000 a=rtpmap:97 L16/8000 a=rtpmap:98 L16/11025/2 m=audio 8888 RTP/AVP 0 a=rtpmap:0 pcma/8000/1 m=video 1234 RTP/AVP 96 a=rtpmap:96 H264
在rtpmap中,实验性的编码方案也可以用。其格式名前一定为”X-”例:一种新的实验性的被称为GSMLPC的音频流,使用的动态负载类型为99。
1
2
3m=video 49232 RTP/AVP 99 a=rtpmap:99 X-GSMLPC/8000
*rtpmap 还可以有几种值:
recvonly
,sendrecv
,sendonly
,inactive
这些值表示媒体流的双向保持设定(双向保持,即A 保持 B, B保持A)。
A 保持 B: A发送sendonly B 回复 recvonly
B 保持 A:B发送inactive A无消息 (sendonly也可)
A 解除保持:A发送sendrecv, B无消息
B解除保持: B发送sendrecv, A回复sendrecv
A B可继续通话。
如果请求某媒体流的方向为sendonly,那么响应中对应媒体的方向必须为recvonly;
如果请求某媒体流的方向为recvonly,那么响应中对应媒体的方向必须为sendonly;
如果请求某媒体流的方向为sendrecv,那么响应中对应媒体的方向可以为sendrecv/sendonly/recvonly/inactive中的一种;
如果请求某媒体流的方向为inactive,那么响应中对应媒体的方向必须为inactive;
2.1.9.2.2 fmtp
定义指定格式的附加参数
1
2a=fmtp:<payload type> <format specific parameters>
- , 负载类型
- 指具体参数.
3 举例
3.1 示例1
1
2
3
4
5
6
7
8
9
10v=0 o=- 49451 3 IN IP4 127.0.0.1 s=Test MPEG Video session i=Parameters for the session streamed by "testMPEG1or2VideoStreamer" t=0 0 a=tool:testMPEG1or2VideoStreamer a=type:broadcast m=video 1234 RTP/AVP 32 c=IN IP4 239.255.42.42/127
- 第1行v代表了协议版本,例子中为0。
- 第2行o代表所有者/创建者和会话标识符。
- 第3行s代表会话名称,例子中为Test MPEG Video session,用户可以自己填写。
- 第4行t代表会话活动时间。
- 第5行和第6行a代表会话属性行,可写0个或多个。
- 第7行m代表代表媒体信息;video代表是视频流;1234代表UDP端口号是1234;RTP/AVP指媒体传输协议使用RTP/AVP;32代表媒体格式使用MPV并且使用90KHz的时钟。
- 关于RTP/AVP可以在RFC 3551 RTP A/V Profile July 2003找到。
以下是部分截取:
PT encoding media type clock rate
name (Hz)24 unassigned V
25 CelB V 90,000
26 JPEG V 90,000
27 unassigned V
28 nv V 90,000
29 unassigned V
30 unassigned V
31 H261 V 90,000
32 MPV V 90,000 (这就是例子中的RTP/AVP类型)
33 MP2T AV 90,000
34 H263 V 90,000
35-71 unassigned ?
72-76 reserved N/A N/A
77-95 unassigned ?
96-127 dynamic ?
dyn H263-1998 V 90,000
- 第8行c代表连接信息。
当然了还可以加上更多的信息描述,例如b=AS:104857,b代表了带宽信息。
3.2 示例2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135v=0 //sdp版本号,一直为0,rfc4566规定 o=- 7017624586836067756 2 IN IP4 127.0.0.1 // o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address> //username如何没有使用-代替,7017624586836067756是整个会话的编号,2代表会话版本,如果在会话 //过程中有改变编码之类的操作,重新生成sdp时,sess-id不变,sess-version加1 s=- //会话名,没有的话使用-代替 t=0 0 //两个值分别是会话的起始时间和结束时间,这里都是0代表没有限制 a=group:BUNDLE audio video data //需要共用一个传输通道传输的媒体,如果没有这一行,音视频,数据就会分别单独用一个udp端口来发送 a=msid-semantic: WMS h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C //WMS是WebRTC Media Stream简称,这一行定义了本客户端支持同时传输多个流,一个流可以包括多个track, //一般定义了这个,后面a=ssrc这一行就会有msid,mslabel等属性 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 //m=audio说明本会话包含音频,9代表音频使用端口9来传输,但是在webrtc中一现在一般不使用,如果设置为0,代表不 //传输音频,UDP/TLS/RTP/SAVPF是表示用户来传输音频支持的协议,udp,tls,rtp代表使用udp来传输rtp包,并使用tls加密 //SAVPF代表使用srtcp的反馈机制来控制通信过程,后台111 103 104 9 0 8 106 105 13 126表示本会话音频支持的编码,后台几行会有详细补充说明 c=IN IP4 0.0.0.0 //这一行表示你要用来接收或者发送音频使用的IP地址,webrtc使用ice传输,不使用这个地址 a=rtcp:9 IN IP4 0.0.0.0 //用来传输rtcp地地址和端口,webrtc中不使用 a=ice-ufrag:khLS a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ //以上两行是ice协商过程中的安全验证信息 a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17 //以上这行是dtls协商过程中需要的认证信息 a=setup:actpass //以上这行代表本客户端在dtls协商过程中,可以做客户端也可以做服务端,参考rfc4145 rfc4572 a=mid:audio //在前面BUNDLE这一行中用到的媒体标识 a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level //上一行指出我要在rtp头部中加入音量信息,参考 rfc6464 a=sendrecv //上一行指出我是双向通信,另外几种类型是recvonly,sendonly,inactive a=rtcp-mux //上一行指出rtp,rtcp包使用同一个端口来传输 //下面几行都是对m=audio这一行的媒体编码补充说明,指出了编码采用的编号,采样率,声道等 a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc //以上这行说明opus编码支持使用rtcp来控制拥塞,参考https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=fmtp:111 minptime=10;useinbandfec=1 //对opus编码可选的补充说明,minptime代表最小打包时长是10ms,useinbandfec=1代表使用opus编码内置fec特性 a=rtpmap:103 ISAC/16000 a=rtpmap:104 ISAC/32000 a=rtpmap:9 G722/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:106 CN/32000 a=rtpmap:105 CN/16000 a=rtpmap:13 CN/8000 a=rtpmap:126 telephone-event/8000 a=ssrc:18509423 cname:sTjtznXLCNH7nbRw //cname用来标识一个数据源,ssrc当发生冲突时可能会发生变化,但是cname不会发生变化,也会出现在rtcp包中SDEC中, //用于音视频同步 a=ssrc:18509423 msid:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C 15598a91-caf9-4fff-a28f-3082310b2b7a //以上这一行定义了ssrc和WebRTC中的MediaStream,AudioTrack之间的关系,msid后面第一个属性是stream-d,第二个是track-id a=ssrc:18509423 mslabel:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C a=ssrc:18509423 label:15598a91-caf9-4fff-a28f-3082310b2b7a m=video 9 UDP/TLS/RTP/SAVPF 100 101 107 116 117 96 97 99 98 //参考上面m=audio,含义类似 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:khLS a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17 a=setup:actpass a=mid:video a=extmap:2 urn:ietf:params:rtp-hdrext:toffset a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:4 urn:3gpp:video-orientation a=extmap:5 http://www.ietf.org/id/draft-hol ... de-cc-extensions-01 a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=sendrecv a=rtcp-mux a=rtcp-rsize a=rtpmap:100 VP8/90000 a=rtcp-fb:100 ccm fir //ccm是codec control using RTCP feedback message简称,意思是支持使用rtcp反馈机制来实现编码控制,fir是Full Intra Request //简称,意思是接收方通知发送方发送幅完全帧过来 a=rtcp-fb:100 nack //支持丢包重传,参考rfc4585 a=rtcp-fb:100 nack pli //支持关键帧丢包重传,参考rfc4585 a=rtcp-fb:100 goog-remb //支持使用rtcp包来控制发送方的码流 a=rtcp-fb:100 transport-cc //参考上面opus a=rtpmap:101 VP9/90000 a=rtcp-fb:101 ccm fir a=rtcp-fb:101 nack a=rtcp-fb:101 nack pli a=rtcp-fb:101 goog-remb a=rtcp-fb:101 transport-cc a=rtpmap:107 H264/90000 a=rtcp-fb:107 ccm fir a=rtcp-fb:107 nack a=rtcp-fb:107 nack pli a=rtcp-fb:107 goog-remb a=rtcp-fb:107 transport-cc a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f //h264编码可选的附加说明 a=rtpmap:116 red/90000 //fec冗余编码,一般如果sdp中有这一行的话,rtp头部负载类型就是116,否则就是各编码原生负责类型 a=rtpmap:117 ulpfec/90000 //支持ULP FEC,参考rfc5109 a=rtpmap:96 rtx/90000 a=fmtp:96 apt=100 //以上两行是VP8编码的重传包rtp类型 a=rtpmap:97 rtx/90000 a=fmtp:97 apt=101 a=rtpmap:99 rtx/90000 a=fmtp:99 apt=107 a=rtpmap:98 rtx/90000 a=fmtp:98 apt=116 a=ssrc-group:FID 3463951252 1461041037 //在webrtc中,重传包和正常包ssrc是不同的,上一行中前一个是正常rtp包的ssrc,后一个是重传包的ssrc a=ssrc:3463951252 cname:sTjtznXLCNH7nbRw a=ssrc:3463951252 msid:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C ead4b4e9-b650-4ed5-86f8-6f5f5806346d a=ssrc:3463951252 mslabel:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C a=ssrc:3463951252 label:ead4b4e9-b650-4ed5-86f8-6f5f5806346d a=ssrc:1461041037 cname:sTjtznXLCNH7nbRw a=ssrc:1461041037 msid:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C ead4b4e9-b650-4ed5-86f8-6f5f5806346d a=ssrc:1461041037 mslabel:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C a=ssrc:1461041037 label:ead4b4e9-b650-4ed5-86f8-6f5f5806346d m=application 9 DTLS/SCTP 5000 c=IN IP4 0.0.0.0 a=ice-ufrag:khLS a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17 a=setup:actpass a=mid:data a=sctpmap:5000 webrtc-datachannel 1024
参考资料
- SDP协议
- SDP协议详细介绍
- 音视频学习笔记-SDP
- 几种音频的sdp
- sdp文件详细总结
- SDP协议介绍
最后
以上就是诚心小蜜蜂最近收集整理的关于SIP协议-05 SDP协议1 SDP简介2 SDP协议格式2.1 字段描述3 举例参考资料的全部内容,更多相关SIP协议-05内容请搜索靠谱客的其他文章。
发表评论 取消回复