1
我们知道,一个AVPacket包含一个AVFrame,我们可以使用ffmpeg - avcodec_decode_video2如何工作?
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我们受到了损坏或其他什么?
使用多线程解码时也会发生延迟。关于B帧,它们的存在并不是必需的:对于h264流来说,在avcodec_decode_video2()中声明“max b-frames = 3”导致3帧延迟就足够了 –