我正在用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。。。提前感谢你的帮助。
根据您提供的信息,该错误最可能的原因是您使用的Android设备不支持特定的MP4文件。
MP4是视频和音频蒸汽的容器规范,容器中的视频和音频可能使用不同的编码,因此某些MP4文件可能被支持,而其他文件可能不支持。
这个答案给出了一个使用ffprobe等工具进行调试的示例,特别是查看h.264编码的“配置文件”(基本上是编码中可用的预定义选项集),这在移动设备上通常是一个问题:https://stackoverflow.com/a/47478676/334402
Android上的Chrome有以下问题:
同时调用多个视频上的video.load()
会导致一些加载挂起。
如果您随后检查视频。readyState
属性,您将发现以下内容:
HAVE_ENOUGH_DATA
HAVE_METADATA
我不确定在您的案例中,load
方法被调用的确切位置(源代码更改,或者在调用play
时,或者可能根本没有被调用),但您可能应该尝试一个接一个地加载视频,而不是并行加载。
我正在研究的下一个解决方案是:
希望这能在其他浏览器上运行时避免这个问题。