簡體   English   中英

h264 到 FLV 的轉換,不明確的 FrameType 定義:關鍵幀與幀間的區別是什么?

[英]h264 to FLV conversion, ambiguous FrameType definition: What differentiates a Key Frame vs an Inter Frame?

我正在嘗試在 Android 應用程序中通過 RTMP 在 FLV 容器中寫出附件 B 格式的 h264 比特流。 在閱讀了這個 SO 答案和更多內容之后,我了解我的附件 B 比特流首先必須轉換為 AVCC,然后才能包裝在 FLV 容器中。

也就是說,FLV 容器規范在其視頻標簽的包裝上有點不清楚。 它需要一個 FrameType,它可以是:

  1. 關鍵幀(對於 AVC 是可搜索的幀)
  2. 幀間(對於 AVC 是不可搜索的幀)
  3. 一次性幀間(僅限 h263)
  4. 生成的關鍵幀(僅限服務器端)
  5. 視頻信息/命令幀(消息字符串包含一個字節,0 或 1 表示客戶端搜索視頻幀序列的開始或客戶端搜索幀序列的結束)

在編寫 IDR 或非 IDR AVC 幀時,即 VCL NAL 單元,很明顯應該分別使用選項 1 和 2。 但是,我的 h264 比特流還包含非 VCL NAL 單元,特別是 SEI 有效負載類型 47(顯示方向)。 目前尚不清楚這是否適合根據規范從 AVC 到 FLV。 我是否只是將 SEI 視為不可搜索的框架? 從 FLV 的角度來看,什么是“框架”?

這不是模棱兩可的。 flv 稱為幀,h264 稱為訪問單元。 就像您發布的鏈接所說,一個訪問單元可以包含多個 NAL。 SEI 本身不是訪問單元,因此它不是幀,因此它永遠不應該單獨存在於 flv 標簽中,因此這個問題沒有意義。

SEI 作為同一幀 (AU) 有效負載的一部分發送,flv 幀類型是該 au 中的 VCL nalus。

根據 Mathias Wien 的“高效視頻編碼:編碼工具和規范”,所有 SEI(補充增強信息)消息都被定義為視頻解碼和重建不需要的信息。 一般來說,並不是所有的視頻格式都可以代表這樣的信息。 具體而言,顯示方向消息不代表任何特定的視頻幀,因為它是一個一直存在直到更改的標志。

暫無
暫無

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

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