在 Android Chrome 上选择相机

2023-12-04

我遇到了关于这个主题的几个问题。我正在尝试在运行 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
  });

然后,当我在此应用程序中使用 Three.js 时,我将此 ID 绑定到 Jerome Etienne 三扩展 WebcamGrabbing (https://github.com/jeromeetienne/ Threex.webar):

var videoGrabbing = new THREEx.WebcamGrabbing(selector.value);

然后我不得不修改THREEx.WebcamGrabbing这样类(我删除了不相关的部分):

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 - 面对模式),我想出了一些日志来看看这里发生了什么:

   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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android Chrome 上选择相机 的相关文章

随机推荐

  • 如何使 Doctrine_Expression ( Doctrine 1.2 ) 尝试获取最后 7 天

    我尝试用原则 1 2 进行这个查询 q gt where date gt new Doctrine Expression DATE SUB CURDATE INTERVAL 7 DAY 但它没有给我返回任何结果 任何想法 thanks 它不
  • 如何从字符串中提取浮点数[重复]

    这个问题在这里已经有答案了 我有很多类似的字符串Current Level 13 4 db 我想只提取浮点数 我说的是浮动而不是十进制 因为它有时是整数 RegEx 可以做到这一点还是有更好的方法 如果您的浮点数始终以十进制表示法表示 例如
  • 在 PyQt 中嵌入“图形类型”Seaborn 图(pyqtgraph)

    我正在使用 PyQt 的包装器 pyqtgraph 构建 GUI 应用程序 我希望嵌入一个Seaborn使用其中的绘图MatplotlibWidget 但是 我的问题是 Seaborn 包装方法 例如FacetGrid不接受外部图形句柄 此
  • 正则表达式匹配数字逗号数字

    这就是我现在所拥有的 0 9 0 9 我的问题是我希望能够在逗号前后添加多于一位的数字 例子 1 12 12 12 123 12 12 123 以上所有数字均应有效 我建议如下 d d The 与前一项匹配一次或多次 参考 JavaScri
  • MVC 不应该默认忽略图像吗?

    如果有1 jpg图像 因此它被下载并显示 img src Content Pages 1 jpg 但是 如果没有1 jpg图像在Pages文件夹 所以我收到以下错误 The controller for path Content Pages
  • docker 在主机上安装卷

    我已经成功地能够使用以下命令在具有卷的 docker 容器之间共享文件夹 docker run v host path container path 但我的问题是这和使用有什么区别VOLUMEDockerfile 中的命令 VOLUME p
  • 如何区分 Excel 中两个字符串之间的差异?

    我创建了一份评估 供申请人在 Excel 中填写 我有一把钥匙 我可以在其中复制他们的答案 它会告诉我他们的答案是否与我的钥匙匹配 我想添加一个公式 该公式还可以显示申请人的单元格 B2 和密钥的单元格 A2 之间的差异 以便更容易地看到他
  • 我想在 ajaxToolkit:AjaxFileUpload 开始上传时显示一条消息,有没有办法做到这一点

    我想在 ajaxToolkit AjaxFileUpload 开始上传时收到一条消息 有没有办法做到这一点 默认情况下AjaxFileUpload没有这样的事件 但由于 AjaxControlToolkit 是一个开源库 您可以自己添加它
  • 函数绑定和 clone() 函数 - Jquery

    克隆元素时 我的 keyup 绑定出现问题 这是场景 我有一个像这样的 html 标记 tr class rijbasis td td tr
  • 如何在iphone中进行json解析

    我在我的应用程序中使用 json 解析 这是我的 json 数据如下 回复 成功 错误 错误 code 7 description 您尚未登录 我想要描述的意思是 你还没有登录 我的字符串 那我该怎么做 请帮我 查看博客文章 其中包含示例代
  • 如何将变量的值用作常量?

    我有一个 PHP 网站 它使用基于 定义 方法的语言系统 例如 define question 1 How old are you define question 2 Question 2 define question 3 Questio
  • 如何将单个实体与多个表映射

    我想从两个具有单个实体类的表中获取数据 如何 public class HomeViewModel Key Column candidate ID public int candidateID get set Column first na
  • mysql用户权限影响性能吗?

    我开始对我公司接管的基于网络的系统进行维护 它相当大 至少对于我们的标准而言 系统的设计者创建了一个包含两个用户的数据库 其中一个用户只拥有SELECT特权 另一个也有UPDATE DELETE and INSERT特权 我想知道他们为什么
  • AngularJs 与 iframe

    Why 这个jsfiddle不管用 我无法获得价值videoId 如果我删除ngRoute从模块然后它工作正常 你需要使用ng src像这样 div h1 videoID h1 div and var app angular module
  • 自动 JDBC 领域配置

    我想知道是否可以在没有管理控制台的 Glassfish 3 1 中创建 JDBC 领域配置 例如使用以下命令创建数据源glassfish resources xml 当开发人员下载我的 GIT 存储库时 他们不喜欢配置 Glassfish
  • 在javascript中计算数组中的重复数组

    我有一个数组数组 如下所示 3 4 1 2 3 4 我希望创建一个没有重复项的新数组 并且计算第一个数组中每个元素出现的次数 3 4 2 1 2 1 这是我到目前为止所拥有的 var alreadyAdded 0 dataset forEa
  • 如何在 Android Studio 中找到所有相关的硬编码字符串?

    以前曾有人问过这个问题的一些风格 但我不明白它们的答案对于大型项目来说如何令人满意 我的目标是找到应用程序中需要本地化的任何硬编码字符串 因此我执行以下操作 选择我想要从项目层次结构中运行硬编码字符串检查的目录 导航到分析 gt 按名称运行
  • 在自定义插件中安装谷歌应用程序脚本的触发器

    我对插件还很陌生 在安装触发器和运行相关功能时遇到问题 以下是向工作表添加 1 个 打开时 触发器和 1 个 编辑时 触发器的函数 function addTriggers var sheet SpreadsheetApp getActiv
  • Python请求发送多个cookie

    你会如何使用 python 请求发送多个 cookie 该文档仅给出 url http httpbin org cookies cookies dict cookies are working r requests get url cook
  • 在 Android Chrome 上选择相机

    我遇到了关于这个主题的几个问题 我正在尝试在运行 Chrome 的 Android 设备上选择后置摄像头 所以 经过一番阅读后 var selector document getElementById video source select