1

我发现使用 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 版)。

谢谢!

4

1 回答 1

1

Seems like it wasn't supported at all in 0.6 because there was no FLAC parser in that version. I've now taken the FLAC parser from 0.8 and merged it with version 0.6. So it's working fine now.

于 2013-07-21T10:52:29.497 回答