gpt4 book ai didi

javascript - 如何在 Android 上将 getUserMedia 与 Cordova 一起使用?

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:44 24 4
gpt4 key购买 nike

使用 getUserMedia 在视频元素中预览相机输入在 Chrome 中工作得很好,但一旦我在 Cordova 容器中运行相同的代码就会中断。知道是什么原因造成的吗?

Example code.

添加了一个使用 Mozilla gUM polyfill 的示例:

(()=>{
var promisifiedOldGUM = function(constraints) {

var getUserMedia = (
navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia
);

if(!getUserMedia) {
return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
}

return new Promise(function(resolve, reject) {
getUserMedia.call(navigator, constraints, resolve, reject);
});

}

if(navigator.mediaDevices === undefined) {
navigator.mediaDevices = {};
}

if(navigator.mediaDevices.getUserMedia === undefined) {
navigator.mediaDevices.getUserMedia = promisifiedOldGUM;
}





function initCamera() {
const constraints = { audio: false, video: { width: 1280, height: 720 } };
const videoElement = document.createElement('video');
videoElement.style.width = '100px';
videoElement.style.height = '100px';
document.body.appendChild(videoElement);

navigator.mediaDevices
.getUserMedia(constraints)
.then(
stream => {
videoElement.src = window.URL.createObjectURL(stream);
videoElement.onloadedmetadata = () => {
videoElement.play();
};
}
)
.catch(
err => {
console.log('The following error occurred: ' + err.message)
}
);
}

initCamera();

})()

(请注意,新的和已弃用的 gUM API 都不起作用)。这导致空的黑色 <video>元素。不会触发任何错误。我最初假设此问题与 AndroidManifest.xml 权限和 CSP 有关,但修复它们没有任何区别。

CSP 配置:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' android-webview-video-poster: data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src * blob:">

AndroidManifest.xml(功能和权限)

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

最佳答案

抱歉,信誉不足无法发表评论。我没有阅读您的代码,因此无法对其发表评论。

我在视频元素上得到的只是一个黑框。

我的问题已由 (Android 7.0) 解决:

Settings -> Apps -> [My App] -> Permissions -> Camera (allow)

关于javascript - 如何在 Android 上将 getUserMedia 与 Cordova 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38743566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com