概念
SDP(Session Description Protocol)會話描述協定是為了描述多媒體會話而設計的,主要用來描述會話通告、會話邀請或者其他形式的多媒體會話初始化。
- 當初始化多媒體會議、VoIP電話、視訊流或者其他會話的時候,需要對參與者提供媒體資訊、傳輸位址以及其他與會話相關的描述性的中繼資料。
- SDP為描述這些資訊提供了一個标準的形式,并且與這些資訊是以什麼方式傳送的無關。SDP隻是一個單純的會話描述的格式,并不包含傳輸協定。在不同的場合,可以應用于不同的傳輸協定,如SAP、SIP、RTP和HTTP等。
- SDP被設計成通用的,是以它可以廣泛用于有關網絡的各種應用。然而,它并不能用于協商會話内容或值媒體編碼,這超出SDP的功能範圍。
協定格式
一個SDP會話描述是通過"application/sdp"來辨別的。
一個SDP會話描述包含若幹行如下形式的文本:
(type)=(value)
其中(type)是一個區分大小寫的字母的形式,(value)是一個結構化的文本,其形式取決于(type)。通常,(value)由若幹個分隔符隔開的字段組成,或者是一個字元串。其中"="兩邊都不能有空格。
一個SDP包含一個會話層部分,後續跟着0個或多個媒體層部分。會話層啟始于"v="行,直到第一個媒體層部分。每個媒體層起始于"m="行,直到下一個媒體層的開始或者直到SDP結束。通常,會話層的屬性是全局的,除非被媒體層重寫。
某些行是必選的,某些是可選的,但是出現的順序必須如下所示。可選用"*"标志。
會話描述
v=(協定版本)
o=(發起者和會話辨別符)
s=(會話名稱)
i=* (會話資訊)
u=* (URI 描述)
e=* (Email 位址)
p=* (電話号碼)
c=* (連接配接資訊,隻有在所有的媒體層都有這個字段的時候,會話層屬性才可以沒有)
b=* (0個或者多個帶寬資訊)
z=* (時域調整)
k=* (加密密鑰)
a=* (0 個或多個會話屬性)
時間描述
t=(會話有效時間)
r=* (0或多次重複時間)
媒體描述,如果存在的情況下
m=(媒體名稱和傳輸位址)
i=* (媒體标題)
c=* (連接配接資訊,如果在會話層中出現,則這裡可以不出現)
b=* (帶寬資訊)
k=* (加密密鑰)
a=* (0 個或多個媒體屬性)
會話層的連接配接資訊"c="和附加屬性"a="都是全局的,除非在媒體層被重寫
格式詳解
協定版本"v="
v=0
字段給出了SDP版本,目前規範的版本是0,這個版本沒有小版本号
源"o="

會話名字"s="
*連接配接資料"c="
*帶寬"b="
時間資訊"t="
t=(起始時間)(結束時間)
時間格式采用NTP格式,
如果結束時間是0,則表示會話時長是不受限制的
如果起始時間是0,則表示會話是永恒的
*附加屬性"a="
媒體描述"m="
參考https://max.book118.com/html/2017/1201/142356242.shtm中
5 SDP規範
和
6 SDP屬性
SIP中應用
實際抓包分析:(在收到INVITE後,回複200OK攜帶的SDP封包)
Session Initiation Protocol (200)
Status-Line: SIP/2.0 200 OK
Message Header
Call-ID: THsmVLXC1v[email protected]192.168.5.5
Supported: 100rel,timer,replaces,in-band-dtmf
Via: SIP/2.0/UDP 192.168.5.5:5065;received=192.168.5.5;branch=z9hG4bK-60d289a5-3669ad3c-4040158d
Contact: <sip:[email protected]:8579;transport=UDP;user=phone>
Session-Expires: 1800;refresher=uas
From: "87654321"<sip:[email protected];user=phone>;tag=9a7f070-0-13c9-60d289a5-42ebae47-60d289a5
To: <sip:[email protected]:5065;user=phone>;tag=4c897ba5
CSeq: 1 INVITE
Content-Type: application/sdp
Content-Length: 1338
Message Body
Session Description Protocol
Session Description Protocol Version (v): 0 //sdp版本号,一直為0,rfc4566規定
Owner/Creator, Session Id (o): sipua 1718212350 1718212350 IN IP4 192.168.2.23
// o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
Session Name (s): IADCall //會話名,沒有的話使用-代替
Connection Information (c): IN IP4 192.168.2.23
//這一行表示你要用來接收或者發送媒體使用的IP位址,若使用ice傳輸,不使用這個位址
Time Description, active time (t): 0 0 //兩個值分别是會話的起始時間和結束時間,這裡都是0代表沒有限制
Media Description, name and address (m): audio 10006 RTP/AVP 9 8 97 101
//m=audio說明本會話包含音頻,10006代表音頻使用端口9來傳輸,如果設定為0,代表不傳輸音頻;
//RTP/AVP是表示使用者來傳輸音頻支援的協定,應用場景為視訊/音頻的 RTP 協定。
//參考 [RFC 3551](https://tools.ietf.org/html/rfc3551);
//9 8 97 101表示本會話音頻支援的編碼,後面幾行會有詳細補充說明
Bandwidth Information (b): AS:64
//b=<modifier>:<bandwidth-value> 帶寬數值機關為 kbps 。
//參考 [RFC 3556](https://tools.ietf.org/html/rfc3556)
Media Attribute (a): rtpmap:9 G722/8000 //下面幾行都是對m=audio這一行的媒體編碼補充說明,指出了編碼采用的編号,采樣率,聲道等
Media Attribute (a): rtpmap:8 PCMA/8000
Media Attribute (a): rtpmap:97 iLBC/8000
Media Attribute (a): rtpmap:101 telephone-event/8000
Media Attribute (a): fmtp:101 0-15 //對telephone-event編碼可選的補充說明
Media Attribute (a): sendrecv //指出我是雙向通信,另外幾種類型是recvonly,sendonly,inactive
Media Description, name and address (m): video 10008 RTP/AVP 104 //參考上面m=audio,含義類似
Bandwidth Information (b): AS:3072
Media Attribute (a): rtpmap:104 H264/90000
Media Attribute (a): fmtp:104 profile-level-id=42e01f;max-br=2048;max-mbps=108000;max-fs=3600;packetization-mode=1
//對H264編碼可選的補充說明,profile-level-id配置h264配置檔案和級别;
//max-br表示最大比特率;max-mbps表示每秒鐘能處理的最大宏塊數量;
//max-fs表示接收端能夠解碼的一幀圖像的最大尺寸;
//packetization-mode表示圖像資料包分拆發送的方式
Media Attribute (a): rtcp-fb:* ccm fir
//ccm是codec control using RTCP feedback message簡稱,意思是支援使用rtcp回報機制來實作編碼控制,
//fir是Full Intra Request簡稱,意思是接收方通知發送方發送幅完全幀過來
Media Attribute (a): rtcp-fb:* nack //支援丢包重傳,參考rfc4585
Media Attribute (a): rtcp-fb:* ccm tmmbr
Media Attribute (a): extmap:1 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
Media Attribute (a): extmap:2 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
Media Attribute (a): ssrc:2374194282 cname:MQ4GU3I3cSdHgzQ
Media Attribute (a): ssrc:2374194282 msid:3ftdiFFSCR+5FRWFZfZn4Fi8s8q7616_main 2EXqEBRAn7g3Smi18og2CL0PCjf5n9U
Media Attribute (a): ssrc:2374194282 mslabel:3ftdiFFSCR+5FRWFZfZn4Fi8s8q7616
Media Attribute (a): ssrc:2374194282 label:2EXqEBRAn7g3Smi18og2CL0PCjf5n9U
Media Attribute (a): sendrecv
Media Attribute (a): content:main
Media Attribute (a): label:11
Media Description, name and address (m): video 10010 RTP/AVP 104 //參考上面m=audio,含義類似
Bandwidth Information (b): AS:3072
Media Attribute (a): rtpmap:104 H264/90000
Media Attribute (a): fmtp:104 profile-level-id=42e01f;max-br=2048;max-mbps=108000;max-fs=3600;packetization-mode=1
Media Attribute (a): rtcp-fb:* ccm fir
Media Attribute (a): rtcp-fb:* nack
Media Attribute (a): rtcp-fb:* ccm tmmbr
Media Attribute (a): sendrecv
Media Attribute (a): content:slides
Media Attribute (a): label:12
Media Description, name and address (m): application 49592 UDP/BFCP *
Media Attribute (a): confid:101
Media Attribute (a): userid:4
Media Attribute (a): floorid:2 mstrm:12
Media Attribute (a): floorctrl:c-s
Media Attribute (a): setup:actpass
Media Attribute (a): connection:new