android - Android/Ionic 上 navigator.mediaDevices.getUserMedia 的 DOMException
问题描述
我正在尝试通过手机摄像头并使用 WebRTC 流式传输视频元素。我这样做如下(片段):
<video id="yourVideo" autoplay muted playsinline></video>
var yourVideo = document.getElementById("yourVideo");
// ...
navigator.mediaDevices.getUserMedia({audio:false, video:true}).
then(function(stream){
console.log(stream)
yourVideo.srcObject = stream
pc.addStream(stream)
})
.catch(function(error){
console.log(error)
})
这在浏览器中工作正常,我的视频/相机会显示出来。但是,在电话上它返回错误 DOMException。我找不到任何可以解释这一点的信息。
Running it Ionic V1.X
ionic cordova run android
当我运行 navigator.mediaDevices 这就是我所看到的:
可能与许可有关吗?如果是这样,我该如何解决这个问题?
解决方案
您必须先获取设备源,然后尝试获取流,尝试这种方式
var videoElement = document.getElementById("yourVideo");
var videoSrc = undefined;
navigator.mediaDevices.enumerateDevices()
.then(getDevices).then(getStream).catch(handleError);
function getDevices(deviceInfos) {
for (var i = 0; i !== deviceInfos.length; ++i) {
var deviceInfo = deviceInfos[i];
if (deviceInfo.kind === 'videoinput') {
videoSrc = deviceInfo.deviceId;
break;
}
}
}
function getStream() {
navigator.mediaDevices.getUserMedia({
video: {
deviceId: {
exact: videoSrc
}
}
}).
then(gotStream).catch(handleError);
}
function gotStream(stream) {
videoElement.srcObject = stream;
}
function handleError(error) {
console.log('Error: ', error);
}
推荐阅读
- python - 如何将带有外键的 .csv 表导入 django 数据库
- php - aes-256-cbc encryption decryption with initial vector in nodejs
- android - 使用键盘的自动更正部分获取软键盘高度
- javascript - 即使在从 ts 编译到 js 之后如何保持类型安全
- docker - Kubernetes ImagePullBackOff
- java - 将 JSON 对象数组转换为列表
- python - 在 Flask 中哪个 arg 覆盖 request.values 中的另一个?(获取或发布)
- python - 根据元组的第二项从元组列表中删除列表项
- jakarta-mail - Java mail api 1.5.5 奇怪的行为
- ios - Crashlytics/Answers:是否有可能以编程方式获取 Answers 收集的最后 x 个事件?