我找不到对此的解释。从我阅读的内容来看,Safari 11似乎正在与iOs 11的getUserMedia API配合使用。因此,我不明白此代码有什么问题(我的目标是在实时流中获取QR代码,但此处被阻止):
控制者
function BarcodeReaderQRCtrl($scope) {
/* widget controller */
var c = this;
var constraints = { audio: true, video: { width: 640, height: 480 } };
c.startMedia = function() {
navigator.mediaDevices
.getUserMedia(constraints)
.then(function(mediaStream) {
var video = document.getElementById('idvideo');
video.srcObject = mediaStream;
video.onloadedmetadata = function(e) {
video.play();
};
})
.catch(function(err) {
console.log(err.name + ': ' + err.message);
});
};
}
的HTML
<div>
<a class="btn btn-default" href="#" role="button" ng-click="c.startMedia()">Start</a>
<div>
<video id="idvideo"></video>
</div>
</div>
有什么建议么?
问题不在于您所说的API,这是因为移动浏览器需要一个有效的click
事件才能开始播放视频,因此video.play()
,如果没有用户交互,则无法在移动设备上运行。例如,此帖子对此进行了证明:https : //stackoverflow.com/a/16860922/6053654。我通常要做的是:我仅play
在视频上添加图标(仅在移动设备上)以诱使用户单击,然后绑定video.play()
到此click
事件。听起来很简单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句