0

我可以在 Circuit WebClient 和https://output.jsbin.com/posoko上的示例 SDK 应用程序之间进行直接调用。

在带有第二个摄像头 (USB) 的 PC 上运行 SDK 示例时,内置摄像头和 USB 摄像头之间的切换工作正常。但是在我的 Android 设备(三星 Galaxy S6)上尝试相同的切换不起作用。

我的代码用于navigator.mediaDevices.enumerateDevices()获取摄像头,然后使用 Circuit SDK 功能setMediaDevices切换到另一个摄像头。

async function switchCam() {
  let availDevices = await navigator.mediaDevices.enumerateDevices();
  availDevices = availDevices.filter(si => si.kind === 'videoinput');
  let newDevice = availDevices[1]; // secondary camera
  await client.setMediaDevices({video: newDevice.deviceId})
}

有人可以解释为什么这在 Android 设备上不起作用吗?

4

1 回答 1

1

navigator.getUserMedia我们已经看到 Android 设备在视频轨道(以及流)仍处于活动状态时不允许调用。我用 Pixel 2 尝试了上面的示例,但没有任何问题。

如果您从流中删除视频轨道并在调用client.setMediaDevices之前停止轨道,则该开关应该可以工作。

async function switchCam() {
  const stream = await client.getLocalAudioVideoStream();
  const currTrack = stream.getVideoTracks()[0];
  console.log(`Remove and stop current track: ${currTrack.label}`);

  stream.removeTrack(currTrack);
  currTrack.stop();

  let availDevices = await navigator.mediaDevices.enumerateDevices();
  availDevices = availDevices.filter(si => si.kind === 'videoinput');
  let newDevice = availDevices[1]; // secondary camera
  await client.setMediaDevices({video: newDevice.deviceId}) 
}

在https://output.jsbin.com/wuniwec/上有一个关于 JSBin 的完整开关相机示例

于 2018-03-17T01:16:29.443 回答