reactjs - 相机在 android ionic react 应用程序中不起作用
问题描述
我有这个代码,它在 PC 浏览器中工作,但在 android 中它不会打开相机。代码是使用 React 组件在 ionic 框架中编写的。打开相机的主要组件如下:
import React, { useRef, useState,useEffect } from 'react';
import './index.scss';
const CAPTURE_OPTIONS = {
audio: true,
video: { facingMode: "user" }
};
const Camera: React.FC = () => {
const videoRef = useRef<any>(null);
const [mediaStream, setMediaStream] = useState<any>(null);
useEffect(() => {
async function enableStream() {
try {
const stream = await navigator.mediaDevices.getUserMedia(CAPTURE_OPTIONS);
setMediaStream(stream);
} catch (err) {
// Removed for brevity
}
}
if (!mediaStream) {
enableStream();
} else {
return function cleanup() {
mediaStream.getTracks().forEach((track: any) => {
track.stop();
});
}
}
}, [mediaStream, CAPTURE_OPTIONS]);
if (mediaStream && videoRef.current && !videoRef.current.srcObject) {
videoRef.current.srcObject = mediaStream;
}
const handleCanPlay = () => {
videoRef.current.play();
}
return (
<div>
<video ref={videoRef} onCanPlay={handleCanPlay} autoPlay playsInline loop muted className={"camera"} />
</div>
);
}
export default Camera;
有谁知道我在android电容器上运行代码时遇到了这个问题,当我运行时ionic capacitor run android --livereload --external
我无法得到如下所示的问题:
解决方案
使用 webrtc 和 navigator.mediaDevices.getUserMedia() 时,您需要确保使用的是 adapter.js 文件。
您可以使用https://www.npmjs.com/package/webrtc-adapter ,或从 - https://github.com/webrtc/adapter/tree/master/release复制文件。如果你想要它全局把它放在你的离子项目的公共文件夹中。
推荐阅读
- jquery - 每当我尝试将浏览器窗口宽度调整为大于 600 像素时,导航栏右侧的菜单就会隐藏
- winforms - Winforms VLC Player 流媒体图像失真
- forms - Embed Form 和 EntityType 在 Embed Form 中选择关联实体
- c++ - 为什么 pow() 函数没有给出正确的结果来打印两个间隔之间的 armstrong 数,但 num*num*num 在 C++ 中给出?
- docker - 无法登录到私有 docker 注册表,它显示来自守护进程的错误响应:502 Bad Gateway
- biztalk - 无法在 BizTalk 逻辑应用适配器中配置
- html - 如何更正 CSS 样式的元素在按钮上不起作用
- python - 有没有办法在 tf.data 管道中使用 tf.keras.model.predict ?
- laravel - 使用 Laravel Validator 进行内联验证
- android - 如何获取当前在 imageview (Kotlin) 中的图像名称?