NodeJS - 在 Android/iPhone 移动设备中打开和关闭 Tourch/手电筒

2024-02-17

我在 nodeJS 中有一个项目,我在系统和移动设备上使用它。

我需要执行以下步骤 - 1.添加手电筒开关按钮。 2. 仅当该功能支持时,才会显示该按钮 手机和浏览器 3. 灯应默认关闭

当我使用下面提到的代码时,它从我的系统启用我的网络摄像头闪光灯,但它在我的手机上不起作用。

闪光灯开/关

//Test browser support
const SUPPORTS_MEDIA_DEVICES = 'mediaDevices' in navigator;

if (SUPPORTS_MEDIA_DEVICES) {
  //Get the environment camera (usually the second one)
  navigator.mediaDevices.enumerateDevices().then(devices => {

    const cameras = devices.filter((device) => device.kind === 'videoinput');

    if (cameras.length === 0) {
      throw 'No camera found on this device.';
    }
    const camera = cameras[cameras.length - 1];

    // Create stream and get video track
    navigator.mediaDevices.getUserMedia({
      video: true
    }).then(stream => {
      const track = stream.getVideoTracks()[0];
      track.applyConstraints({
        advanced: [{torch: false}]
      });
      //Create image capture object and get camera capabilities
      const imageCapture = new ImageCapture(track)
      const photoCapabilities = imageCapture.getPhotoCapabilities().then(() => {

        //todo: check if camera has a torch

        //let there be light!
        const btn = document.querySelector('.switch');
        btn.addEventListener('click', function(){
            isTorchOn = !isTorchOn;
          track.applyConstraints({
            advanced: [{torch: isTorchOn}]
          });
        });
      });
    });
  });
  //The light will be on as long the track exists
}

有人能提出解决方案吗?


对于网络 RTC, 使用它来检查设备上的 Torch 支持

var imageCapture = new ImageCapture(videoTrack);

var photoCapability = imageCapture.getPhotoCapabilities();

使用它在浏览器中检查 Torch 支持

var mediaCapabilities = navigator.mediaDevices.getSupportedConstraints ()
 
 if (mediaCapabilities.torch && photoCapability.fillLightMode.length > 0){
          document.getElementById('torchButton').classList.remove("hidden");
          document.getElementById('torchButton').classList.add("block");
          console.log("Torch is enabled");
      }

然后基于函数调用

function startTorch(){
    var torchCheckBox = document.getElementById("torchButton");
    if(torchCheckBox.checked == true){
    videoTrack.applyConstraints({
        advanced: [{torch: true}]
      }).then(function() {
        //Do Success code here
      }).catch(handleError);
    }
    else{
        videoTrack.applyConstraints({
            advanced: [{torch: false}]
          }).then(function() {
            //success code here  
          }).catch(handleError);
    }
}

希望这会有所帮助!

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

NodeJS - 在 Android/iPhone 移动设备中打开和关闭 Tourch/手电筒 的相关文章

随机推荐

  • 在 Magento 中根据 URL 参数加载对象

    我在为 Magento 商店创建自定义模块时遇到问题 我已成功添加路线 着陆 并创建 布局文件 在我的基本布局中显示模板内容 我现在需要稍微超越这一点 我希望能够从 URL 加载参数 根据该参数抓取一个对象 并根据对象的内容显示内容 示例
  • Magento - 从预调度观察者转发到不同的控制器操作

    是否可以根据我可以在控制器预调度事件中检查的特定条件转发到不同的操作 在同一控制器内 例如 要运行的操作是索引 如果我为预调度事件创建一个观察者 如果某个条件为真 我想运行不同的操作 myAction而不是indexAction 您可以在预
  • Angular JS 和部分

    是否可以在 Angular JS 中将 html 页面嵌入到另一个页面中 如果可以的话 该怎么办呢 Here http docs angularjs org tutorial step 08在他们的教程中 部分内容并未嵌入页面中 但它就像您
  • 使用 webview 中的 cookie 执行 HTTP 请求

    我有这样的场景 我的应用程序在 webView 中显示一个 2 页的登录过程 第一页仅询问您计划连接到哪个域 第二页要求提供凭据 我正在尝试在 webView 中执行登录 然后执行来自本机代码的请求 我意识到我需要从 webView 获取存
  • 左侧固定列与表 colspan

    我已经使用了这个 js 文件和以下方法 https code jquery com jquery 3 3 1 js https code jquery com jquery 3 3 1 js https cdn datatables net
  • UISplitViewController 的详细视图中缺少标题栏

    我有一个UISplitViewController嵌入到容器视图中 因为它不在我的应用程序的根目录中 其机制运行良好 除了一个问题 iPad 上缺少详细视图的导航栏 初始设置基本如下 在 IB 中 将分割视图控制器拖到情节提要上 这将创建分
  • 无法使用 AutoLayout 设置 UICollectionViewCell 的宽度

    我有一个带有动态高度单元格的集合视图 基于可能的多行标签和内部的文本视图 当我跨越多行时 它可以完美地适应高度 但是 当文本只有一个单词或者没有覆盖整个屏幕宽度时 单元格的宽度就与需要的一样宽 从而导致单元格彼此相邻而不是彼此下方 看看文本
  • SELECT 和 UPDATE 表,因此线程不会重叠

    假设我有下表 ID Read 1 true 2 false 3 false 4 false 我需要读取最小的 ID 其中 Read false 另外 更新一下我现在已经读过了 因此 如果我执行存储过程 dbo getMinID 它将返回 I
  • 使用反射调用泛型重载方法

    我需要使用反射调用重载方法 我的课程如下 public static Transformer Overloaded method with generics parameter First Transform Method public s
  • 在 C#/.Net 中创建/切换桌面

    我当前正在使用 CreateDesktop 本机 C 函数 并在我的 C 代码中调用它来创建桌面并在桌面之间切换 有没有办法使用 Process 类或任何 c Net 类来做到这一点 这是我现在在课堂上使用的用于桌面切换的示例代码 Flag
  • PHP AJAX登录,这种方式安全吗?

    我刚刚启动 PHP 和 MySQL 并创建了一个登录表单 一切正常 现在我想添加 ajax 我考虑的第一个方法是使用 jQuery post 方法 我对代码没问题 这里是我将要做什么的快速想法 function login post log
  • 当 debug 为 0 时,如何使用 CakePHP 记录 php 错误?

    我想在 debug 0 的 CakePHP 站点上记录 PHP 错误 但是 即使我打开错误日志 如下所示 error reporting E ALL E NOTICE E DEPRECATED log errors On 它不记录错误 问题
  • 加载属性文件时出现问题

    我在加载时遇到问题 test xml and test properties 在同一文件夹conf中 我在 dist 文件夹中有一个 myProject jar conf 文件夹内的 test xml 和 test properties 要
  • C 中的 strcat 两个无符号字符

    我目前正在尝试对两个无符号字符使用 strcat 但我不断收到警告 这是我对 strcat 的了解 unsigned char A 100 B 100 A 0 1 B 0 2 strcat A B 我试图将它们放在一起 以便我得到 A 作为
  • 向 NSString 添加省略号

    我有以下代码 我试图使用核心文本来绘制它 这就是为什么我不能像 UILabel 那样剪切文本 换句话说 我必须自己找出省略号 CGSize commentSize self sizeDictionary valueForKey commen
  • 使用 Javascript 按下空格键时在文本区域输入上执行事件

    I m trying to mimic the tags feature on Stack Overflow where when you click the space button on the text box it adds a b
  • Javascript:元素 onchange 事件异步/等待回调

    我希望这个问题不会重复 我有两个 HTML 元素 其中一个元素在更改时必须通过名为的异步方法填充另一个元素的值foo 下面的代码works
  • Django:无法从模板中的设置呈现 STATIC_URL

    http docs djangoproject com en dev howto static files http docs djangoproject com en dev howto static files 这表明我可以使用STAT
  • java中的Double {{ }}语法问题[重复]

    这个问题在这里已经有答案了 可能的重复 Java 双括号初始化 的效率 https stackoverflow com questions 924285 efficiency of java double brace initializat
  • NodeJS - 在 Android/iPhone 移动设备中打开和关闭 Tourch/手电筒

    我在 nodeJS 中有一个项目 我在系统和移动设备上使用它 我需要执行以下步骤 1 添加手电筒开关按钮 2 仅当该功能支持时 才会显示该按钮 手机和浏览器 3 灯应默认关闭 当我使用下面提到的代码时 它从我的系统启用我的网络摄像头闪光灯