【发布时间】:2014-04-20 10:00:27
【问题描述】:
我需要通过H.264 容器中的H.264 编码视频流快速寻找。我正在使用 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);
【问题讨论】:
标签: libavcodec libav libavformat