對H264 startcode一些粗淺的認識

2021-09-13 12:13:07 字數 816 閱讀 3764

對h264 startcode一些粗淺的認識

主要是為了將相鄰兩個nalu劃分開,讓他們有乙個界線,方便解碼,比如將h264的資料儲存在乙個檔案當中,解碼器無法從資料流中分別每個nalu的起始位置。

在編碼時,每個nalu前面新增startcode(佔4位元組0x00000001或者3位元組0x000001),這裡有人會想到萬一中間出現0x000001怎麼辦呢,h264有個防止競爭的機制,在編碼完乙個nal時,如果出現有連續兩個0x00位元組,就在後面插入乙個0x03(解碼的時候這個0x03會被丟棄)。

實際上startcode只佔3位元組,4位元組的起始部分 = zero_byte + start_code_prefix_one_3bytes,就是說無論啥時候其實startcode都是3位元組,關鍵就在於zero_byte。

包含sps,pps的nalu前面要加zero_byte(4位元組)。

當一幀被分為多個slice時,首個nalu前面要加zero_byte(4位元組)。

sps            (4位元組頭)

pps (4位元組頭)

sei (4位元組頭)

i0(slice0) (4位元組頭)

i0(slice1) (3位元組頭)

p1(slice0) (4位元組頭)

p1(slice1) (3位元組頭)

p2(slice0) (4位元組頭)

p2(slice1) (3位元組頭)

總結一下就是,當乙個完整的幀被分為多個slice時,除掉第乙個nalu,剩下的都用3位元組的,其餘的都是4位元組。

對H264進行RTP封包原理

1.引言 2.rtp 協議關鍵引數的設定 其中比較關鍵的引數設定解釋如下 1 標示位 m 1 位,該標示位的含義一般由具體的 應用框架 profile 定義,目的在於標記處rtp 流中的重要事件。3 序號 16 位,每傳送乙個 rtp 資料報,序號加 1。接受者可以用它來檢測分組丟失和恢復分組順序。...

rtp對h264 nalu fu a的處理

1.fu a的分片格式 fu indicator有以下格式 0 1 2 3 4 5 6 7 f nri type fu指示位元組的型別域 type 28表示fu a。nri域的值必須根據分片nal單元的nri域的值設定 f forbidden zero bit 在h.264規範中規定這一位必須為0 ...

對H264進行RTP封包原理

1.引言 2.rtp 協議關鍵引數的設定 其中比較關鍵的引數設定解釋如下 1 標示位 m 1 位,該標示位的含義一般由具體的 應用框架 profile 定義,目的在於標記處rtp 流中的重要事件。3 序號 16 位,每傳送乙個 rtp 資料報,序號加 1。接受者可以用它來檢測分組丟失和恢復分組順序。...