需要你的建议。
我有一个网络服务,可以用wavs生成mp3文件。
转换过程需要时间和我希望访问者能够立即开始收听,而转换仍在继续。
在尝试了html5标签之后,我发现我只能播放mp3文件的一部分,这个文件已经准备就绪了。我的意思是,它似乎并不关心文件自获取以来可能已经增长。
解决这种情况的正确方法是什么?
提前感谢任何信息。
答案 0 :(得分:0)
我相信您可以使用JPlayer来播放它们。其中一个功能是它不会预加载。
编辑: HTML5音频播放器还具有preload属性,该属性可以具有以下值:
" none":不会预取任何内容
"元数据" (不确定它是否是正确的单词):会得到一些基本的东西,如长度,采样率
" auto":将预取整个mp3
答案 1 :(得分:0)
您需要更多地控制服务流程,而不是仅仅将其留给您的网络服务器。
当您的Web服务器响应HTTP请求时,它包含一个Length:
标头,告诉客户端请求的资源有多大(以字节为单位)。您的Web服务器将仅发送请求时可用的长度,因为它不知道该文件即将被附加到。客户端将下载所有这些数据,但从客户端的角度来看,当文件尚未完成编码时,它将下载整个文件。
要解决此问题,您需要将编码器的输出同时传输到文件和客户端。对于客户端的响应数据,根本不要包含Length:
标头。大多数客户端将使用分块编码,允许您符合HTTP / 1.1。一些客户端(早期的Android,旧的浏览器,旧的VLC)无法处理分块编码,只会在数据流入时对其进行流式传输。
如何执行此操作具体取决于您使用服务器端的内容,而您在问题中未指定。就个人而言,我使用Node.js,因为它使这个过程非常容易。您可以直接管道到两个流。请注意,如果使用多管道方法,管道的运行速度最慢。某些流客户端(例如VLC)会降低TCP窗口大小,以避免太多数据必须在客户端进行缓冲。发生这种情况时,您对磁盘的写入将以客户端的速度运行。这对你来说无关紧要,但需要注意的事项。