SDP協議簡述


SDP協議也是文本協議,只需要按照協議本身的格式填充。SDP協議格式即詳細信息如下:

會話描述  

格式及舉例

v=(protocol version)

v=0

o=(owner/creator and session identifier)

o=用戶名 會話id版本網絡類型地址類型地址

o=hua 253183  51827  IN  IP4 192.168.2.2

s=(session name)

會話名

i=*(session information)

會話信息

e=*(email address)

e=zte@isi.edu(generaltext或e=Mr.Wang

p=*(phone number)

p=+86-0755-26773000-7110(wang)

orp=+16172536011

c=*(connection information-如已經包含在所有媒體中則該行不需要)

c=網絡類型地址信息多點會議包括TTL連接地址
c=IN IP4 192.168.2.2

c=IN IP4 192.168.2.23

b=*(bandwidthinformation)

b=修改量(CTConferenceTotal

IASApplication-specificMax):帶寬值(kb/s)

b=CT:120

一個或更多時間描述

z=*(time zone adjustments)

時區調整

k=*(encryption key)

k=方法:密鑰或k=方法

時間描述

t=(timethesessionisactive)

開始時間、結束時間,單位秒,十進制NTP

t=2873397468   2873404969

r=*(zero or more repeat times)

重復時間、活動持續時間以開始時刻為參考的偏移列表,單位秒

媒體描述

m=(media name and transportaddress)

m=媒體端口、傳送格式列表

m=audio 49170 RTP/AVP 0 3

協議為RTP

i=*(mediatitle)

媒體稱呼

c=*(connectioninformation)

如已經包含在會話級描述則為可選

b=*(bandwidthinformation

同c

k=*(encryptionkey)

會話級為摸認值,同c

a=*(zero or more session attributelines)

a=屬性或a=屬性:值

a=sendrecv

a=ptime:20

a=rtpmap:0 PCMU/8000

 

說明:
1. v,o,s,t,m為必須的,其他項為可選;
2. 如果SDP語法分析器不能識別某一類型(Type),則整個描述丟失;
3. 如果“a=”的某屬性值不理解,則予以丟失;
4. 整個協議區分大小寫;
5. “=”兩側不允許有空格;
6. 會話級的描述就是媒體級描述的缺省值;
7. 所有格式均為=。

SDP各type的詳細解釋:

會話描述: 

1. 協議版本:v=SDP版本 目前為0,沒有子版本。

2. 會話源:  

       <用戶名>     用戶在發起主機上登錄名,如果主機不支持用戶標識的概念,則為”-”。

       <會話id>      一般為數字串,其分配由創建工具決定,建議用網絡時間協議(NTP)時戳,以確保唯一性。

       <版本>         該會話公告的版本,供公告代理服務器檢測同一會話的若干個公告哪個是最新公告.基本要求是會話數據修改后該版本值遞增,建議用NTP時戳

       <網絡類型>  為文本串”IN”。
       <地址類型> “IP4”(可為域名或點分十進制)/”IP6”(域名或壓縮文本地址形式)

       <地址>          按照上述的IP4或者IP6格式寫出

3. 會話: s=CounterPath eyeBeam 1.5字符表示的會話名

4. Email地址:e=給出會議負責人的聯系信息。他不一定是創建會議公告的人。電話號碼p=給出會議負責人的信息,他不一定是創建會議公告的人

6. 連接數據:c=媒體連接數據,會話級為媒體級的默認值

7. 帶寬:b=給出會話或媒體所用帶寬,單位為kbit/s.修飾語:CT(會議總帶寬,表示所有地點所有媒體的總帶寬),AS(應用特定最大帶寬,表示一個地點單一媒體帶寬)時間描     述: 

8. 加密密鑰:k=已定義的方法有k=clear:<加密密鑰>密鑰沒有變換 k=base64:<編碼密鑰>已編碼,因為它含有SDP禁用, k=uri:<獲得密鑰的URI>k=prompt。SDP沒有提供密   鑰但該會話或媒體流是要求加密的。

9.屬性:a=一個m=行可有多個a=行,SDP建議擴展如下:

     會話級:

            a=cat:<類別>//給出點分層次式會話分類號,供接收方篩選會話

            a=keywds:<關鍵詞>//供接收方篩選會話

            a=tool:<工具名和版本號>//創建會話描述的工具名和版本號

            a=type:<會議類型>//有:廣播,聚會,主席主持,測試,H.323

            a=charset:<字符集>//顯示會話名和信息數據的字符集

            a=sdplang:<語言標記>//描述所有語言

            a=lang:<語言標記>//會話描述的缺省語言或媒體描述的語言

            a=framerate:<幀速率>//單位:幀/秒

            a=quality:<質量>//視頻的建議質量(10/5/0)

            a=fmtp:<格式><格式特定參數>//定義指定格式的附加參數

   媒體級:
          a=ptime:<分組時間>//媒體分組的時長(單位:秒)
          a=recvonly/sendrecv/sendonly//收發模式
          a=orient:<白板方向>//指明白板在屏莫上的方向
          a=sdplang:<語言標記>//描述所有語言
          a=lang:<語言標記>//會話描述的缺省語言或媒體描述的語言

10  m = <媒體>有5種類型:音頻/視頻/應用(如白板信息)/數據(不向用戶顯示的)/控制
              <端口>媒體流發往傳輸層的端口。取決於c=行規定的網絡類型和接下來的
              <傳送層協議>對UDP為1024-65535;對分層編碼應用c = 行沒有多播地址,要給    出多播端口數,如:m=video 49170/2 RTP/AVP31(表示:端口49170和49171為   第一對RTP/RTCP端口,49172和49173為第二對的端口)。

              <傳送層協議>與c=行的地址類型有關。對大多的媒體在RTP/UDP上傳送,定義2種:RTP/AVP:IETFRTP協議,音/視頻應用文檔。在UDP上傳送。Udp:UDP協議。

               <格式列表>:對音/視頻,就是音/視頻應用文檔中規定媒體凈荷類型。列表中都有可能用,但第一個為缺省值,分為靜態綁定和動態綁定:靜態綁定即使媒體編碼方式有 凈荷類型號完全確定,動態綁定則媒體編碼方式(如時鍾頻率,音頻信道數等)沒有完全確定,需要進一步的屬性說明。分別舉例如下:G711A的PCM編碼單信道Audio,其凈荷類型號為8,把它發往UDP端口49232,m=audio 49232 RTP/AVP8;16bit線性編碼,單聲道聲,采樣率速率8kHz,其動態凈荷類型號98,m=audio 49232 RTP/AVP 98;a=rtpmap:98 L16/16000/2

說明:
1. a=rtpmap:<凈荷類型號><編碼名>/<時鍾速率>[/<編碼參數>]對音頻,編碼參數為音頻信道數;對視頻沒有定義
2. SDP允許rtpmap規定實驗性編碼格式,但編碼名必須以X-起,表示此格式還沒正式登記。

SDP用於構建INVITE和200OK響應消息的消息體,供主\被叫用戶交換媒體信息。

 

a=rtpmap:96 MPEG4-GENERIC/32000/2 //rtpmap的信息,表示音頻為AAC的其sample為32000

a=fmtp:96 profile-level-id=15;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1210 //config為AAC的詳細格式信息

 

a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=4D6033;sprop-parameter-sets=J01gM41oCgPabIAAAAMAgAAADweKEVA=,KO4C0kg=

 

/* from http://www.iana.org/assignments/rtp-parameters last updated 05 January 2005 */
/* payload types >= 96 are dynamic;
* payload types between 72 and 76 are reserved for RTCP conflict avoidance;
* all the other payload types not present in the table are unassigned or
* reserved
*/
static const struct {
int pt;
const char enc_name[6];
enum AVMediaType codec_type;
enum AVCodecID codec_id;
int clock_rate;
int audio_channels;
} rtp_payload_types[] = {
{0, "PCMU", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW, 8000, 1},
{3, "GSM", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{4, "G723", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_G723_1, 8000, 1},
{5, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{6, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 16000, 1},
{7, "LPC", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{8, "PCMA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_ALAW, 8000, 1},
{9, "G722", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_ADPCM_G722, 8000, 1},
{10, "L16", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_S16BE, 44100, 2},
{11, "L16", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_S16BE, 44100, 1},
{12, "QCELP", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_QCELP, 8000, 1},
{13, "CN", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{14, "MPA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP2, -1, -1},
{14, "MPA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP3, -1, -1},
{15, "G728", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{16, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 11025, 1},
{17, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 22050, 1},
{18, "G729", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1},
{25, "CelB", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_NONE, 90000, -1},
{26, "JPEG", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MJPEG, 90000, -1},
{28, "nv", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_NONE, 90000, -1},
{31, "H261", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H261, 90000, -1},
{32, "MPV", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG1VIDEO, 90000, -1},
{32, "MPV", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG2VIDEO, 90000, -1},
{33, "MP2T", AVMEDIA_TYPE_DATA, AV_CODEC_ID_MPEG2TS, 90000, -1},
{34, "H263", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H263, 90000, -1},
{-1, "", AVMEDIA_TYPE_UNKNOWN, AV_CODEC_ID_NONE, -1, -1}
};

 

a=fmtp:<format> <format specific parameters>
   該屬性值指定一個SDP不了解的特殊格式,該格式是媒體的格式的一種。  
   定義指定格式的附加參數   

常見的如下:

a=rtpmap:103 ISAC/16000
a=rtpmap:102 iLBC/8000
a=rtpmap:3 GSM/8000
a=rtpmap:106 telephone-event/8000
a=rtpmap:13 CN/8000
a=rtpmap:117 red/8000
a=rtpmap:18 G729a/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:2 G726-32/8000
a=rtpmap:4 G723/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:96 G726-40/8000
a=rtpmap:97 G726-24/8000
a=rtpmap:98 G726-16/8000
a=rtpmap:100 NSE/8000
a=rtpmap:101 telephone-event/8000
a=rtpmap:0 pcmu/8000
a=rtpmap:8 pcma/8000
a=rtpmap:3 gsm/8000
a=rtpmap:18 G729/8000
a=rtpmap:98 iLBC/8000
a=rtpmap:97 speex/8000
a=rtpmap:101 telephone-event/8000

原文鏈接:http://blog.csdn.net/wh8_2011/article/details/46481055


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM