2

我有一个 Javascript Web 应用程序,它使用.getUserMedia().applyConstraints()和相关的浏览器 API 从移动设备 Web 浏览器捕获一些视频,并使用 Websocket 将其发送到某个地方。捕获和发送的东西运行良好。

我已经实现了一个小用户界面,让我的用户打开和关闭手电筒(为相机提供光线的 LED 灯。)

在大多数 Android 设备上,此 UI 可以正常打开和关闭手电筒。但不适用于 Android Studio Mega(运行 Android 8.1.0 和移动 Chrome 81.0.4044.138 的 Build/O11019)

注意:Studio Mega 是 Android 型号名称,与 Android Studio 无关。

在那个设备上,我可以很好地打开手电筒,但它忽略了我关闭手电筒的请求。我使用这样的代码:

  const torchstate = false     /* works when torchstate = true */
  const track = stream.getVideoTracks()[0]
  if( track && typeof track.getCapabilities === 'function' ) {
    const caps = track.getCapabilities()
    if( caps.torch ) {
      track.applyConstraints( { advanced: [{ torch: torchstate }] } )
      .then( () => {
        /* the torch should now be off, but it is not. */
      } )
      .catch( ( error ) => {
        /* My code never hits this catch clause */
        console.log( 'setTorch', torchstate ? 'on' : 'off', 'error', error )
      } )
    }
  }

这个 Studio Mega 设备实际上有两个手电筒,一个在后置摄像头上,另一个在自拍摄像头上。我的 UI 打开了我希望它打开的那个(与当前活动的相机关联的那个)。但不关。

按预期关闭stream手电筒(在我尝试过的所有机器人上)。

有没有其他方法可以关闭手电筒?或者这可能是浏览器、WebRTC 或设备错误?

(对于它的价值 iOS / 移动 Safari 没有火炬功能。所以也许我应该认为这是一个会说话的驴子问题——我应该对它的工作感到惊讶,而不是对它奇怪的工作感到恼火。)

4

0 回答 0