簡體   English   中英

檢測 h264 中的 I 幀 stream(分段 mp4)

[英]Detection I Frame in h264 stream (fragmented mp4)

我需要檢查 H264 stream 中的第一幀是 I 幀。

在輸入上,我有零碎的 mp4 文件。 我試圖在 moof->traf->trun "Sample depends on" 標志中找到框架類型。 但似乎並不是每個容器都填充了這個標志。所以我想嘗試用原始數據確定 mdat 塊中的幀類型。

我只需要檢查每個片段中的第一幀是 I 幀。 關於其他幀的信息無關緊要。

我該怎么做?

您可以檢查 NAL 單元類型。 NAL 單元類型 5 表示 IDR 幀,它是 I 幀。 在“mdat”中存儲視頻:

<size><NAL><size><NAL>...<size><NAL>

每個 NAL 單元的第一個字節的低 5 位表示類型。 跳過類型 6、7、8 和 9,直到找到類型 1(非 IDR 幀)或類型 5(IDR 幀)。

MP4 文件不應包含起始代碼 ([00] 00 00 01) 或訪問單元分隔符。

MPEG-2 傳輸流或 *.h264 raw 包含起始碼 ([00] 00 00 01) 和訪問碼分隔符。

MP4 中的大小字段大部分時間為 4 個字節,但如果您想要正確的答案,您必須解析編解碼器私有數據 (SPS/PPS)。

簡而言之,H.264 有兩種格式:

  • 附件 B 或
  • MP4 (mdat)

附件 B(MPEG-2 TS 或 *.264 原始文件):

<[00] 00 00 01> <NAL> <[00] 00 00 01> <NAL> ... <[00] 00 00 01> <NAL>

MP4 (mdat):

<size><NAL><size><NAL>...<size><NAL> 

您在https://drive.google.com/file/d/1Vwcz8WsTuRLJie8SFzGspizyTc-caGjc/view?usp=sharing中的文件在同一個 mdat 中有視頻和音頻。

因此,要使 I 幀檢測可靠,您必須進行更多解析:

這為您提供了進入 mdat 的視頻:

moof[i]->traf[0]->trun[0]->dataOffset

音頻從這里開始 => 停止解析視頻

moof[i]->traf[1]->trun[0]->dataOffset

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM