对于我的一个项目,我正在考虑为互联网广播电台开发音频档案。该档案将按日期/时间编制索引并可以解决。
例如,服务器将连接到流(通常以MP3编码),并保存流数据。客户端可以连接到此服务器并请求从2011-07-05 15:58:30
到2011-07-05 15:59:37
的音频。服务器会将音频数据返回给客户端进行播放。
我最初的想法是将数据保存到1分钟的原始MP3数据块到磁盘,并从数据库中引用这些文件。服务器对于流/文件格式是愚蠢的,并且不会理解mpeg帧。它只是将数据传递给客户端,将块线性地分开发送。客户端可以同步到流。这与互联网无线电服务器的运行方式没有什么不同。 SHOUTcast服务器只是输出数据,逐字节,从编码器发送给它们。当客户端连接时,无论数据是否在MP3帧上结束,都会发送数据。由客户端来同步。
我想知道是否有更好的方法,最大限度地提高与客户端和音频格式的兼容性。关于如何解决这个问题的任何想法?
我唯一能想到的就是将MP3解码为原始PCM音频,并在需要时根据需要重新编码。由于需要磁盘空间,以及重新编码时质量下降,我宁愿不去这条路线。
这个问题与语言无关,但如果它有用,我可能会用PHP作为数据库在PHP中实现一个解决方案。
答案 0 :(得分:1)
你不必担心这个,因为我通过shoutcast访问的所有mp3都是Constant Bitrate。你不必索引它吗?我有POC项目,在5分钟的块中存档,然后使用PHP将这些文件组合并通过shoutcast将其伪流化到winamp。它奏效了!
由于您正在使用mp3,您可以假设(并且您将正确地假设)捕获文件的密度是线性的,因此要访问60秒文件中的30秒,您应该在中间搜索。由于mp3解码器足够强大,因此您无需在此处跟踪帧。
AACplus,完全不同的故事。它是固有的VBR。