使用mp4v2封裝h264裸流

使用mp4v2封裝h264裸流

前言

最近項目需要將視頻數據壓縮並封裝成mp4,研究了ffmpeg的方式,但是最終也沒搞定。後面換成x264+mp4v2的方式,網上也有一些例子,但是發現都是對x264編出來裸流進行過處理,下下來無法封裝成功,自己研究了幾天,最終搞定。

X264是用於將原始視頻壓縮成h264格式的開源庫,mp4v2 庫是一個專用於處理mp4容器的開源項目,其使用c++編寫,並提供C語言接口。 

我在項目中是用x264yuv原始視頻壓縮成不帶B幀的h264裸流,沒有加時間戳,也沒有加其他任何處理,以下封裝步驟也是針對此種情況進行。

H264格式講解

我在用mp4v2封裝的過程,很大程度上還是對h264的格式不夠熟悉,造成了封裝過程中出現這樣那樣的問題,因此在這裏着重解釋一下封裝過程中需要知道的一些知識。

SPS(序列參數集)和PPS(圖像參數集),兩者都是包含解碼必須的一些信息。網上有資料說h264的第一幀數據就是SPS,第二幀數據就是PPS,這是不正確的。正確的說法應該是每一個IDR幀之前,都會有一個SPS和PPS,而且在x264編碼的過程中,PPS和SPS是一起輸出的。

例如下面所示的視頻序列,每一個IDR幀前都有一個SPS和PPS。

SPS PPS IDR P P P … P P SPS PPS IDR P P P …

MP4V2封裝h264裸流步驟

圖1 mp4v2封裝h264裸流

示例源碼

 工程源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章