Android Chrome:未捕获(在承诺中)DOMException:无法加载,因为找不到支持的源

时间:2018-01-16 16:12:25

标签: javascript android html5 google-chrome video

我正在使用Javascript中的Web应用程序连续播放几个mp4视频。一切正常,但在Android上使用Chrome。前三个视频播放正常但是从第四个调用video.play()方法时我在控制台中出现此错误:"未捕获(在承诺中)DOMException:由于未找到支持的源,因此无法加载。 #34;

我确信所有视频源(blob)都是正确的,因为我可以将它们全部加载到另一个标签中。

我正在生成我的视频元素:

generate_video_element = function(src) {
  var v = document.createElement('video');
  v.src = src
  v.type = "video/mp4";
  return v;
};

我在调用时遇到此错误(仅限Chrome):

v.play();

它给我一个永远悬而未决的承诺...... 在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

根据您提供的信息,该错误的最可能原因是您正在使用的Android设备不支持特定的MP4文件。

MP4是视频和音频流的“容器”规范,容器中的视频和音频可能使用不同的编码,因此某些mp4文件可能受支持,而其他文件可能不在给定的设备或播放器上。

这个答案给出了一个使用像ffprobe这样的工具进行调试的例子,特别是h.264编码的'profile'(本质上是编码中可用的预定义选项集),这通常是一个问题。移动设备:https://stackoverflow.com/a/47478676/334402

答案 1 :(得分:0)

Android上的Chrome存在以下问题:

同时在多个视频上调用video.load()会导致部分加载挂起。

如果您再检查video.readyState属性,您会发现以下内容:

  • 正确加载的视频的值设置为4 HAVE_ENOUGH_DATA
  • 未正确加载的视频的值设置为1 HAVE_METADATA

我不确定在你的情况下调用load方法究竟在哪里(源代码更改,或者在调用play时,或者可能根本没有被调用),但是你应该可能会尝试将视频一个接一个地加载而不是并行加载。

我正在研究的下一个解决方案:

  1. 下载blob
  2. 设置video.src并致电video.load()
  3. 等待video.oncanplaythrough事件开始加载下一个
  4. 希望这可以避免这个问题,同时还可以在其他浏览器上工作。