1

我们知道,一个AVPacket包含一个AVFrame,我们可以使用

int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame,
                          int *got_frame_ptr, const AVPacket *avpkt)

将数据包解码为帧,如果有效,got_frame_ptr将设置为非零,否则为零。

int len = avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
if ( len < 0 )
{
    fprintf(stderr, "Problems decoding frame\n");
    return 1;
}

fprintf(stderr, "len = %d\n", len );

// Did we get a video frame?
if(frameFinished) {
    dosomething();
}

它怎么会失败(got_frame_ptr为0)?是我们损坏的AVPacket还是其他什么?

4

1 回答 1

2

有两个主要原因(除了错误)

  1. 当前帧是未来的 P 帧,因此现在不能返回(显示)。这发生在序列中的 B 帧的情况下。

  2. 当前数据包不是完整的可解码帧。

于 2012-12-31T03:27:30.840 回答