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.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
