rtp封包

1 概述

經(jīng)過H264編碼器編碼后輸出的H264裸流數(shù)據(jù)乎芳,輸出的形式是以nalu的格式輸出的馋缅,主要分為兩層贫途,VCL(視頻編碼層)和NAL(網(wǎng)絡(luò)提取層),VCL主要負(fù)責(zé)表示壓縮后的視頻數(shù)據(jù)蹋肮,像塊出刷、宏塊、片等坯辩。NAL主要是在VCL之上針對于網(wǎng)絡(luò)傳輸提取出來的層級馁龟。然后NALU到達(dá)rtp封包模塊進(jìn)行封包,以下內(nèi)容詳細(xì)描述漆魔。

1.1 Nalu 結(jié)構(gòu)格式

一個(gè)原始的H.264 NALU單元常由[StartCode] [NALU Header] [NALU Payload]三部分組成坷檩,其中 Start Code 用于標(biāo)示這是一個(gè)NALU 單元的開始却音,必須是"00 00 00 01" 或"00 00 01",除此之外基本相當(dāng)于一個(gè)NAL header + RBSP;
RBSP矢炼、SODB系瓢、EBSP三者的區(qū)別和聯(lián)系
(1)SODB:最原始的編碼數(shù)據(jù),沒有任何附加數(shù)據(jù)
(2)RBSP:在SODB的基礎(chǔ)上加了rbsp_stop_ont_bit(bit 值為 1)并用 0 按字節(jié)補(bǔ)位對齊
(3)EBSP:在 RBSP 的基礎(chǔ)上增加了防止偽起始碼字節(jié)(0X03)
(4)NALU是對RBSP的封裝句灌。而RTP之類的是對NALU的封裝夷陋。
具體格式參見下圖


nalu header格式
NALU格式.png

1.2 rtp包格式

rtp包頭如下:


rtp頭格式.png
  1. V:RTP協(xié)議的版本號,占2位胰锌,當(dāng)前協(xié)議版本號為2

  2. P:填充標(biāo)志骗绕,占1位,如果P=1资昧,則在該報(bào)文的尾部填充一個(gè)或多個(gè)額外的八位組爹谭,它們不是有效載荷的一部分。

  3. X:擴(kuò)展標(biāo)志榛搔,占1位,如果X=1东揣,則在RTP報(bào)頭后跟有一個(gè)擴(kuò)展報(bào)頭

  4. CC:CSRC計(jì)數(shù)器践惑,占4位,指示CSRC 標(biāo)識符的個(gè)數(shù)

  5. M: 標(biāo)記嘶卧,占1位尔觉,不同的有效載荷有不同的含義,對于視頻芥吟,標(biāo)記一幀的結(jié)束侦铜;對于音頻,標(biāo)記會話的開始钟鸵。

  6. PT: 有效荷載類型钉稍,占7位,用于說明RTP報(bào)文中有效載荷的類型棺耍,如GSM音頻贡未、JPEM圖像等,在流媒體中大部分是用來區(qū)分音頻流和視頻流的,這樣便于客戶端進(jìn)行解析蒙袍。

  7. 序列號:占16位俊卤,用于標(biāo)識發(fā)送者所發(fā)送的RTP報(bào)文的序列號,每發(fā)送一個(gè)報(bào)文害幅,序列號增1消恍。這個(gè)字段當(dāng)下層的承載協(xié)議用UDP的時(shí)候,網(wǎng)絡(luò)狀況不好的時(shí)候可以用來檢查丟包以现。同時(shí)出現(xiàn)網(wǎng)絡(luò)抖動的情況可以用來對數(shù)據(jù)進(jìn)行重新排序狠怨,序列號的初始值是隨機(jī)的约啊,同時(shí)音頻包和視頻包的sequence是分別記數(shù)的。

  8. 時(shí)戳(Timestamp):占32位取董,必須使用90 kHz 時(shí)鐘頻率棍苹。時(shí)戳反映了該RTP報(bào)文的第一個(gè)八位組的采樣時(shí)刻。接收者使用時(shí)戳來計(jì)算延遲和延遲抖動茵汰,并進(jìn)行同步控制枢里。

  9. 同步信源(SSRC)標(biāo)識符:占32位,用于標(biāo)識同步信源蹂午。該標(biāo)識符是隨機(jī)選擇的栏豺,參加同一視頻會議的兩個(gè)同步信源不能有相同的SSRC。

  10. 特約信源(CSRC)標(biāo)識符:每個(gè)CSRC標(biāo)識符占32位豆胸,可以有0~15個(gè)奥洼。每個(gè)CSRC標(biāo)識了包含在該RTP報(bào)文有效載荷中的所有特約信源。

rtp頭后的負(fù)載,負(fù)載的封包格式有負(fù)載的第一個(gè)自己的后5位決定晚胡,具體格式如下圖.


負(fù)載封包識別

右上圖可以看出和nalu的header格式一樣灵奖,但是后5位表示的含義不相同。nalu表示的是slice類型估盘,對于rtp payload代表后面的數(shù)據(jù)的打包方式瓷患。type取值如下:
0 沒有定義
1-23 NAL單元 單個(gè) NAL 單元包.
24 STAP-A 單一時(shí)間的組合包
25 STAP-B 單一時(shí)間的組合包
26 MTAP16 多個(gè)時(shí)間的組合包
27 MTAP24 多個(gè)時(shí)間的組合包
28 FU-A 分片的單元
29 FU-B 分片的單元
30-31 沒有定義
以上類型大概可以分為三類:

  1. 單個(gè) NAL 單元包:荷載中只包含一個(gè) NAL 單元。 NAL 頭類型域等于原始 NAL 單元類型, 即在范圍 1到 23 之間;
  2. 聚合包:本類型用于聚合多個(gè) NAL 單元到單個(gè) RTP 荷載中遣妥。有四種版本, 單時(shí)間聚合包類型 A(STAP-A) 擅编,單時(shí)間聚合包類型 B (STAP-B) ,多時(shí)間聚合包類型(MTAP)16 位位移(MTAP16), 多時(shí)間聚合包類型(MTAP)24 位位移(MTAP24) 箫踩。賦予 STAP-A, STAP-B, MTAP16, MTAP24 的 NAL 單元類型號分別是 24,25, 26, 27;
  3. 分片單元: 由于單個(gè)nal的大小超過了一個(gè)rtp傳輸負(fù)載的mtu,所以將其進(jìn)行分片爱态,用于分片單個(gè) NAL 單元到多個(gè) RTP 包。 現(xiàn)存兩個(gè)版本 FU-A境钟, FU-B, 用 NAL 單元類型 28锦担,29 標(biāo)識;

1.2.1 單個(gè) NAL 單元包

單個(gè)NALU的rtp payload格式

定義在此的NAL單元包必須只包含一個(gè)。這意味聚合包和分片單元不可以用在單個(gè)NAL 單元包中吱韭。并且RTP序號必須符合NAL單元的解碼順序吆豹。NAL單元的第一字節(jié)和RTP荷載頭第一個(gè)字節(jié)重合。

1.2.2 聚合包

  • STAP-A


    STAP-A 聚合2個(gè)NALU

    抓包webrtc中sps理盆、pps封包痘煤,如下:


    sps\pps 封包抓包場景.png
  • STAP-B


    STAP-B 封包格式

    STAP-B比STAP-A多了一個(gè)公共的DON,DON域指定STAP-B傳輸順序中第一個(gè)NAL單元的DON值. 對每個(gè)后續(xù)出現(xiàn)在STAP-B中的NAL單元猿规,它的DON值等于(STAP-B中前一個(gè)NAL的DON值+1)%65535, %是取模運(yùn)算衷快。

    單時(shí)刻聚合單元有一個(gè)16位無符號大小信息(網(wǎng)絡(luò)字節(jié)序),他指示后續(xù)NAL單元的大幸塘(以字節(jié)為單位)(不包括這兩個(gè)字節(jié),但包括NAL單元類型字節(jié)),后面緊跟NAL單元本身, 包括它的NAL單元類型字節(jié). 單時(shí)刻聚合單元在RTP荷載中是字節(jié)對齊的,但可以不是32位字邊界對齊蘸拔。

  • MTAP16/24


    MTAP16/24 格式

    兩個(gè)不同多時(shí)刻聚合單元师郑。兩個(gè)都有16位的無符號大小信息用于后續(xù)NAL單元(網(wǎng)絡(luò)字節(jié)序),一個(gè)8位無符號解碼序號差值(DOND), 和n位 (網(wǎng)絡(luò)字節(jié)序) 時(shí)戳位移(TS 位移)用于本NAL單元,n可以是16/24. 不同MTAP類型的選擇是應(yīng)用相關(guān)的(MTAP16/MTAP24): 時(shí)戳位移越大, MTAP的靈活性越大, 但是負(fù)擔(dān)也越大。
    MTAP16/MTAP24多時(shí)刻聚合單元的結(jié)構(gòu)分別在圖 10 调窍,11表示宝冕。一個(gè)包中的聚合單元的開始/結(jié)束不要求位于32位的邊界。跟隨NAL單元的DON 等于(DONB + DOND) % 65536, %代表取摸操作. 本文沒有指定MTAP內(nèi)的NAL單元如何排序邓萨,但大多數(shù)情況地梨,應(yīng)該使用NAL單元解碼順序。
    時(shí)戳位移域必須設(shè)置成等于以下公式的值:如果NALU-time大于等于包的RTP時(shí)戳,則時(shí)戳位移等于(NALU-time - 包的RTP時(shí)戳).
    如果NALU-time小于包的RTP時(shí)戳,則時(shí)戳位移等于 NALU-time + (2^32 - 包的RTP時(shí)戳).

1.2.3 分片單元(FU-A缔恳、FU-B)

本荷載類型允許分片一個(gè)NAL單元到幾個(gè)RTP包中宝剖。


FU-A格式

FU-B格式

FU indicator對應(yīng)格式:


FU indicator 格式

其中type=28,29表示FU-A和FU-B
FU header對應(yīng)格式:
FU header格式

S: 1 bit
當(dāng)設(shè)置成1,開始位指示分片NAL單元的開始歉甚。當(dāng)跟隨的FU荷載不是分片NAL單元荷載的開始万细,開始位設(shè)為0。
E: 1 bit
當(dāng)設(shè)置成1, 結(jié)束位指示分片NAL單元的結(jié)束纸泄,即, 荷載的最后字節(jié)也是分片NAL單元的最后一個(gè)字節(jié)赖钞。當(dāng)跟隨的FU荷載不是分片NAL單元的最后分片,結(jié)束位設(shè)置為0。
R: 1 bit
保留位必須設(shè)置為0聘裁,接收者必須忽略該位仁烹。
Type: 5bit
與NALU Header type 對應(yīng)


抓包舉例

標(biāo)準(zhǔn)文檔
http://www.rosoo.net/Files/UpFiles/RsProduct/avtools/2009-4/2009491562537854.txt

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咧虎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌计呈,老刑警劉巖砰诵,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捌显,居然都是意外死亡茁彭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門扶歪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來理肺,“玉大人,你說我怎么就攤上這事善镰∶萌” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵炫欺,是天一觀的道長乎完。 經(jīng)常有香客問我,道長品洛,這世上最難降的妖魔是什么树姨? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任摩桶,我火速辦了婚禮,結(jié)果婚禮上帽揪,老公的妹妹穿的比我還像新娘硝清。我一直安慰自己,他們只是感情好转晰,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布芦拿。 她就那樣靜靜地躺著,像睡著了一般挽霉。 火紅的嫁衣襯著肌膚如雪防嗡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天侠坎,我揣著相機(jī)與錄音蚁趁,去河邊找鬼。 笑死实胸,一個(gè)胖子當(dāng)著我的面吹牛他嫡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庐完,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼钢属,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了门躯?” 一聲冷哼從身側(cè)響起淆党,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎讶凉,沒想到半個(gè)月后染乌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡懂讯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年荷憋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褐望。...
    茶點(diǎn)故事閱讀 40,567評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡勒庄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘫里,到底是詐尸還是另有隱情实蔽,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布谨读,位于F島的核電站盐须,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贼邓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一阶冈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧塑径,春花似錦女坑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至誉简,卻和暖如春碉就,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闷串。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工瓮钥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人烹吵。 一個(gè)月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓碉熄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肋拔。 傳聞我的和親對象是個(gè)殘疾皇子锈津,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評論 2 359

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