SIP和其他協(xié)議一樣都有這樣的一個(gè)要求:在會(huì)話開頭時(shí)兩端要有充分的信息交流。使用的兩個(gè)協(xié)議就是定義在RFC 2974中的SAP(Session Announcement Protocol )和定義在RFC 2327的SDP (Session Description Protocol)。簡(jiǎn)單來(lái)說(shuō),SAP提供了一種定期宣傳多媒體會(huì)話,向有意參與會(huì)話者傳遞相關(guān)會(huì)話信息的機(jī)制。使用它來(lái)支持Mbone(Internet Multicast Backbone),因此關(guān)興趣的各方都會(huì)清楚的指導(dǎo)目前正在進(jìn)行的一些會(huì)話。而SDP則定義了描述一個(gè)通信會(huì)話的格式,同樣的,它也可以用于不同的傳輸協(xié)議,比如SAP、SIP、HTTP或其他等傳輸協(xié)議。本節(jié)主要介紹 SDP協(xié)議格式。
SDP全稱是Session Description Protocol,翻譯過來(lái)就是描述會(huì)話的協(xié)議。主要用于兩個(gè)會(huì)話實(shí)體之間的媒體協(xié)商。
Sip負(fù)責(zé)建立和釋放會(huì)話,一般來(lái)說(shuō),會(huì)話會(huì)包含相關(guān)的媒體,如視頻和音頻。媒體數(shù)據(jù)是有sdp描述的。Sdp一般不單獨(dú)使用,他與sip配合使用時(shí)會(huì)放到sip協(xié)議的正文(boby)中。會(huì)話建立時(shí),需要媒體協(xié)商,雙方才能確定對(duì)方的媒體能力以及交換媒體數(shù)據(jù)。(這就是sdp的工作)
那為什么要去發(fā)這個(gè)描述文本呢,主要是為了解決參與會(huì)話的各成員之間能力不對(duì)等的問題,如果參加本次通話的成員都支持高質(zhì)量的通話,但是我們沒有去進(jìn)行協(xié)議,為了兼容性,使用的都是普通質(zhì)量的通話格式,這樣就很浪費(fèi)資源了。所以SDP的作用還是很有必要的。
在SIP協(xié)議的包含的內(nèi)容是SDP時(shí),應(yīng)該把Content-Type設(shè)置成application/sdp。SDP協(xié)議于RFC4566中發(fā)布
樣例:
1 SDP簡(jiǎn)介
SDP是會(huì)話描述協(xié)議的縮寫,是描述流媒體初始化參數(shù)的格式,由IETF作為RFC 4566頒布。流媒體是指在傳輸過程中看到或聽到的內(nèi)容,SDP包通常包括以下信息:
(1)會(huì)話信息
- 會(huì)話名和目的。
- 會(huì)話活動(dòng)時(shí)間。
由于參與會(huì)話的資源是受限制的,因此包括以下附加信息是非常有用的。
- 會(huì)話使用的帶寬信息。
- 會(huì)話負(fù)責(zé)人的聯(lián)系信息。
(2)媒體信息
- 媒體類型,例如視頻和音頻。
- 傳輸協(xié)議,例如RTP/UDP/IP和H.320。
- 媒體格式,例如H.261視頻和MPEG視頻。
- 多播地址和媒體傳輸端口(IP多播會(huì)話)。
- 用于聯(lián)系地址的媒體和傳輸端口的遠(yuǎn)端地址(IP單播會(huì)話)。
SDP描述由許多文本行組成,文本行的格式為<類型>=<值>,<類型>是一個(gè)字母,<值>是結(jié)構(gòu)化的文本串,其格式依<類型>而定。“=”兩側(cè)不允許有空格,一個(gè)值中的多個(gè)參數(shù)用空格分隔。
2 SDP協(xié)議格式
SDP會(huì)話描述由一個(gè)會(huì)話級(jí)描述(session_level description)和多個(gè)媒體級(jí)描述(media_level description)組成。會(huì)話級(jí)(session_level)的作用域是整個(gè)會(huì)話。其位置是從’v=’行開始到第一個(gè)媒體描述為止。媒體級(jí)(media_level)描述是對(duì)單個(gè)的媒體流進(jìn)行描述(例如傳送單個(gè)音頻或者視頻的vlc sdp文件只有短短的幾句話,從m=開始,這其實(shí)就是個(gè)媒體機(jī)描述),其位置是從’m=’行開始到下一個(gè)媒體描述為止。總之,除非媒體部分重載,會(huì)話級(jí)的值是各個(gè)媒體的缺省默認(rèn)值(就是說(shuō)媒體級(jí)描述其實(shí)也是一個(gè)會(huì)話級(jí)描述,只不過沒寫出來(lái)的會(huì)話級(jí)描述參數(shù)都用的缺省值)。
Session description (會(huì)話名稱和意圖描述)
v= (protocol version) #協(xié)議版本
o= (owner/creator and session identifier) #所有者/創(chuàng)建者和會(huì)話標(biāo)識(shí)符
s= (session name) #會(huì)話名稱
i=* (session information) #會(huì)話信息
u=* (URI of description) #URI 描述
e=* (email address) #Email 地址
p=* (phone number) #電話號(hào)碼
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) # 時(shí)區(qū)調(diào)整
k=* (encryption key) # 加密密鑰 k=已定義的方法有: k=clear:<加密密鑰>密鑰沒有變換;k=base64:<編碼密鑰>已編碼,因?yàn)樗蠸DP禁用的字符;k=uri:<獲得密鑰的URI>;k=prompt。SDP沒有提供密鑰但該會(huì)話或媒體流是要求加密的。
a=* (zero or more session attribute lines)
Zero or more media descriptions
Time description # 時(shí)間描述
t= (time the session is active) # 會(huì)話活動(dòng)時(shí)間
r=* (zero or more repeat times) # 0或多次重復(fù)次數(shù)
Media description, if present # 媒體描述
m= (media name and transport address) # 媒體名稱和傳輸?shù)刂? i=* (media title) # 媒體標(biāo)題
c=* (connection information - optional if included at session-level) # 連接信息 — 如果包含在會(huì)話層則該字段可選
b=* (zero or more bandwidth information lines) #帶寬信息
k=* (encryption key) # 加密密鑰
a=* (zero or more media attribute lines) #0 個(gè)或多個(gè)會(huì)話屬性行
以上帶*
號(hào)的是可選的,其余的是必須的。一般順序也按照上面的順序來(lái)排列。
a=*是sdp協(xié)議擴(kuò)展屬性定義,除上面以外的,分解時(shí)其它的都可以扔掉。
a=charset屬性指定協(xié)議使用的字符集。一般的是ISO-10646。
2.1 字段描述
2.1.1 Version(必選)
SDP的版本號(hào),不包括次版本號(hào)。
v=0
2.1.2 origion(必選)
“o=”項(xiàng)對(duì)會(huì)話的發(fā)起者進(jìn)行了描述。
o=<username> <sessionid> <version> <network type> <address type> <address>
o=<用戶名> <session id> <會(huì)話版本> <網(wǎng)絡(luò)類型><地址類型> <地址>
-
<username>
是用戶的登錄名。如果主機(jī)不支持< username>,則為-
。注意:< username>不能含空格。 -
<session id>
是一個(gè)數(shù)字串。在整個(gè)會(huì)話中,必須是唯一的。為了確保其唯一,建議使用NTP(Network Time Protocol)timestamp。 -
<version>
該會(huì)話公告的版本,供公告代理服務(wù)器檢測(cè)同一會(huì)話的若干個(gè)公告哪個(gè)是最新公告.基本要求是會(huì)話數(shù)據(jù)修改后該版本值遞增,建議用NTP時(shí)戳。 -
<networktype>
網(wǎng)絡(luò)類型,一般為IN
,表示”internet” -
<address type>
地址類型,一般為IP4
-
<address>
地址
2.1.3 Session Name(必選)
表示本sdp所描述的session的名稱,沒有的話使用-
代替,在整個(gè)會(huì)話中有且只有一個(gè)s=
。
s=<sessionname>
2.1.4 Connection Data(可選)
表示媒體連接信息。
一個(gè)會(huì)話聲明中,會(huì)話級(jí)描述中必須有”c=”項(xiàng)或者在每個(gè)媒體級(jí)描述中有一個(gè)”c=”項(xiàng)。可能在會(huì)話級(jí)描述和每個(gè)媒體級(jí)描述中都有”c=”項(xiàng)。
其中值域中以空格分配的兩個(gè)字段分貝是網(wǎng)絡(luò)類型和網(wǎng)絡(luò)地址,以后的RTP流就會(huì)發(fā)到該地址上。
c=<networktype> <address type> <connection address>
-
<network type>
網(wǎng)絡(luò)類型,一般為IN
,表示”internet” -
<address type>
地址類型,一般為IP4
。 -
<connection address>
應(yīng)用程序必須處理域名和ip地址兩種情形。單播時(shí),為域名或IP地址,推薦使用域名;多播,為IP地址,且IP后面必須有TTL(取值范圍是0-255),地址和TTL決定了多播包被傳播的范圍。
例:c=IN IP4 224.2.1.1/127
分層編碼方案是一個(gè)數(shù)據(jù)流被分為多層,接受者能夠通過申請(qǐng)不同層的流選擇流的質(zhì)量(包括帶寬)如下:<base multicastaddress>/< ttl>/< number of addresses>
如果< number of addresses>
沒有給定,則默認(rèn)為1。
由此得出:c=INIP4 224.2.1.1/127/3
等價(jià)于
c=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(缺省帶寬是千比特每秒)。
b=<bwtype>:<bandwidth-value>
包括兩種CT和AS。CT:ConferenceTotal,總帶寬。AS:Application-SpecificMaximum,單個(gè)媒體帶寬的最大值。
擴(kuò)展機(jī)制:<bwtype>
以”X-”開始。建議bwtype越短越好。例b=X-YZ:128
2.1.6 Times(必選), RepeatTimesand Time Zones
描述了會(huì)話的開始時(shí)間和結(jié)束時(shí)間。這個(gè)可以有行,指定多個(gè)不規(guī)則時(shí)間段,如果是規(guī)則的時(shí)間段,則r=
屬性可以使用。
t=<start time> <stop time>
-
<start time>
和<stop time>
為NTP時(shí)間,單位是秒。 - 假如
<stop time>
為零表示過了<start time>
時(shí)間后會(huì)話一直持續(xù)。 - 當(dāng)
<start time>
和<stoptime>
均為零時(shí)表示持久會(huì)話。
2.1.7 Repeat(可選)
重復(fù)次數(shù)
r=<repeat-interval> <active duration> <offsets from start-time>
在時(shí)間表示里面可以如下表示:
- d - days (86400 seconds)
- h - hours (3600 seconds)
- m - minutes (60 seconds)
- s - seconds (allowed for completeness)
2.1.8 Media Announcements (必選)
一個(gè)會(huì)話描述包括幾個(gè)媒體描述。一個(gè)媒體描述以”m=”開始到下一個(gè)”m=”結(jié)束。
m=<media> <port> <transport> <fmt list>
-
<media>
表示媒體類型。有"audio", “video”,“application”(例白板信息), “data”(不向用戶顯示的數(shù)據(jù)) 和"control"(描述額外的控制通道)。 -
<port>
媒體流發(fā)往傳輸層的端口。取決于c=行規(guī)定的網(wǎng)絡(luò)類型和接下來(lái)的傳輸層協(xié)議:- 對(duì)UDP為1024-65535;
- 對(duì)于RTP為偶數(shù)。
當(dāng)分層編碼流被發(fā)送到一個(gè)單播地址時(shí),需要列出多個(gè)端口。方式如下:m=<media> <port>/<number of ports> <transport> <fmt list>
對(duì)于RTP,偶數(shù)端口被用來(lái)傳輸數(shù)據(jù),奇數(shù)端口用來(lái)傳輸RTCP包。例:m=video49170/2 RTP/AVP 31
端口49170和49171為第一對(duì)RTP/RTCP端口,49172和49173為第二對(duì)的端口。傳輸協(xié)議是RTP/AVP,媒體格式為31(媒體格式是rtp頭中payload參數(shù)對(duì)應(yīng)的)。
-
<transport>
傳輸協(xié)議,與c=行的地址類型有關(guān)。兩種:- RTP/AVP,表示RealtimeTransport Protocol using the Audio/Video profile carried over UDP;
- UDP
-
<fmt list>
媒體格式。對(duì)于音頻和視頻就是在RTP Audio/Video Profile定義的負(fù)載類型(payload type)。但第一個(gè)為缺省值。分為靜態(tài)綁定和動(dòng)態(tài)綁定:
- 靜態(tài)綁定即媒體編碼方式與RTP流中的PayloadType(載荷類型)一一對(duì)應(yīng)。
- 動(dòng)態(tài)綁定即媒體編碼方式(如時(shí)鐘頻率,音頻信道數(shù)等)沒有完全確定,動(dòng)態(tài)編碼都大于95,并且需要在后面使用“a=rtpmap”進(jìn)行說(shuō)明。
靜態(tài)綁定的例子:
u_law的PCM編碼單信道Audio,采樣率8KHZ。在RTPAudio/Video profile中對(duì)應(yīng)的payload type為0。即: `m=audio 49232 RTP/AVP 0
動(dòng)態(tài)綁定的例子:
16位線形編碼,采樣率為16KHZ,假如我們希望動(dòng)態(tài)RTP/AVP 類型98表示此此流,寫法如下:m=video49232 RTP/AVP 98 a=rtpmap:98 L16/16000/2
有關(guān)RTP載荷類型,請(qǐng)參考:RTP有效負(fù)載(載荷)類型,RTP Payload Type
2.1.9 (可選)
屬性,它用于描述上面的音頻的屬性。
a=<attribute>
a=<attribute>:<value>
2.1.9.1 會(huì)話級(jí)屬性
一般在t之后
-
a=cat:<類別>
給出點(diǎn)分層次式會(huì)話分類號(hào),供接收方篩選會(huì)話 -
a=keywds:<關(guān)鍵詞>
供接收方篩選會(huì)話 -
a=tool:<工具名和版本號(hào)>
創(chuàng)建會(huì)話描述的工具名和版本號(hào) -
a=recvonly/sendrecv/sendonly
收發(fā)模式 -
a=type:<會(huì)議類型>
有:廣播,聚會(huì),主席主持,測(cè)試,H.323 -
a=charset:<字符集>
顯示會(huì)話名和信息數(shù)據(jù)的字符集 -
a=sdplang:<語(yǔ)言標(biāo)記>
描述所有語(yǔ)言 -
a=lang:<語(yǔ)言標(biāo)記>
會(huì)話描述的缺省語(yǔ)言或媒體描述的語(yǔ)言 -
a=framerate:<幀速率>
1s播放幾個(gè)rtp包,導(dǎo)數(shù)為一個(gè)rtp包承載的數(shù)據(jù)播放的時(shí)間單位s。單位:幀/秒
音頻的話 a=framerate:50 1byte8000hz20ms=160B,則每個(gè)rtp包的音頻數(shù)據(jù)量為160B 時(shí)間戳增值為160 -
a=quality:<質(zhì)量>
視頻的建議質(zhì)量(10/5/0)
2.1.9.2 媒體級(jí)屬性
一般在m之后
-
a=ptime:<分組時(shí)間>
媒體分組的時(shí)長(zhǎng)(單位:秒) -
a=recvonly/sendrecv/sendonly
收發(fā)模式 -
a=orient:<白板方向>
指明白板在屏莫上的方向 -
a=sdplang:<語(yǔ)言標(biāo)記>
描述所有語(yǔ)言 -
a=lang:<語(yǔ)言標(biāo)記>
會(huì)話描述的缺省語(yǔ)言或媒體描述的語(yǔ)言
2.1.9.2.1 rtpmap
rtpmap是rtp與map的結(jié)合, 即RTP參數(shù)映射表。對(duì)于音頻流,<編碼參數(shù)>說(shuō)明了音頻的通道數(shù)。通道數(shù)默認(rèn)缺省值為1。對(duì)于視頻流,現(xiàn)階段沒有<編碼參數(shù)>。
a=rtpmap:<payload type> <encoding name>/<clock rate>[/<encodingparameters>]
a=rtpmap:<負(fù)載類型> <編碼名>/<時(shí)鐘速率>[/<編碼參數(shù)>]
- : 負(fù)載類型, 對(duì)應(yīng)RTP包中的音視頻數(shù)據(jù)負(fù)載類型.
- : 編碼器名稱, 如VP8, VP9, OPUS.
- : 采樣率.
- : 編碼參數(shù), 如音頻是否是雙聲道, 通道數(shù)默認(rèn)缺省值為1(單聲道)。
示例:
m=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中,實(shí)驗(yàn)性的編碼方案也可以用。其格式名前一定為”X-”例:一種新的實(shí)驗(yàn)性的被稱為GSMLPC的音頻流,使用的動(dòng)態(tài)負(fù)載類型為99。
m=video 49232 RTP/AVP 99
a=rtpmap:99 X-GSMLPC/8000
*rtpmap 還可以有幾種值:recvonly
,sendrecv
,sendonly
,inactive
這些值表示媒體流的雙向保持設(shè)定(雙向保持,即A 保持 B, B保持A)。
A 保持 B: A發(fā)送sendonly B 回復(fù) recvonly
B 保持 A:B發(fā)送inactive A無(wú)消息 (sendonly也可)
A 解除保持:A發(fā)送sendrecv, B無(wú)消息
B解除保持: B發(fā)送sendrecv, A回復(fù)sendrecv
A B可繼續(xù)通話。
如果請(qǐng)求某媒體流的方向?yàn)閟endonly,那么響應(yīng)中對(duì)應(yīng)媒體的方向必須為recvonly;
如果請(qǐng)求某媒體流的方向?yàn)閞ecvonly,那么響應(yīng)中對(duì)應(yīng)媒體的方向必須為sendonly;
如果請(qǐng)求某媒體流的方向?yàn)閟endrecv,那么響應(yīng)中對(duì)應(yīng)媒體的方向可以為sendrecv/sendonly/recvonly/inactive中的一種;
如果請(qǐng)求某媒體流的方向?yàn)閕nactive,那么響應(yīng)中對(duì)應(yīng)媒體的方向必須為inactive;
2.1.9.2.2 fmtp
定義指定格式的附加參數(shù)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-404132.html
a=fmtp:<payload type> <format specific parameters>
- , 負(fù)載類型
- 指具體參數(shù).
3 舉例
3.1 示例1
v=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代表了協(xié)議版本,例子中為0。
- 第2行o代表所有者/創(chuàng)建者和會(huì)話標(biāo)識(shí)符。
- 第3行s代表會(huì)話名稱,例子中為Test MPEG Video session,用戶可以自己填寫。
- 第4行t代表會(huì)話活動(dòng)時(shí)間。
- 第5行和第6行a代表會(huì)話屬性行,可寫0個(gè)或多個(gè)。
- 第7行m代表代表媒體信息;video代表是視頻流;1234代表UDP端口號(hào)是1234;RTP/AVP指媒體傳輸協(xié)議使用RTP/AVP;32代表媒體格式使用MPV并且使用90KHz的時(shí)鐘。
- 關(guān)于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文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-404132.html
- 第8行c代表連接信息。
當(dāng)然了還可以加上更多的信息描述,例如b=AS:104857,b代表了帶寬信息。
3.2 示例2
v=0
//sdp版本號(hào),一直為0,rfc4566規(guī)定
o=- 7017624586836067756 2 IN IP4 127.0.0.1
// o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
//username如何沒有使用-代替,7017624586836067756是整個(gè)會(huì)話的編號(hào),2代表會(huì)話版本,如果在會(huì)話
//過程中有改變編碼之類的操作,重新生成sdp時(shí),sess-id不變,sess-version加1
s=-
//會(huì)話名,沒有的話使用-代替
t=0 0
//兩個(gè)值分別是會(huì)話的起始時(shí)間和結(jié)束時(shí)間,這里都是0代表沒有限制
a=group:BUNDLE audio video data
//需要共用一個(gè)傳輸通道傳輸?shù)拿襟w,如果沒有這一行,音視頻,數(shù)據(jù)就會(huì)分別單獨(dú)用一個(gè)udp端口來(lái)發(fā)送
a=msid-semantic: WMS h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C
//WMS是WebRTC Media Stream簡(jiǎn)稱,這一行定義了本客戶端支持同時(shí)傳輸多個(gè)流,一個(gè)流可以包括多個(gè)track,
//一般定義了這個(gè),后面a=ssrc這一行就會(huì)有msid,mslabel等屬性
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126
//m=audio說(shuō)明本會(huì)話包含音頻,9代表音頻使用端口9來(lái)傳輸,但是在webrtc中一現(xiàn)在一般不使用,如果設(shè)置為0,代表不
//傳輸音頻,UDP/TLS/RTP/SAVPF是表示用戶來(lái)傳輸音頻支持的協(xié)議,udp,tls,rtp代表使用udp來(lái)傳輸rtp包,并使用tls加密
//SAVPF代表使用srtcp的反饋機(jī)制來(lái)控制通信過程,后臺(tái)111 103 104 9 0 8 106 105 13 126表示本會(huì)話音頻支持的編碼,后臺(tái)幾行會(huì)有詳細(xì)補(bǔ)充說(shuō)明
c=IN IP4 0.0.0.0
//這一行表示你要用來(lái)接收或者發(fā)送音頻使用的IP地址,webrtc使用ice傳輸,不使用這個(gè)地址
a=rtcp:9 IN IP4 0.0.0.0
//用來(lái)傳輸rtcp地地址和端口,webrtc中不使用
a=ice-ufrag:khLS
a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ
//以上兩行是ice協(xié)商過程中的安全驗(yàn)證信息
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協(xié)商過程中需要的認(rèn)證信息
a=setup:actpass
//以上這行代表本客戶端在dtls協(xié)商過程中,可以做客戶端也可以做服務(wù)端,參考rfc4145 rfc4572
a=mid:audio
//在前面BUNDLE這一行中用到的媒體標(biāo)識(shí)
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
//上一行指出我要在rtp頭部中加入音量信息,參考 rfc6464
a=sendrecv
//上一行指出我是雙向通信,另外幾種類型是recvonly,sendonly,inactive
a=rtcp-mux
//上一行指出rtp,rtcp包使用同一個(gè)端口來(lái)傳輸
//下面幾行都是對(duì)m=audio這一行的媒體編碼補(bǔ)充說(shuō)明,指出了編碼采用的編號(hào),采樣率,聲道等
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
//以上這行說(shuō)明opus編碼支持使用rtcp來(lái)控制擁塞,參考https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=fmtp:111 minptime=10;useinbandfec=1
//對(duì)opus編碼可選的補(bǔ)充說(shuō)明,minptime代表最小打包時(shí)長(zhǎng)是10ms,useinbandfec=1代表使用opus編碼內(nèi)置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用來(lái)標(biāo)識(shí)一個(gè)數(shù)據(jù)源,ssrc當(dāng)發(fā)生沖突時(shí)可能會(huì)發(fā)生變化,但是cname不會(huì)發(fā)生變化,也會(huì)出現(xiàn)在rtcp包中SDEC中,
//用于音視頻同步
a=ssrc:18509423 msid:h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C 15598a91-caf9-4fff-a28f-3082310b2b7a
//以上這一行定義了ssrc和WebRTC中的MediaStream,AudioTrack之間的關(guān)系,msid后面第一個(gè)屬性是stream-d,第二個(gè)是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簡(jiǎn)稱,意思是支持使用rtcp反饋機(jī)制來(lái)實(shí)現(xiàn)編碼控制,fir是Full Intra Request
//簡(jiǎn)稱,意思是接收方通知發(fā)送方發(fā)送幅完全幀過來(lái)
a=rtcp-fb:100 nack
//支持丟包重傳,參考rfc4585
a=rtcp-fb:100 nack pli
//支持關(guān)鍵幀丟包重傳,參考rfc4585
a=rtcp-fb:100 goog-remb
//支持使用rtcp包來(lái)控制發(fā)送方的碼流
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編碼可選的附加說(shuō)明
a=rtpmap:116 red/90000
//fec冗余編碼,一般如果sdp中有這一行的話,rtp頭部負(fù)載類型就是116,否則就是各編碼原生負(fù)責(zé)類型
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是不同的,上一行中前一個(gè)是正常rtp包的ssrc,后一個(gè)是重傳包的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協(xié)議
- SDP協(xié)議詳細(xì)介紹
- 音視頻學(xué)習(xí)筆記-SDP
- 幾種音頻的sdp
- sdp文件詳細(xì)總結(jié)
- SDP協(xié)議介紹
到了這里,關(guān)于SIP協(xié)議-05 SDP協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!