我在 iPhone 上使用相机 (getUserMedia) 时遇到问题。当在浏览器(safari)中使用它时,它工作得很好,但是一旦我将 pwa 添加到主屏幕,它就会停止工作。
我的代码设置:
<head>
<link rel="manifest" href="manifest.json">
</head>
<body>
<video id="video" width="200" height="200" autoplay playsinline muted crossorigin></video>
<script>
const video = document.getElementById('video');
const events = [
'play', 'waiting', 'loadstart', 'progress', 'suspend',
'durationchange', 'loadedmetadata', 'loadeddata',
'canplay', 'playing', 'canplaythrough', 'timeupdate'
];
events.forEach(e => {
video.addEventListener(e, () => {
console.log(`${e} event fired`);
});
});
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({ video: true })
.then(function(stream) {
video.srcObject = stream;
video.onloadedmetadata = () => {
video.play();
};
})
.catch(function(error) {
console.log("Something went wrong!", error);
});
}
</script>
</body>
我的清单.json:
{ "name": "Test-App", "display": "standalone",...
如果我删除
"display:": "standalone"
(或全屏,没关系),视频流会再次工作...
我尝试查看视频元素正在触发哪些事件,如果 pwa 打开,则仅触发加载启动、进度和挂起(按顺序)事件。如果在浏览器中打开它,则会触发每个预期事件。没有错误,什么都没有......
根据您测试的 iOS 版本,您的问题可能与 WebKit 中的此错误有关:在 PWA 中,HTML 视频元素可能无法播放来自“getUserMedia()”的流
虽然我自己没有测试过,但似乎在iOS 17+中已经解决了