【问题标题】:Play audio of wav file with increasing file size随着文件大小的增加播放 wav 文件的音频
【发布时间】:2015-10-22 23:10:30
【问题描述】:

我通过以下方式通过 JavaScript 播放音频:

this.audio = new Audio();
this.audio.src = "path/to/audio.wav";
this.audio.play();

服务器上的文件audio.wav 会随着时间的推移而变大,我希望音频继续播放而不会中断。但是,一旦达到初始文件大小,它将停止播放。

我该怎么做才能让它无缝播放?

【问题讨论】:

    标签: javascript audio


    【解决方案1】:

    我很确定这在很大程度上取决于您的服务器配置。

    WAVE 格式(几乎所有类型,包括 Microsoft 和 RIFF)在数据块顶部都有一个数据大小字段。这是由audio 元素读取的,尤其是当preload 属性设置为空白时,autometadata

    因此,请求此类文件的网络浏览器可能只请求那么多字节,然后关闭连接。 the API description 中没有任何内容表示它将读取直到文件实际结束。

    不过,我想到的一件事是注册“结束”事件。然后,根据this answer,您应该可以重新开始游戏,寻找您结束的位置。服务器应该从您需要的位置开始流式传输数据。如果它不能直接工作,我会尝试使用preload="metadata" 重新插入音频节点,以便它可以读取更新的文件大小。

    另一个可能更简单的事情是将文件大小修改为大得离谱的东西。运气好的话,它可能会“正常工作”。

    【讨论】:

    • 谢谢,看来它比我最初想象的要多得多。对我来说,设置currentTime 并没有真正起作用。可能是因为 Apache 返回的字节范围已经扩展到总长度,所以我什至无法将currentTime 设置为比第一个片段的长度更高的值。我可能需要“教”Apache 将响应视为不完整,即使它提供了完整的文件?
    • @basilikum 这是我回答的最后一段。
    • 是的。我的理解是,我应该能够以某种方式将 Apache 的 Content-Range 标头更改为具有未知(或非常大)的总长度。实际上,我在 Serverfault 上发布了一个关于此的问题 (serverfault.com/q/731555/180374)。它似乎不起作用(标题只是没有改变)。您对我如何实现这一点有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    相关资源
    最近更新 更多