提问者:小点点

AndroidChrome:未捕获(在promise)DOMExc0019:加载失败,因为没有找到支持的源


我正在用Javascript开发一个web应用程序,连续播放几个mp4视频。除了在使用Chrome的Android上,一切正常。前三个视频播放得很好,但当我调用视频时,从第四个视频开始。play()方法我在控制台中得到这个错误:“Uncaught(in promise)DOMException:未能加载,因为找不到支持的源。”

我确信所有视频源(blob)都是正确的,因为我可以在另一个选项卡中加载它们。

我生成的视频元素如下所示:

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

我在Android(仅限Chrome)上调用时出现此错误:

v.play();

它给了我一个永远等待的promise。。。提前感谢你的帮助。


共2个答案

匿名用户

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

MP4是视频和音频蒸汽的容器规范,容器中的视频和音频可能使用不同的编码,因此某些MP4文件可能被支持,而其他文件可能不支持。

这个答案给出了一个使用ffprobe等工具进行调试的示例,特别是查看h.264编码的“配置文件”(基本上是编码中可用的预定义选项集),这在移动设备上通常是一个问题:https://stackoverflow.com/a/47478676/334402

匿名用户

Android上的Chrome有以下问题:

同时调用多个视频上的video.load()会导致一些加载挂起。

如果您随后检查视频。readyState属性,您将发现以下内容:

  • 正确加载的视频的值设置为4HAVE_ENOUGH_DATA
  • 没有正确加载的视频将其值设置为1HAVE_METADATA

我不确定在您的案例中,load方法被调用的确切位置(源代码更改,或者在调用play时,或者可能根本没有被调用),但您可能应该尝试一个接一个地加载视频,而不是并行加载。

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

  1. 下载blob

希望这能在其他浏览器上运行时避免这个问题。