簡體   English   中英

為什么H265解碼器在開始解碼之前必須等待數十幀數據?

[英]Why does H265 decoder has to wait for tens of frames of data before start decoding?

我正在嘗試基於H265編解碼器以C ++構建實時視頻流應用程序。 我的應用程序非常關注實時性能,並且我建立了一個單線程程序來測試H265編解碼器。 該程序有一個簡單的管道:

  1. 抓住一幀;
  2. 饋入編碼器;
  3. 將編碼后的數據饋送到解碼器;
  4. 如果沒有解碼的幀,則顯示解碼的結果或輸出通知。

我嘗試了AV_CODEC_ID_HEVC X265/DE265組合,以及X265/DE265組合中的AV_CODEC_ID_HEVC編碼器和解碼器, avcodec發現一種現象,即解碼器在第一幀數據到達后不會立即解碼,並且必須等到大約30幀數據開始輸出解碼結果之前。 情況看起來像這樣:

              **encoding**       **decoding**
frame 1:      succeeded      ->  no frame decoded
frame 2:      succeeded      ->  no frame decoded
frame 3:      succeeded      ->  no frame decoded
...
frame 30:     succeeded      ->  no frame decoded
frame 31:     succeeded      ->  frame 1 outputted
frame 32:     succeeded      ->  frame 2 outputted
...

這將導致編碼器延遲1到2秒。 我想知道為什么以及是否有辦法避免這種情況。

謝謝!

原因之一可能是B切片中的正向引用。

例如,通過選擇具有分層結構的大小為32的圖片組(GOP),您可以施加大約1秒的解碼延遲(假設25fps)。

更准確地說,第二幀的重建(第一幀是Intra,因此可獨立解碼)可能間接取決於您的第32幀。

這種編碼模式通常稱為隨機訪問。 查一下 您可以使用LowDelayP模式避免這種情況。 或全部內部。 換句話說,延遲取決於您的GOP結構。

暫無
暫無

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

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