我正在使用
HTML5视频标记API来播放网络摄像头中的视频,如下所示:
videoElement = element.find('video')[0];
navigator.getUserMedia(constraints, function(stream) {
if (navigator.mediaDevices.getUserMedia) {
videoElement.mozSrcObject = stream;
} else {
var vendorURL = window.URL || window.webkitURL;
videoElement.src = window.URL.createObjectURL(stream);
}
videoElement.play();
最近我开始有一个错误:未捕获(在promise中)DOMException:该元素没有支持的源.
还有这个功能链接 – https://www.chromestatus.com/feature/4765305641369600是关于Deprecate MediaStreamTrack.getSources()的,有利于MediaDevices.enumerateDevices().但是,如果我从控制台运行它,则MediaStreamTrack.getSources是未定义的.不确定这是否相关.
在尝试解决这个问题时,我发现了这个实现描述 – https://developers.google.com/web/updates/2016/03/play-returns-promise?hl=en – 它声明现在video.play()返回一个Promise:
var playPromise = document.querySelector('video').play();
// In browsers that don’t yet support this functionality,
// playPromise won’t be defined.
if (playPromise !== undefined) {
playPromise.then(function() {
// Automatic playback started!
}).catch(function(error) {
// Automatic playback failed.
// Show a UI element to let the user manually start playback.
});
}
测试此代码始终属于catch部分 – 自动播放失败.
然而,这个演示对我来说很好 – https://googlechrome.github.io/samples/play-return-promise/但它是一个< audio>标签.
我使用的是Chrome v.53.在当前的Firefox中,旧代码工作正常.
最佳答案 要获得正确的承诺,您需要等到视频数据加载完毕.所以
video.addEventListener('loadeddata', function() {
playPromise = video.play();
});
video.load();