在网页上播放不断增长的mp3文件

时间:2014-04-12 10:29:43

标签: html5 flash mp3 html5-audio audio-streaming

需要你的建议。

我有一个网络服务,可以用wavs生成mp3文件。

转换过程需要时间和我希望访问者能够立即开始收听,而转换仍在继续。

在尝试了html5标签之后,我发现我只能播放mp3文件的一部分,这个文件已经准备就绪了。我的意思是,它似乎并不关心文件自获取以来可能已经增长。

解决这种情况的正确方法是什么?

提前感谢任何信息。

2 个答案:

答案 0 :(得分:0)

我相信您可以使用JPlayer来播放它们。其中一个功能是它不会预加载。

编辑: HTML5音频播放器还具有preload属性,该属性可以具有以下值:

" none":不会预取任何内容

"元数据" (不确定它是否是正确的单词):会得到一些基本的东西,如长度,采样率

" auto":将预取整个mp3

答案 1 :(得分:0)

您需要更多地控制服务流程,而不是仅仅将其留给您的网络服务器。

当您的Web服务器响应HTTP请求时,它包含一个Length:标头,告诉客户端请求的资源有多大(以字节为单位)。您的Web服务器将仅发送请求时可用的长度,因为它不知道该文件即将被附加到。客户端将下载所有这些数据,但从客户端的角度来看,当文件尚未完成编码时,它将下载整个文件。

要解决此问题,您需要将编码器的输出同时传输到文件和客户端。对于客户端的响应数据,根本不要包含Length:标头。大多数客户端将使用分块编码,允许您符合HTTP / 1.1。一些客户端(早期的Android,旧的浏览器,旧的VLC)无法处理分块编码,只会在数据流入时对其进行流式传输。

如何执行此操作具体取决于您使用服务器端的内容,而您在问题中未指定。就个人而言,我使用Node.js,因为它使这个过程非常容易。您可以直接管道到两个流。请注意,如果使用多管道方法,管道的运行速度最慢。某些流客户端(例如VLC)会降低TCP窗口大小,以避免太多数据必须在客户端进行缓冲。发生这种情况时,您对磁盘的写入将以客户端的速度运行。这对你来说无关紧要,但需要注意的事项。