Avformat无法寻找文件的开头

时间:2014-03-14 21:52:13

标签: libavcodec libav libavformat

我需要在H.264容器中快速搜索MP4个编码视频流。我使用libav来解码帧,所以我偶然发现了avformat_seek_file()方法。

我的问题是,假设H.264流以关键帧开头,当我寻求时间戳0(无论time_base)时,我应该处于流的开始。但我不是。我通常只需要几秒钟的视频。此外,如果我寻求,例如10秒,我通常会大约12左右。关键帧是否可能如此“罕见”?似乎AVSEEK_FLAG_ANY对搜索结果没有影响。在多个FullHD H.264 MP4视频中进行了测试。

代码:

unsigned long seekTo = 0;
//Doesen´t actually matter for 0 since it will be also 0
seekTo = av_rescale_q(seekTo, AVRational{1, AV_TIME_BASE}, pFormatCtx->streams[videoStream]->time_base);
int result = avformat_seek_file(pFormatCtx, videoStream, INT_FAST64_MIN, seekTo, seekTo, AVSEEK_FLAG_ANY);
avcodec_flush_buffers(pCodecCtx);

1 个答案:

答案 0 :(得分:0)

请尝试使用av_seek_frame。阅读here了解一些关于使用它并寻求解决的问题。