1. 程式人生 > >FFmpeg In Android - H264碼流解碼/儲存Yuv

FFmpeg In Android - H264碼流解碼/儲存Yuv

本節例子原始碼_NativeH264Android,修改自ffmpeg原始碼目錄/doc/examples/decode_video.c

H264的碼流結構
H.264原始碼流(又稱為“裸流”)是由一個一個的NALU組成的,包括I幀,B幀,P幀等等,他們的結構如下圖所示:

其中每個NALU之間通過startcode(起始碼)進行分隔,起始碼分成兩種:001(3Byte)或者0001(4Byte)。如果NALU對應的Slice為一幀的開始就用0001,否則就用001。H.264碼流第一個 NALU是 SPS(序列引數集Sequence Parameter Set),H.264碼流第二個 NALU是 PPS(影象引數集Picture Parameter Set).
簡單來說碼流是這樣的byte陣列:0001+SPS+0001+PPS+0001+NALU+0001+NALU+…,解碼開始時,需要先把0001+SPS+0001+PPS"喂"給解碼器,然後將後面的一幀資料0001+NALU,繼續"喂"給解碼器,然後得到一張解碼出來的yuv儲存/顯示,再"喂"下一幀資料0001+NALU,這樣迴圈直到碼流結束.

轉:怎麼樣獲得H264原始碼流
轉:視音訊資料處理入門:H.264視訊碼流解析