SDP協議介紹

Just4life發表於2014-02-23
SDP:Session Description Protocol

SDP格式:
     Session description
         v=  (protocol version)
         o=  (owner/creator and session identifier)
         s=  (session name)
         i=* (session information)
         u=* (URI of description)
         e=* (email address)
         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)
         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)

     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)

以上帶"*"號的是可選的,其餘的是必須的。一般順序也按照上面的順序來排列。


a=*是sdp協議擴充套件屬性定義,除上面以外的,分解時其它的都可以扔掉。
a=charset屬性指定協議使用的字符集。一般的是ISO-10646。


示例:
v=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
   其中:nettype是IN,代表internet,addrtype是IP4或IP6。unicast-address任務建立計算機的地址。
   整個這個屬性,是唯一表示一個任務。


e=123@126.com 或 p=+1 616 555-6011
對於一個任務只能兩者之中的一個,表示會議控制者的聯絡方式。郵件地址可以是[email]j.doe@example.com[/email] (Jane Doe)形式,括號裡面的是描述聯絡人的名稱,或者Jane Doe <[email]j.doe@example.com[/email]>,前面的是聯絡人的名稱。


c=<nettype> <addrtype> <connection-address>
這個連線資料,可以是傳話級別的連線資料,或者是單獨一個媒體資料的連線資料。在是多播時,connection-address就該是一個多播組地址,當是單播時,connection-address就該是一個單播地址。對於addrtype是IP4的情況下,connection-address不僅包含IP地址,並且還要包含a time to live value(TTL 0-255),如:c=IN IP4 224.2.36.42/128,IP6沒有這個TTL值。還允許象這樣的<base multicast address>[/<ttl>]/<number of addresses>格式的connection-address。如:c=IN IP4 224.2.1.1/127/3等同於包含c=IN IP4 224.2.1.1/127, c=IN IP4 224.2.1.2/127, c=IN IP4 224.2.1.3/127三行內容。


b=<bwtype>:<bandwidth> bwtype可以是CT或AS,CT方式是設定整個會議的頻寬,AS是設定單個會話的頻寬。預設頻寬是千位元每秒。
t=<start-time> <stop-time>,這個可以有行,指定多個不規則時間段,如果是規則的時間段,則r=屬性可以使用。start-time和stop- time都遵從NTP(Network Time Protocol),是以秒為單位,自從1900以來的時間。要轉換為UNIX時間,減去2208988800。如果stop-time設定為0,則會話沒有時間限制。如果start-time也設定為0,則會話被認為是永久的。


r=<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)
z=<adjustment time> <offset> <adjustment time> <offset> ....
k=<method>
k=<method>:<encryption key>
a=<attribute>
a=<attribute>:<value>
m=<media> <port> <proto> <fmt> ...
m=<media> <port>/<number of ports> <proto> <fmt> ...
其中:<media>可以是,"audio","video", "text", "application" and "message"。<port>是媒體傳送的埠號,它依賴於c=和<proto>。<proto> 可以是,udp,RTP/AVP和RTP/SAVP。


a=cat:<category>分類,根據分類接收者隔離相應的會話
a=keywds:<keywords>關鍵字,根據關鍵字隔離相應的會話
a=tool:<name and version of tool>建立任務描述的工具的名稱及版本號
a=ptime:<packet time>在一個包裡面的以毫秒為單位的媒體長度
a=maxptime:<maximum packet time>以毫秒為單位,能夠壓縮排一個包的媒體量。
a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encoding   parameters>]
a=recvonly
a=sendrecv
a=sendonly
a=inactive,
a=orient:<orientation>其可能的值,"portrait", "landscape" and "seascape" 。
a=type:<conference type>,建議值是,"broadcast", "meeting", "moderated", "test" and "H332"。
a=charset:<character set>
a=sdplang:<language tag>指定會話或者是媒體級別使用的語言
a=framerate:<frame rate>設定最大視訊幀速率
a=quality:<quality>值是0-10
a=fmtp:<format> <format specific parameters>

在SIP協議的包含的內容是SDP時,應該把Content-Type設定成application/sdp。




國標中的SDP描述:


SDP定義

聯網系統中SIP訊息體中攜帶的SDP內容應符合IETF RFC 2327的相關要求。應有如下欄位:
Session description:
v一(protocol version)
o一(owner/creator and session identifier).
s一(session na rile)
u一*(URI of description)
c一*(connection information not required if included in all media)
Time description:
t一(time the session is active)
Media description
m一(media name and transport address)
c一*(connection information optional if included at session—level)
b一*rbandwidth information)
a一*f zero or more media attribute lines)
y一*(SSRC)
f_*(媒體描述)


說明:
a欄位:啟用IETF RFC 4566中對a欄位的定義【a—rtpmap:<payload type)<encoding name)/
(clock rate)E/(encoding parameters)] 中的(encoding name),利用該屬性攜帶編碼器廠商名稱(如:
大華或海康編碼名稱DAHUA或HIKVlSlON)。該屬性表明該流為某廠商編碼器編碼且是不符合本
標準規定的媒體流,符合本標準規定的媒體流無需該屬性。
例如:a—rtpmap:96 DAHUA/90000;
a—rtpmap:96 H1KVISION/90000。
s欄位:使用s欄位標識請求媒體流的操作型別。“Play”代表實時點播;“Playback”代表歷史回放;
“Download”代表檔案下載。
u欄位:u行應填寫視音訊檔案的URI。該URl取值有兩種方式:簡捷方式和普通方式。簡捷方式
直接採用產生該歷史媒體的媒體源(如某個攝像頭)的裝置ID(應符合6、1.2的規定)以及相關引數,參
數用“:”分隔;普通方式採用http://儲存裝置ID[/資料夾]*/檔名,[/資料夾]*為o~N級資料夾。
t欄位:當回放或下載時,t行值為開始時問和結束時間,用⋯’分隔,時間格式見IETF RFC 4566
的5.9,開始時問和結束時間均為要回放或下載的音視訊檔案錄製時間段中的某個時刻。
Y欄位:為十進位制整數字符串,表示SSRC值。格式如下:Dddddddddd(第一位為歷史或實時媒體
流的標識位,1為歷史,0為實時)。
f欄位:f--v/編碼格式/解析度/幀率/位元速率型別/位元速率大小a/編碼格式/位元速率大小/取樣率
各項具體含義:
——v:後續引數為視訊的引數;各引數問以“/”分割;

——編碼格式(十進位制整數字符串表示):
1:MPEG~4;2:H.264;3:SVAC;4:3GP。
—解析度(十進位制整數字符串表示):
1:QCIF;2:CIF;3:4CIF;4:D1;5:720P;6:1080P/1。
——幀率(十進位制整數字符串表示):o~99
——位元速率型別(十進位制整數字符串表示):
1:固定位元速率(CBR);2:可變位元速率(VBR)。
一~位元速率大小(十進位制整數字符串表示):o~100000(如1表示1 kbps)
——a:後續引數為音訊的引數t各引數間以⋯/’分割;
——編碼格式(十進位制整數字符串表示):
l:G.711;2:G.723.1;3:G.729;4:G.722.1。
一位元速率大小(十進位制整數字符串):
音訊編碼位元速率:1:5.3 kbps(G.723.1中使用);
2:6.3 kbps(G.723.1中使用);
3:8 kbps(G.729中使用);
4:1 6 kbps(G.722.1中使用);
5:24 kbps(G.722.1中使用);
6:32 kbps(G.722.1中使用);
7:48 kbps(G.722.1中使用);
8:64 kbps(G.71l中使用)。
~取樣率(十進位制整數字符串表示):
1:8 kHz(G.71l、G.723.1或G.729中使用);
2:14 kHz(G.722.1中使用);
3:16 kHz(G.722.1中使用);
4:32 kHz(G.722.1中使用)。
注1:字串說明
本節中使用的“十進位制整數字符串”的含義為⋯o’~“4294967296”之間的十進位制數字字串。
注2:引數分割標識
各引數間以“/”分割,引數間的分割符“/”不能省略;若兩個分割符⋯/’間的某引數為空時(即兩個分割符“/”
直接將相連時)表示無該引數值;
注3:f欄位說明
使用f欄位時,應保證視訊和音訊引數的結構完整性,即在任何時候,f欄位的結構都應是完整的結構:
kv/編碼格式/解析度/幀率/位元速率型別/位元速率大小a/編碼格式/位元速率大4'/取樣率
若只有視訊時,音訊中的各引數項可以不填寫,但應保持“a///”的結構:
f—v/編碼格式/解析度/幀率/位元速率型別/位元速率大小a///
若只有音訊時也類似處理,視訊中的各引數項可以不填寫,但應保持“v/////”的結構:
{一v/////a/編碼格式/位元速率大d"/取樣率
f欄位中視、音訊引數段之間不需空格分割。
注4:SSRC的使用
SIP伺服器產生SSRC值,並在發往視訊輸出(解碼器)的Invite中攜帶這個值.視訊輸出(解碼器)返回的200
OK中帶回該值。

相關文章