所以我有多个音频文件,其中一些在.ogg3。
我有一个变量
var music = [new Audio("audio/song1.mp3"),
new Audio("audio/song2.mp3"),
new Audio("audio/song3.mp3"),
new Audio("audio/song4.mp3"),
new Audio("audio/song5.mp3"),
new Audio("audio/song6.mp3"),
new Audio("audio/song7.ogg")
];
我循环播放歌曲,有时他们加载播放得很好,有时他们会收到错误Media resource http://url/audio/file.mp3 could not be decoded.
每首歌都在某个时刻起作用,而且每首歌都在某些时候没有奏效。平均来说,.5首歌曲没有被解码,也没有播放每次刷新页面(重启服务器似乎没有效果)。至少有0首歌曲没有被解码,并且最多有3首歌曲没有被解码。
我循环播放数组并在每个音频上调用load()
,然后在当前正在运行的音频上调用pause()
,在下一个音频调用play()
。我在play()
上收到错误。
Firefox和Chrome中的行为相同。
有什么想法吗?
答案 0 :(得分:2)
当我尝试在同一网站中创建和/或播放许多Audio对象时,我遇到了同样的问题。特别是在Firefox中。我的计算机(安装了Apache以提供网站和音频文件)只有2 GB的RAM。
音频文件正常,一开始就可以很好地与浏览器配合使用。但似乎内存存在问题,并且当某个点到达时,浏览器只是抛出该错误并且不会解码任何Audio对象,除非你让它花一些时间来呼吸并恢复其内存。要增加可以在失败之前创建/播放的音频文件的数量,可以在一个“新音频(...)”(和/或对play()方法的调用)和另一个之间添加一些时间。但是这个技巧只是为了添加/播放更多文件,因为当你达到创建/播放一定数量的音频对象时,你仍会遇到同样的问题。
至少在Firefox中,如果您只使用数据URI而不是实际文件路径,则可以改善这种情况。这应该可以让你创建/播放更多的Audio对象。但我不喜欢这个解决方案,因为并非所有浏览器都支持数据URI。
如果有人有更好的解决方案,我会很高兴听到它。我也在等待更好的答案,因为我有同样的问题,我无法通过互联网找到任何解决方案。
答案 1 :(得分:0)
基于我的研究,似乎发生了这个错误,因为在媒体完全加载之前调用了.play()方法。我能够使用这种方法解决问题:
调用.load()方法加载媒体文件
var myAudioObj = new Audio();
//或myAudioObj = document.getElementById(“myAudioDiv”);
myAudioObj.src =“F expression”;
myAudioObj.onloadeddata = myAudioObj.play;
myAudioObj.load();
通过使用此方法,媒体文件可以在完全加载后开始播放。您还可以尝试使用“oncanplay”事件,该事件在浏览器加载了足够的文件以便开始播放时发生。