音視頻學習筆記-SDP

音視頻學習筆記-SDP

? SDP 是會話描述協(xié)議, 它用文本描述各端的能力. 如各端多支持的音頻編解碼器是什么, 這些解碼器設定的參數(shù)是什么, 使用的傳輸協(xié)議是什么, 以及包括的音視頻媒體是什么等等.

在進行音視頻通話時, 首先要進行信令交互, 而交互的一個重要信息就是SDP的互換, 目的是為了讓對方知道彼此具有哪些能力, 然后根據(jù)雙方各自的能力進行協(xié)商, 協(xié)商出大家認可的音視頻編解碼器, 相關參數(shù), 傳輸協(xié)議等.

標準SDP規(guī)范

  • 描述格式

  • SDP結(jié)構(gòu)

    • 會話描述
    • 媒體描述
      • 媒體類型
      • 媒體格式
      • 傳輸協(xié)議
      • 傳輸?shù)腎P和端口

SDP格式

由多個<type>=<value>表達式組成. SDP由一個會話級描述和多個媒體級描述組成.

  • 會話級的作用是整個會話, 從v=行開始到第一個媒體描述為止.
  • 媒體級是單個的媒體流進行描述, 從m=行開始到下一個媒體描述為止.

另外, 除非媒體部分重新對會話級的值做定義, 否則會話級的值就是各個媒體的缺省默認值.

v=0
o=- 7017624586836067756 2 IN IP4 127.0.0.1
s=-
t=0 0

//下面 m= 開頭的兩行,是兩個媒體流:一個音頻,一個視頻。
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126
...
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116
...

SDP的結(jié)構(gòu)

  1. 會話描述結(jié)構(gòu)
    • v=(protocol version, require), 如v=0, 表示SDP的版本號.
    • o=(owner/creator and session identifier, require), 如o=<username> < session id> <version> <network type> <address type> <address>
      • o= 表示對會話發(fā)起者的描述.
      • <username>: 用戶名, 不關心用戶名時, 用"-"代替.
      • <session id>: 數(shù)字串, 在整個會話中, 必須唯一.
      • <version>: 版本號, 每次會話數(shù)據(jù)修改后, 還版本值會遞增.
      • <network type>: 網(wǎng)絡類型, 一般為"IN", 表示"internet".
      • < address type > : 地址類型, 一般為IP4.
      • < address >: IP地址.
    • s=<session name> require, 表示一個會話, 在整個SDP中有且僅有一個會話.
    • t=(time the session is active, require), 描述開始時間和結(jié)束時間.
  2. 媒體描述結(jié)構(gòu)
    • m=(media name and transport address, optional), 如m=<media> <port> <transport> <fmt list>, 表示一個會話. 在一個SDP中一般會有多個媒體描述, 每個媒體描述以"m="開始到下一個"m="結(jié)束.
      • <media>: 媒體類型, 如audio/video.
      • <port>: 端口.
      • <transport>: 傳輸協(xié)議, 如RTP/AVP, UDP.
      • <fmt list>: 媒體格式, 即負載類型(Payload Type)列表.
    • a=*(zero or more media attribute lines, optional), 如 a=<type> or a=<type>:<values>, 表示屬性, 用于進一步描述媒體信息.
    • rtpmap(optional), a=rtpmap:<payload type> <encoding name> <clock rate>
      • rtpmap是rtp與map的結(jié)合, 即RTP參數(shù)映射表.
      • <payload type>: 負載類型, 對應RTP包中的音視頻數(shù)據(jù)負載類型.
      • <encoding name>: 編碼器名稱, 如VP8, VP9, OPUS.
      • <sample rate>: 采樣率.
      • <encodingparameters>: 編碼參數(shù), 如音頻是否是雙聲道, 默認是單聲道.
    • fmtp, 如a=fmtp:<payload type> <format specific parameters>
      • fmtp, 格式參數(shù)
      • <payload type>, 負載類型
      • <format specific parameters> 指具體參數(shù).
v=0
o=- 4007659306182774937 2 IN IP4 127.0.0.1
s=-
t=0 0 
//以上表示會話描述
...
//下面的媒體描述,在媒體描述部分包括音頻和視頻兩路媒體
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
...
a=rtpmap:111 opus/48000/2 //對RTP數(shù)據(jù)的描述
a=fmtp:111 minptime=10;useinbandfec=1 //對格式參數(shù)的描述
...
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
...
//上面是音頻媒體描述漓帚,下面是視頻媒體描述
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116
...
a=rtpmap:96 VP8/90000
...

WebRTC中的SDP

WebRTC對標準SDP規(guī)范做了調(diào)整, 它將SDP按功能分成幾大塊:

  • Session Metadata 會話元數(shù)據(jù)
  • Network Description 網(wǎng)絡描述
  • Stream Description 流描述
  • Security Descriiption 安全描述
  • Qos Grouping Description 服務質(zhì)量描述
216e0bc9ccfcb5dd3593f11e8b857dfa
60ac066baf39e92f4d9a3627cfe007ce

//=============會話描述====================
v=0 
o=- 7017624586836067756 2 IN IP4 127.0.0.1
s=-
t=0 0
...

//================媒體描述=================
//================音頻媒體=================
/*
 * 音頻使用端口1024收發(fā)數(shù)據(jù)
 * UDP/TLS/RTP/SAVPF 表示使用 dtls/srtp 協(xié)議對數(shù)據(jù)加密傳輸
 * 111、103 ... 表示本會話音頻數(shù)據(jù)的 Payload Type
 */
 m=audio 1024 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 

//==============網(wǎng)絡描述==================
//指明接收或者發(fā)送音頻使用的IP地址医窿,由于WebRTC使用ICE傳輸仰担,這個被忽略玩郊。
c=IN IP4 0.0.0.0
//用來設置rtcp地址和端口肢执,WebRTC不使用
a=rtcp:9 IN IP4 0.0.0.0
...

//==============音頻安全描述================
//ICE協(xié)商過程中的安全驗證信息
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=rtpmap:111 opus/48000/2
//minptime代表最小打包時長是10ms,useinbandfec=1代表使用opus編碼內(nèi)置fec特性
a=fmtp:111 minptime=10;useinbandfec=1
...
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
...

//=================視頻媒體=================
m=video 9 UDP/TLS/RTP/SAVPF 100 101 107 116 117 96 97 99 98
...
//=================網(wǎng)絡描述=================
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=mid:video
...
a=rtpmap:100 VP8/90000
//================服務質(zhì)量描述===============
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack //支持丟包重傳译红,參考rfc4585
a=rtcp-fb:100 nack pli
a=rtcp-fb:100 goog-remb //支持使用rtcp包來控制發(fā)送方的碼流
a=rtcp-fb:100 transport-cc
...
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末预茄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子侦厚,更是在濱河造成了極大的恐慌耻陕,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刨沦,死亡現(xiàn)場離奇詭異诗宣,居然都是意外死亡,警方通過查閱死者的電腦和手機想诅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門召庞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人来破,你說我怎么就攤上這事篮灼。” “怎么了徘禁?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵诅诱,是天一觀的道長。 經(jīng)常有香客問我送朱,道長娘荡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任驶沼,我火速辦了婚禮炮沐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘回怜。我一直安慰自己大年,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鲜戒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抹凳。 梳的紋絲不亂的頭發(fā)上遏餐,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音赢底,去河邊找鬼失都。 笑死,一個胖子當著我的面吹牛幸冻,可吹牛的內(nèi)容都是我干的粹庞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼洽损,長吁一口氣:“原來是場噩夢啊……” “哼庞溜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起碑定,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤流码,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后延刘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漫试,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年碘赖,在試婚紗的時候發(fā)現(xiàn)自己被綠了驾荣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡普泡,死狀恐怖播掷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劫哼,我是刑警寧澤叮趴,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站权烧,受9級特大地震影響眯亦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜般码,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一妻率、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧板祝,春花似錦宫静、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伏伯。三九已至,卻和暖如春捌袜,著一層夾襖步出監(jiān)牢的瞬間说搅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工虏等, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弄唧,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓霍衫,卻偏偏與公主長得像候引,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子敦跌,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • RTSP Spec中文版(1-11)RTSP Spec中文版(12-16)RTSP Spec中文版(附錄) 附錄A...
    SniperPan閱讀 1,853評論 0 2
  • 一 概述: SDP目的就是在媒體會話中澄干,傳遞媒體流信息,允許會話描述的接收者去參與會話柠傍。SDP基本上在intern...
    幽瀾先生閱讀 8,090評論 0 2
  • RFC 2326RTSP Spec中文版(1-11)RTSP Spec中文版(12-16)RTSP Spec中文版...
    SniperPan閱讀 5,570評論 3 10
  • SDP協(xié)議 概述 SDP(會話描述協(xié)議)傻寂,用于兩個會話實體之間的媒體協(xié)商,并達成一致携兵,屬信令語言族疾掰,采用文本(字符...
    耦耦閱讀 6,802評論 0 6
  • 一直覺得js學的不扎實,網(wǎng)上找了項目練手徐紧,項目地址在這里静檬。 分析 幻燈片是通過設置class="current"來...
    _cherry閱讀 779評論 0 0