我在 CDN 上有一堆音频文件。这些是并行的 mp3 和 ogg vorbises。这些文件每个都值得播放大约一小时。我需要从这些文件中提取任意部分:给我一个文件名(我可以选择是使用 mp3 还是 ogg 版本)和两个时间戳,并且我需要恰好在给定时间位置之间的音频。我不想下载整个文件,所以我想到了使用 Range http 标头。
我完全控制了音频文件,所以我以固定比特率对它们进行编码,以便能够估计我应该达到哪些字节。然而,这两种格式都使用帧(或 vorbis 的情况下的页面),必须以原子方式解码。
我编写的程序是用 Perl 编写的。我尝试下载我认为包含给定窗口的文件的一部分,然后使用 Audio::Mad 和 Ogg::Vorbis::Decoder 来解析音频文件片段。但是,两者似乎都无法处理片段,只有在我提供完整文件时才会成功。
所以我的问题是:如何在不下载整个文件的情况下获得音频文件的准确跨度?