簡體   English   中英

使用 av_read_frame() 獲取 2 個連續幀

[英]Get 2 consecutives frames with av_read_frame()

我正在使用 rtmp 和 ffmpeg/libav。 我有一個 fps 為 60 fps 的剪輯,它由 2 個連續的視頻幀和 1 個音頻幀組成。 2 個連續的幀對應於來自 2 個攝像機的左右圖像(已經同步)。 我使用av_read_frame讀取幀,然后如果它是視頻幀,我使用avcodec_decode_video2 (我知道它已被棄用,但它仍然有效,稍后我將替換它)。 現在,由於我必須將 2 個視頻幀並排放置,我等到 2 個幀被完全讀取,然后將它們與 OpenCV 放在一起。 問題是我似乎總是只讀取有時被右幀打斷的左幀。 我搜索了一下問題,似乎與解碼器的沖洗有關。 因此,我嘗試使用空包或使用avcodec_flush_buffers刷新解碼器,但情況更糟,我得到左右圖像但只有幾幀。 在下面我放了一個我的代碼示例:

bool left = false;
while(true)
{
  ret = av_read_frame(fmt_ctx, &pkt);
  if(ret < 0)
    break
  if(pkt.stream_index == video_index)
  {
    ret = avcodec_decode_video2(video_dec_ctx, frame, &got_frame, &pkt);
    if(got_frame)
    { 
      if(!left)
      {
        //I SAVE THE LEFT FRAME
        left = true;
      }
      else
      {
        //I PUT THE LEFT AND RIGHT FRAME TOGETHER
        left = false;
      }
    }
  }
}

更新

我想出了問題所在:基本上我要讀取的剪輯/流是由 1 個 I 幀和 P 幀組成的,它們實際上是 I 幀,因為每個幀代表左和右。 我無法使用av_read_frame強制執行任何操作,因此我必須找到解決方法。

我猜相鄰的幀(左和右)可能有相同的 PTS 值。 您可以先緩沖幀,然后在正確獲取幀后根據 PTS 值獲取(查找相同的值),與它們相鄰可能很簡單。

希望有幫助。

暫無
暫無

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

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