Javascript 媒体资源http://url/audio/file.mp3 有时无法解码

Javascript 媒体资源http://url/audio/file.mp3 有时无法解码,javascript,html,audio,Javascript,Html,Audio,所以我有多个音频文件,一些在.ogg中,一些在.mp3中 我有一个变量 var music=[新音频(“音频/歌曲1.mp3”), 新音频(“音频/歌曲2.mp3”), 新音频(“音频/歌曲3.mp3”), 新音频(“音频/歌曲4.mp3”), 新音频(“音频/歌曲5.mp3”), 新音频(“音频/歌曲6.mp3”), 新音频(“音频/歌曲7.ogg”) ]; 我循环播放这些歌曲,有时它们加载并播放得很好,有时它们会收到错误媒体资源http://url/audio/file.mp3 无法解码。

所以我有多个音频文件,一些在.ogg中,一些在.mp3中

我有一个变量

var music=[新音频(“音频/歌曲1.mp3”),
新音频(“音频/歌曲2.mp3”),
新音频(“音频/歌曲3.mp3”),
新音频(“音频/歌曲4.mp3”),
新音频(“音频/歌曲5.mp3”),
新音频(“音频/歌曲6.mp3”),
新音频(“音频/歌曲7.ogg”)
];

我循环播放这些歌曲,有时它们加载并播放得很好,有时它们会收到错误
媒体资源http://url/audio/file.mp3 无法解码。

每首歌都在某个时刻起作用,而每首歌都在某个时刻不起作用。平均来说,.5首歌曲没有被解码,也不会在每次刷新页面时播放(重启服务器似乎没有效果)。至少有0首歌曲未解码,最多有3首歌曲未解码

我在数组中循环,对每个音频调用
load()
,然后对当前运行的音频调用
pause()
,对下一个音频调用
play()
。我在
play()
上得到错误

Firefox和Chrome中的行为相同


有什么想法吗?

当我试图在同一个网站上创建和/或播放许多音频对象时,我遇到了同样的问题。特别是在Firefox中。我的计算机(安装了Apache以服务于网站和音频文件)只有2GB的RAM

音频文件正常,开始时可以很好地使用浏览器播放。但似乎内存有问题,当到达某个点时,浏览器会抛出该错误,并且不会解码任何音频对象,除非您给它一些时间呼吸和恢复其内存。要在失败之前增加可以创建/播放的音频文件的数量,可以在一个“新音频(…)”(和/或对play()方法的调用)和另一个之间添加一些时间。但是这个技巧只是为了添加/播放更多的文件,因为在以后的某个时候,当您创建/播放一定数量的音频对象时,您仍然会遇到相同的问题

至少在Firefox中,如果您坚持使用数据URI而不是真正的文件路径,您可以改善这种情况。这将允许您创建/播放更多音频对象。但我不喜欢这个解决方案,因为不是所有浏览器都支持数据URI


如果有人有更好的解决办法,我会很高兴听到的。我也在等待一个更好的答案,因为我也有同样的问题,我在互联网上找不到任何解决方案。

根据我的研究,似乎发生此错误是因为在媒体完全加载之前调用了.play()方法。我能够使用这种方法解决问题:

  • 定义音频对象
  • 定义媒体文件的源
  • 将“onloadeddata”事件设置为在文件加载完成后开始播放媒体文件
  • 调用.load()方法加载媒体文件

    var myAudioObj=新音频()

    //或者myAudioObj=document.getElementById(“myAudioDiv”)

    myAudioObj.src=“”

    myAudioObj.onloadeddata=myAudioObj.play

    myaudiobj.load()

  • 通过使用这种方法,媒体文件可以在完全加载后开始播放。您还可以尝试使用“oncanplay”事件,该事件在浏览器加载足够的文件以开始播放时发生