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

时间:2015-05-25 23:55:13

标签: javascript html html5 audio

所以我有多个音频文件,其中一些在.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中的行为相同。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

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

至少在Firefox中,如果您只使用数据URI而不是实际文件路径,则可以改善这种情况。这应该可以让你创建/播放更多的Audio对象。但我不喜欢这个解决方案,因为并非所有浏览器都支持数据URI。

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

答案 1 :(得分:0)

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

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

    var myAudioObj = new Audio();

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

    myAudioObj.src =“F expression”;

    myAudioObj.onloadeddata = myAudioObj.play;

    myAudioObj.load();

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