H.264的NALU,RTP封包說明(轉自牛人)

H.264 RTP payload 格式

H.264 視頻 RTP 負載格式

1. 網絡抽象層單元類型 (NALU)

NALU 頭由一個字節組成, 它的語法如下:

????? +---------------+
????? |0|1|2|3|4|5|6|7|
????? +-+-+-+-+-+-+-+-+
????? |F|NRI| Type?? |
????? +---------------+

F: 1 個比特.
forbidden_zero_bit. 在 H.264 規范中規定了這一位必須為 0.

NRI: 2 個比特.
nal_ref_idc. 取 00 ~ 11, 似乎指示這個 NALU 的重要性, 如 00 的 NALU 解碼器可以丟棄它而不影響圖像的回放. 不過一般情況下不太關心

這個屬性.

Type: 5 個比特.
nal_unit_type. 這個 NALU 單元的類型. 簡述如下:

0???? 沒有定義
1-23 NAL單元 單個 NAL 單元包.
24??? STAP-A?? 單一時間的組合包
25??? STAP-B?? 單一時間的組合包
26??? MTAP16?? 多個時間的組合包
27??? MTAP24?? 多個時間的組合包
28??? FU-A???? 分片的單元
29??? FU-B???? 分片的單元
30-31 沒有定義

2. 打包模式

下面是 RFC 3550 中規定的 RTP 頭的結構.

?????? 0?????????????????? 1?????????????????? 2?????????????????? 3
?????? 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? |V=2|P|X| CC?? |M|???? PT????? |?????? sequence number???????? |
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? |?????????????????????????? timestamp?????????????????????????? |
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? |?????????? synchronization source (SSRC) identifier??????????? |
????? +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
????? |??????????? contributing source (CSRC) identifiers???????????? |
????? |???????????????????????????? ....????????????????????????????? |
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

負載類型 Payload type (PT): 7 bits
序列號 Sequence number (SN): 16 bits
時間戳 Timestamp: 32 bits

H.264 Payload 格式定義了三種不同的基本的負載(Payload)結構. 接收端可能通過 RTP Payload
的第一個字節來識別它們. 這一個字節類似 NALU 頭的格式, 而這個頭結構的 NAL 單元類型字段
則指出了代表的是哪一種結構,

這個字節的結構如下, 可以看出它和 H.264 的 NALU 頭結構是一樣的.
????? +---------------+
????? |0|1|2|3|4|5|6|7|
????? +-+-+-+-+-+-+-+-+
????? |F|NRI| Type?? |
????? +---------------+
字段 Type: 這個 RTP payload 中 NAL 單元的類型. 這個字段和 H.264 中類型字段的區別是, 當 type
的值為 24 ~ 31 表示這是一個特別格式的 NAL 單元, 而 H.264 中, 只取 1~23 是有效的值.
??
24??? STAP-A?? 單一時間的組合包
25 ?? STAP-B?? 單一時間的組合包
26??? MTAP16?? 多個時間的組合包
27??? MTAP24?? 多個時間的組合包
28??? FU-A???? 分片的單元
29??? FU-B???? 分片的單元
30-31 沒有定義

可能的結構類型分別有:

1. 單一 NAL 單元模式
???? 即一個 RTP 包僅由一個完整的 NALU 組成. 這種情況下 RTP NAL 頭類型字段和原始的 H.264的
NALU 頭類型字段是一樣的.

2. 組合封包模式
??? 即可能是由多個 NAL 單元組成一個 RTP 包. 分別有4種組合方式: STAP-A, STAP-B, MTAP16, MTAP24.
那么這里的類型值分別是 24, 25, 26 以及 27.

3. 分片封包模式
??? 用于把一個 NALU 單元封裝成多個 RTP 包. 存在兩種類型 FU-A 和 FU-B. 類型值分別是 28 和 29.

2.1 單一 NAL 單元模式

對于 NALU 的長度小于 MTU 大小的包, 一般采用單一 NAL 單元模式.
對于一個原始的 H.264 NALU 單元常由 [Start Code] [NALU Header] [NALU Payload] 三部分組成, 其中 Start Code 用于標示這是一個

NALU 單元的開始, 必須是 "00 00 00 01" 或 "00 00 01", NALU 頭僅一個字節, 其后都是 NALU 單元內容.
打包時去除 "00 00 01" 或 "00 00 00 01" 的開始碼, 把其他數據封包的 RTP 包即可.

?????? 0?????????????????? 1?????????????????? 2?????????????????? 3
?????? 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? |F|NRI| type?? |?????????????????????????????????????????????? |
????? +-+-+-+-+-+-+-+-+?????????????????????????????????????????????? |
????? |?????????????????????????????????????????????????????????????? |
????? |?????????????? Bytes 2..n of a Single NAL unit???????????????? |
????? |?????????????????????????????????????????????????????????????? |
????? |?????????????????????????????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? |?????????????????????????????? :...OPTIONAL RTP padding??????? |
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


如有一個 H.264 的 NALU 是這樣的:

[00 00 00 01 67 42 A0 1E 23 56 0E 2F ... ]

這是一個序列參數集 NAL 單元. [00 00 00 01] 是四個字節的開始碼, 67 是 NALU 頭, 42 開始的數據是 NALU 內容.

封裝成 RTP 包將如下:

[ RTP Header ] [ 67 42 A0 1E 23 56 0E 2F ]

即只要去掉 4 個字節的開始碼就可以了.


2.2 組合封包模式

其次, 當 NALU 的長度特別小時, 可以把幾個 NALU 單元封在一個 RTP 包中.


?????? 0?????????????????? 1?????????????????? 2?????????????????? 3
?????? 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? |????????????????????????? RTP Header?????????????????????????? |
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? |STAP-A NAL HDR |???????? NALU 1 Size?????????? | NALU 1 HDR??? |
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? |???????????????????????? NALU 1 Data?????????????????????????? |
????? :?????????????????????????????????????????????????????????????? :
????? +?????????????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? |?????????????? | NALU 2 Size?????????????????? | NALU 2 HDR??? |
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? |???????????????????????? NALU 2 Data?????????????????????????? |
????? :?????????????????????????????????????????????????????????????? :
????? |?????????????????????????????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? |?????????????????????????????? :...OPTIONAL RTP padding??????? |
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


2.3 Fragmentation Units (FUs).

而當 NALU 的長度超過 MTU 時, 就必須對 NALU 單元進行分片封包. 也稱為 Fragmentation Units (FUs).

?????? 0?????????????????? 1?????????????????? 2?????????????????? 3
?????? 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? | FU indicator |?? FU header?? |?????????????????????????????? |
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+?????????????????????????????? |
????? |?????????????????????????????????????????????????????????????? |
????? |???????????????????????? FU payload??????????????????????????? |
????? |?????????????????????????????????????????????????????????????? |
????? |?????????????????????????????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
????? |?????????????????????????????? :...OPTIONAL RTP padding??????? |
????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

????? Figure 14. RTP payload format for FU-A

?? The FU indicator octet has the following format:

????? +---------------+
????? |0|1|2|3|4|5|6|7|
????? +-+-+-+-+-+-+-+-+
????? |F|NRI| Type?? |
????? +---------------+

?? The FU header has the following format:

????? +---------------+
????? |0|1|2|3|4|5|6|7|
????? +-+-+-+-+-+-+-+-+
????? |S|E|R| Type?? |
????? +---------------+


3. SDP 參數

下面描述了如何在 SDP 中表示一個 H.264 流:

. "m=" 行中的媒體名必須是 "video"
. "a=rtpmap" 行中的編碼名稱必須是 "H264".
. "a=rtpmap" 行中的時鐘頻率必須是 90000.
. 其他參數都包括在 "a=fmtp" 行中.

如:

m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; sprop-parameter-sets=Z0IACpZTBYmI,aMljiA==

下面介紹一些常用的參數.

3.1 packetization-mode:
表示支持的封包模式.
當 packetization-mode 的值為 0 時或不存在時, 必須使用單一 NALU 單元模式.
當 packetization-mode 的值為 1 時必須使用非交錯(non-interleaved)封包模式.
當 packetization-mode 的值為 2 時必須使用交錯(interleaved)封包模式.
這個參數不可以取其他的值.

3.2 sprop-parameter-sets:
這個參數可以用于傳輸 H.264 的序列參數集和圖像參數 NAL 單元. 這個參數的值采用 Base64 進行編碼. 不同的參數集間用","號隔開.

3.3 profile-level-id:
這個參數用于指示 H.264 流的 profile 類型和級別. 由 Base16(十六進制) 表示的 3 個字節. 第一個字節表示 H.264 的 Profile 類型, 第

三個字節表示 H.264 的 Profile 級別:

3.4 max-mbps:
這個參數的值是一個整型, 指出了每一秒最大的宏塊處理速度.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455563.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455563.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455563.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CentOS下安裝MySQL報安裝文件conflicts錯誤:

2019獨角獸企業重金招聘Python工程師標準>>> 第一:報這個錯誤,說明已經安裝或相關文件已經存在,把已經存在的文件卸載了就可以了: rpm -e --nodeps mysql-libs-5.1.* 轉載于:https://my.oschina.net/u/3197158/blog/1…

inc指令是什么意思_西門子PLC一些指令

指令(英文全稱意思)∶指令含義1、LD ( Load裝載):動合觸點2、LDN (Load Not不裝載):動斷觸點3、A(And與動合):用于動合觸點串聯4、AN (And Not與動斷):用于動斷觸點串聯5、o(Or 或動合):用于動合觸點并聯6、ON(Or Not 或動斷):用于動斷觸點并聯7、(Out輸出):用于線圈輸出8、OLD…

python核心,內建函數,高階函數

晨測 global和nonlocal區別 寫一個遞歸的階乘回顧 1.global和nonlocal 關鍵字 2.函數的遞歸 1.查找規律 2.設置退出條件 3.性能 3.閉包 外函數中定義一個內函數 外函數的返回值是內函數的引用 內函數引用外函數的變量,未來外函數執行完畢,不會釋放被內函數引用變量 4.總結 1.…

對h.264壓縮視頻碼流中i幀的提取(firstime)

這個問題要說清楚還是有點復雜:首先判斷 NALU 類型是否是 5,如果是,那么以后連續出現的 NALU 類型為 5 的 NALU 就屬于 IDR 幀(一種特殊的 I 幀);如果 NALU 不是 5,則要進一步判斷 slice_type 是…

hadoop fs 運維常用的幾個命令

FS Shell調用文件系統(FS)Shell命令應使用 bin/hadoop fs <args>的形式。 所有的的FS shell命令使用URI路徑作為參數。URI格式是scheme://authority/path。對HDFS文件系統&#xff0c;scheme是hdfs&#xff0c;對本地文件系統&#xff0c;scheme是file。其中scheme和auth…

touchesEnded不響應

為什么80%的碼農都做不了架構師&#xff1f;>>> http://blog.csdn.net/assholeu/article/details/16363241 touchesEnded不響應主要存在以下幾種情況 case 1 : userInteractionEnabled 部分控件如UIImageView&#xff0c;userInteractionEnabled默認為NO&#xff0…

python request對四類參數的處理_如何處理Djang中同一參數具有多個變量的request.GET...

在Django視圖中&#xff0c;您可以訪問request.GET[variablename]&#xff0c;因此在您的視圖中&#xff0c;您可以執行如下操作&#xff1a;myvar request.GET[myvar] 實際的request.GET[myvar]對象類型是&#xff1a; 現在&#xff0c;如果要傳遞具有相同參數名的多個變量&a…

nonlocal和global關鍵字

回顧: 1. Python的函數的概述函數定義函數調用2. Python函數中參數的類型和返回值形參和實參形參類型:普通參數: 實參的傳遞的順序和個數和形參一直關鍵字參數: 指定傳遞的實參被特定形參接收默認參數: 形參中設定當前參數的默認值可以不傳遞設定了默認參數的實參不定長參數:一…

小波在圖像視頻壓縮領域中的應用分析【轉貼】

到目前為止&#xff0c;小波的最多應用一直是數字圖像壓縮。它們是新JPEG2000數字圖像標準的核心。使用小波變換的優勢主要有如下幾個方面。 1、基于小波變換的方法能有效地保留原始圖像的細節和邊緣&#xff0c;重建圖像時不會造成“振鈴”效應。 2、基于小波變換的方法采用…

iOS開發人員不容錯過的10大工具

內容簡介 1、iOS簡介 2、iOS開發十大實用工具之開發環境 3、iOS開發十大實用工具之圖標設計 4、iOS開發十大實用工具之原型設計 5、iOS開發十大實用工具之演示工具 6、iOS開發十大實用工具之視頻制作 7、iOS開發十大實用工具之分析工具 iOS簡介 說起iOS&#xff0c;自然不必多介…

博弈論之Nim游戲

OI里&#xff0c;博弈論就是兩個聰明絕頂的人玩不公平的游戲。 Nim游戲是組合游戲(Combinatorial Games)的一種&#xff0c;屬于“Impartial Combinatorial Games”&#xff08;以下簡稱ICG&#xff09;。 通常的Nim游戲的定義是這樣的&#xff1a;有若干堆石子&#xff0c;每堆…

python標準庫sys_Python標準庫之Sys模塊使用詳解

sys 模塊提供了許多函數和變量來處理 Python 運行時環境的不同部分. 處理命令行參數 在解釋器啟動后, argv 列表包含了傳遞給腳本的所有參數, 列表的第一個元素為腳本自身的名稱. 使用sys模塊獲得腳本的參數 復制代碼代碼如下: print "script name is", sys.argv[0] …

python3.7知識點匯總

Python3.7從零開始學 —|進入Python3.7的精彩世界 —|---|Python起源 —|---|—|Python作者簡介 —|---|—|---|Guido von Rossum&#xff0c;荷蘭人。1982年&#xff0c;Guido從阿姆斯特丹大學獲得了數學和計算機碩士學位。1989年&#xff0c;他創立了Python語言。 —|---|—|…

塊編碼、對象編碼、小波編碼、分布式編碼【轉貼】

人類獲取的信息中70%來自于視覺&#xff0c;視頻信息在多媒體信息中占有重要地位&#xff1b;同時視頻數據冗余度最大&#xff0c;經壓縮處理后的視頻質量高低是決定多媒體服務質量的關鍵因素。因此數字視頻技術是多媒體應用的核心技術&#xff0c;對視頻編碼的研究已成為信息技…

cookie練習

cookie是網站便于辨別用戶身份&#xff0c;進行 session 跟蹤而儲存在用戶本地終端上的數據。 cookie通過jsdom操作完成。 添加cookie&#xff1a; document.cookie ‘name val’;前一個是name&#xff0c;后一個是val。添加的時間是永久的。 document.cookie ‘name val ;…

算法學習系列(十):用數組模擬鏈表、雙鏈表、棧、隊列、單調棧、單調隊列

目錄 引言一、數組模擬鏈表1.模板2.例題3.測試 二、數組模擬雙鏈表1.模板2.例題3.測試 三、數組模擬棧1.模板2.例題3.測試 四、數組模擬隊列1.模板2.例題3.測試 五、數組模擬單調棧1.例題模板2.測試 六、數組模擬單調隊列1.例題模板2.測試 引言 首先說一下為什么要拿數組來模擬…

為什么你的路由器穿墻能力差?看完秒懂

1、信號弱賴我咯? 不管你承認與否&#xff0c;只要有墻家中就會存有信號死角&#xff0c;不要小看一墻之隔。如何讓路由器的信號增強? 網上一搜旁門左道真不少&#xff0c;什么調整天線尋找合理角度&#xff0c;又或是用易拉罐DIY一個信號放大器&#xff0c;然鵝并非簡單的將…

fish工具_Python程序員使用哪些開發工具

Python程序員使用哪些開發工具?很多Python學習者想必都會有如下感悟&#xff1a;最開始學習Python的時候&#xff0c;因為沒有去探索好用的工具&#xff0c;吃了很多苦頭。后來工作中深刻體會到&#xff0c;合理使用開發的工具的便利和高效。今天&#xff0c;北京學佳澳小編總…

[shiro學習筆記]第二節 shiro與web融合實現一個簡單的授權認證

本文地址&#xff1a;http://blog.csdn.net/sushengmiyan/article/details/39933993shiro官網: http://shiro.apache.org/shiro中文手冊&#xff1a;http://wenku.baidu.com/link?urlZnnwOHFP20LTyX5ILKpd_P94hICe9Ga154KLj_3cCDXpJWhw5Evxt7sfr0B5QSZYXOKqG_FtHeD-RwQvI5ozyT…

Web安全之Cookie劫持

1.Cookie是什么? 2.竊取的原理是什么? 3.系統如何防Cookie劫持呢? 看完這三個回答&#xff0c;你就明白哪位傳奇大俠是如何成功的!!! Cookie: HTTP天然是無狀態的協議&#xff0c;為了維持和跟蹤用戶的狀態&#xff0c;引入了Cookie和Session。Cookie包含了瀏覽器客戶端的用…