我有一个代码,(应该)使用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是一个误解,但我无法自拔:(
感谢您的帮助!
答案 0 :(得分:1)
我找到了解决方案:
完成框架后,我不允许删除包裹。 相反,我必须在完成视频后将其删除。
感谢您猜猜我!