【问题标题】:Avformat cannot seek to beginning of fileAvformat 无法寻找到文件的开头
【发布时间】: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


    【解决方案1】:

    尝试改用av_seek_frame。阅读here,了解一些关于使用它和四处寻找的技巧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-16
      • 2022-12-17
      • 2017-11-05
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多