|
1. H.264起始碼 在網(wǎng)絡傳輸h264數(shù)據(jù)時,一個UDP包就是一個NALU,解碼器可以很方便的檢測出NAL分界和解碼。 但是如果編碼數(shù)據(jù)存儲為一個文件,原來的解碼器將無法從數(shù)據(jù)流中分別出每個NAL的起始位置和終止位置,為此h.264用起始碼來解決這一問題。(mpeg-4的startcode在后面討論)
H.264編碼時,在每個NAL前添加起始碼 0x000001,解碼器在碼流中檢測到起始碼,當前NAL結束。為了防止NAL內部出現(xiàn)0x000001的數(shù)據(jù),h.264又提出'防止競爭 emulation prevention"機制,在編碼完一個NAL時,如果檢測出有圖下表左側的四個字節(jié)序列,就在最后一個字節(jié)前插入一個新的字節(jié),0x03,從而變成下表右側的樣子。 當解碼器在NAL內部檢測到0x000003的數(shù)據(jù),就把0x03拋棄,恢復原始數(shù)據(jù)。 0x000000 >>>>>>0x000000300 0x000001 >>>>>>0x000000301 0x000002 >>>>>>0x000000302 0x000003 >>>>>>0x000000303
附上h.264解碼nalu中檢測起始碼的算法流程
2. MPEG4起始碼 mpeg4的特色是VOP,沒有NALU的概念,仍使用startcode對每幀進行分界。mpeg4的起始碼是001. 另外mpeg4中很多起始碼也很有用,比如visual_object_sequence_start_code 0001B0 表示一個視頻對象序列的開始,VOP_start_code 0001B6 表示一個VOP的開始. 000001b6之后的兩位,是00表示 I frame, 01 表示 P frame, 10 表示 B frame.
PS:VLC是非常強大的開源視頻解碼工程,里面mpeg4和h.264的解碼部分很有參考價值。建議大家下載看看。http://www./vlc
參考文獻 畢厚杰《新一代視頻壓縮編碼標準--H.264/AVC》 MPEG4標準文檔mpeg-4-14496-2 |
|
|
來自: 春華_秋實 > 《嵌入式Linux》