我发现使用 av_seek_frame() 查找 FLAC 文件并不适用于 ffmpeg。将 FLAC 解码为原始 PCM 工作正常,但一旦我调用了 av_seek_frame(),下一次调用 av_read_frame() 将返回 -1,即文件结束。
我查看了源代码,发现了以下原因:FLAC 中的 seek 是在 libavformat/utils.c 中的 av_seek_frame_generic() 函数中实现的。该函数的基本作用是在循环中调用 av_read_frame() 并根据所需的查找位置检查数据包时间戳。
它不适用于 FLAC 的原因是 FLAC 数据包不包含任何时间戳,因为 FLAC 解码器使用一些通用读取器,该读取器总是从流中提取硬编码大小为 1024 字节的数据包。
我没有使用最新版本的 ffpmeg,而是旧版本,但由于 FLAC 播放效果很好,我不想切换到最新版本,因为这对我来说意味着重要的工作,因为我已经适应了这个旧版本的 ffmpeg根据我的具体需求。这就是为什么我想问这个问题,如果有人知道如何在这个旧版本的 ffmpeg 中修复 FLAC 搜索(具体来说,它是 2010 年的 0.6 版)。
谢谢!