📜  Twilio 房间没有断开网络摄像头 LED 保持亮着 - Javascript (1)

📅  最后修改于: 2023-12-03 15:35:23.415000             🧑  作者: Mango

Twilio 房间没有断开网络摄像头 LED 保持亮着 - Javascript

简介

本文介绍如何使用 Twilio Video API 在 Twilio 房间中控制网络摄像头 LED 灯的状态。

在使用 Twilio Video API 时,我们可以通过设置 videoInputSelected 选项来选择使用哪个视频输入设备。对于大多数用户来说,这个选项通常被设置为默认的摄像头。但是,当所有的摄像头都离线或者因为某些原因无法正常工作时,Twilio Video API 将选择网络摄像头(如果有)作为视频输入设备。

在这种情况下,当网络摄像头被选择为视频输入设备时,网络摄像头的 LED 灯状态将处于关闭状态。因此我们需要寻找一种方法来控制网络摄像头的 LED 灯状态,如果网络摄像头被选择为视频输入设备时,我们可以将 LED 灯调亮。

本文将提供一个范例程序,使用 Twilio Video API 在 Twilio 房间中控制网络摄像头 LED 的状态。

技术栈
  • Twilio Video API
  • Javascript
准备工作
  • Twilio 账号
  • 一台带网络摄像头的计算机
  • 一个 Twilio 房间
实现

首先,我们需要确认网络摄像头是否被选为默认的视频输入设备。为此,我们可以使用 navigator.mediaDevices.enumerateDevices() 方法来列举所有可用的媒体设备。

navigator.mediaDevices.enumerateDevices()
.then(function(devices) {
  devices.forEach(function(device) {
      console.log(device.kind + ": " + device.label + " id = " + device.deviceId);
  });
})
.catch(function(err) {
  console.log(err.name + ": " + err.message);
});

如果返回的设备列表中有关于网络摄像头的信息,我们可以检查 videoInputSelected 的值是否与网络摄像头的设备 ID 相匹配。

room.on('trackSubscribed', function(track) {
  if (track.kind === 'video') {
    if (track.mediaStreamTrack.getSettings().deviceId === networkCameraDeviceId) {
      turnOnNetworkCameraLED();
    }
  }
});

function turnOnNetworkCameraLED() {
  // 控制网络摄像头 LED 灯的代码
}

最后,在 turnOnNetworkCameraLED 函数中,我们可以使用开源库 WebUSB 控制网络摄像头的 LED 灯。

完整代码
navigator.mediaDevices.enumerateDevices()
.then(function(devices) {
  devices.forEach(function(device) {
      console.log(device.kind + ": " + device.label + " id = " + device.deviceId);

      // 如果设备类型为 videoinput,且包含 network camera 关键字,则记录下 deviceId
      if (device.kind === 'videoinput' && device.label.includes('network camera')) {
        var networkCameraDeviceId = device.deviceId;
      }
  });
})
.catch(function(err) {
  console.log(err.name + ": " + err.message);
});

room.on('trackSubscribed', function(track) {
  if (track.kind === 'video') {
    if (track.mediaStreamTrack.getSettings().deviceId === networkCameraDeviceId) {
      turnOnNetworkCameraLED();
    }
  }
});

function turnOnNetworkCameraLED() {
  navigator.usb.requestDevice({ filters: [{}] })
  .then(function(device) {
    console.log('Device connected:', device);
    return device.open();
  })
  .then(function(device) {
    console.log('Device opened:', device);
    return device.selectConfiguration(1);
  })
  .then(function(config) {
    console.log('Configuration selected:', config);
    return device.claimInterface(1);
  })
  .then(function() {
    console.log('Interface claimed');
    var data = new Uint8Array([0x12, 0x01]);
    return device.transferOut(2, data);
  })
  .catch(function(error) {
    console.log(error);
  });
}
结论

通过以上的代码,我们可以在 Twilio 房间中控制网络摄像头 LED 灯的状态。如果网络摄像头被选择为视频输入设备时,我们可以将 LED 灯调亮,提醒用户网络摄像头正在使用中。