[英]can i mux h264 stream into mp4(aac) through libavformat without libx264?
[英]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(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.