我在这个问题上遇到了几个问题。我正在尝试选择运行Chrome的Android设备上的后置摄像头。
因此,在阅读之后:
var selector = document.getElementById('video-source-selector');
navigator.mediaDevices.enumerateDevices()
.then(function(devices) {
var videoDevices = devices.map(function (item) {
if(item.kind === 'videoinput'){
return item;
}
}).filter(function( element ) {
return element !== undefined;
});
var max = videoDevices.length;
videoDevices.forEach(function(device, i) {
var html = '';
var div = document.createElement('div');
if(i === max-1){ // last element reached
html += '<option value="'+device.deviceId+'" selected>'+ device.label +'</option>';
}
else {
html += '<option value="'+device.deviceId+'">'+ device.label +'</option>';
}
div.innerHTML = html;
selector.appendChild(div.childNodes[0]);
console.log(device.kind + ": " + device.label +
" id = " + device.deviceId);
});
})
.catch(function(err) {
console.log(err.name + ": " + err.message);
});
selector.addEventListener("change", function(){
console.log(selector.value); // Works as supposed : returns the ID of the selected device
});
然后,因为我用了三个。在这个应用程序中,我将这个ID绑定到Jerome Etienne三分机网络摄像头抓取(https://github.com/jeromeetienne/threex.webar):
var videoGrabbing = new THREEx.WebcamGrabbing(selector.value);
然后我不得不修改3X。网络摄像头抓取以这种方式分类(我删除了不相关的部分):
THREEx.WebcamGrabbing = function(sourceDeviceId){
...
console.log('webcamgrabbing : ', sourceDeviceId); // returns the expected ID
var constraints = {
video: {
optional: [{
sourceId: sourceDeviceId
}]
}
}
// try to get user media
navigator.getUserMedia( constraints, function(stream){
domElement.src = URL.createObjectURL(stream);
}, function(error) {
console.error("Cant getUserMedia()! due to ", error);
});
...
}
不过,Android上的Chrome仍然为我提供了面部摄像头流,无论我选择什么设备。。。
我错过了什么?
编辑:基于这个主题(GetUserMedia-facingmode),我想出了一些日志来看看这里发生了什么:
var constraints = {
audio: false,
video: { facingMode: { exact: "environment" } }
}
console.log('Try to get stream with constraints:', constraints);
navigator.getUserMedia( constraints, function(stream){
var videoTracks = stream.getVideoTracks();
console.log('Got stream with constraints:', constraints); // Ok
console.log('Using video device: ' + videoTracks[0].label); // > Using video device: camera 0, facing back
for(var i = 0; i < videoTracks.length; i++){
console.log('Found video device with contraints : ', videoTracks[i].label); // Found video device with contraints : camera 0, facing back
}
domElement.src = URL.createObjectURL(stream);
}, function(error) {
console.error("Cant getUserMedia()! due to ", error);
});
在chrome上选择后置摄像头的另一种方法是使用enumerateDevices方法。
首先获取所有视频输入id:
navigator.mediaDevices.enumerateDevices().then(function(devices) {
devices.forEach(function(device) {
if(device.kind=="videoinput"){
//If device is a video input add to array.
}
});
然后,阵列的第一个元素将包含前摄像头的id,第二个元素将包含后摄像头的id。
最后输入您要使用的摄像机的id
navigator.getUserMedia({audio: false, video: { sourceId: VideoId } }, successCallback, errorCallback);
我正在使用导航器。媒体设备。getUserMedia,从web浏览器中的摄像头设备打开MediaStream。我的应用程序想在WebAssembly中进行一些实时图像处理,为此,我需要直接从摄像机提供实时图像流。 我的解决方案在大多数设备上都运行得很好,但是,我在具有多个后置摄像头的设备上遇到了一个问题,例如GoogleChromeAndroid上的三星Galaxy S10。问题是以下片段: 总是
我必须做一个按钮,将提供从画廊或从相机选择图像。 结果是有效的。如果我从图库中选择,图像查看器将查看它,如果我选择从相机拍照,它也有效。问题是,在我的show FileChooser()方法中,我所有的意图都在同时运行,所以当我从图库中选择时,相机仍然运行。我选择相机,图库也在打开。我认为我应该在切换案例模式下实现我的代码,但我不明白如何做到这一点。请帮助解决我的初学者问题。
表情测试 图片转文字 相框 拍摄图片
摄像头用于采集图像和影像信息,通过模块间的组合完成各种创意活动。 净重量:8.1g 体积:24×24×22mm 参数 分辨率:1280×720 像素大小:3.4um×3.4um 最大图像传输速率:全尺寸 @ 30fps 视场角:100° 镜片结构:4G+IR 焦比:2.97 有效焦距:2.4mm 功耗:100uA(待机)~240mW(工作) 电源:USB总线电源 抗跌落能力:1m 工作温度:-30
本文向大家介绍详解HTML5 使用video标签实现选择摄像头功能,包括了详解HTML5 使用video标签实现选择摄像头功能的使用技巧和注意事项,需要的朋友参考一下 详解HTML5 使用video标签实现选择摄像头功能 1. html 2. javascript 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
我有一个按钮,它向用户提供选择,他是否想要从画廊或相机的图像。当用户从图库拍摄图像时,我能够成功地将图像上传到Firebase存储,但是当用户选择相机时,我无法将图像上传到存储。这是用户选择相机时的onActivityResult代码 它将图像上传到我的imageview,但给我错误提示 当我尝试上载到存储时 我在stack overflow上遇到了一个类似的问题。 我认为公认的答案是错误的,因为