天天看點

使用mp4v2封裝h264裸流

使用mp4v2封裝h264裸流

前言

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

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

我在項目中是用x264将yuv原始視訊壓縮成不帶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

MP4V2封裝h264裸流步驟

使用mp4v2封裝h264裸流

示例源碼

繼續閱讀