我发现使用av_seek_frame()查找FLAC文件并不能真正与ffmpeg一起工作。将FLAC解码为原始PCM运行良好,但是一旦我调用了av_seek_frame(),下一次调用av_read_frame()将返回-1,即文件结束。
我偷看了一下源代码,发现了以下原因: FLAC中的seeking是在libavformat/utils.c中的av_seek_frame_generic()函数中实现的。这个函数主要做的是在循环中调用av_read_frame(),并对照所需的查找位置检查数据包的时间戳。
它不适用于FLAC的原因是FLAC包不包含任何时间戳,因为FLAC解码器使用某种通用读取器,该读取器总是从流中提取1024字节的硬编码大小的包。
我使用的不是最新版本的ffpmeg,而是一个旧版本,但由于FLAC播放效果很好,我不想切换到最新版本,因为这对我来说意味着重要的工作,因为我已经根据自己的特定需求调整了这个旧版本的ffmpeg。这就是为什么我想问一个问题,如果有人知道我如何在这个旧版本的ffmpeg中修复FLAC查找(具体地说,它是2010年的0.6版)。
谢谢!
发布于 2013-07-21 18:52:29
似乎在0.6中根本不支持它,因为在那个版本中没有FLAC解析器。我现在已经从0.8版本中获取了FLAC解析器,并将其与版本0.6合并。所以它现在运行得很好。
https://stackoverflow.com/questions/17765667
复制相似问题