c ++ ffmpeg:总是一样的框架?

时间:2016-02-28 18:49:35

标签: c++ ffmpeg

我有一个代码,(应该)使用ffmpeg为每个调用提供另一个框架。我的问题是,它始终是相同的框架,我解码...

有人能告诉我,我在这里失踪了吗?

bool nextFrameFound = false;
while(!nextFrameFound)
{
    AVPacket pkt;

    int err = av_read_frame(ctx, &pkt);
    if (err < 0)
    {
        break;
        system("Pause");
        exit(2);
    }

    if (pkt.stream_index == strm)
    {
        int got = 0;
        AVFrame * frame = av_frame_alloc();
        int videoFrameBytes = avcodec_decode_video2(codecCtx, frame, &got, &pkt);

        if (got)
        {
            AVFrame * rgbFrame = av_frame_alloc();

            avpicture_alloc((AVPicture *)rgbFrame, AV_PIX_FMT_RGB24, codecCtx->width, codecCtx->height);
            sws_scale(swCtx, frame->data, frame->linesize, 0, frame->height, rgbFrame->data, rgbFrame->linesize);

            for (int i = 0; i < codecCtx->height; i++)
            {
                char * data = (char*)rgbFrame->data[0] + i*rgbFrame->linesize[0];
                //process data

            }
            nextFrameFound = true;
            avcodec_close(codecCtx);

        }

        av_free_packet(&pkt);
    }
}
avformat_network_deinit();

我想,使用ffmpeg是一个误解,但我无法自拔:(

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我找到了解决方案:

完成框架后,我不允许删除包裹。 相反,我必须在完成视频后将其删除。

感谢您猜猜我!