使用WebRTC如何选择麦克风和相机?


My☀
2025-03-10 08:42:19 (23天前)
  1. 使用API​​ navigator.mediaDevices.enumerateDevices()我得到了计算机中可用设备的ID,但我不知道如何告诉导航器我想要切换摄像头或麦克风。在......

2 条回复
  1. 0# 阿政ღ | 2019-08-31 10-32



    使用

    deviceId

    约束。
    我已经更新了

    MDN

    提到它。




    1. $scope.selectDevice = function(device) {
      let constraints, oldtrack;
      if (device.kind == videoinput’) {
      constraints = {video: { deviceId: {exact: device.deviceId}}};
      oldtrack = (video.srcObject || []).getVideoTracks()[0];
      } else {
      constraints = {audio: { deviceId: {exact: device.deviceId}}};
      oldtrack = (video.srcObject || []).getAudioTracks()[0];
      }
      // Most phones only handle one camera open at a time, so stop old device first.
      if (oldtrack) {
      oldtrack.stop();
      }
      return navigator.mediaDevices.getUserMedia(constraints)
      .then(stream => video.srcObject = stream);
      .catch(err => console.log(err.name + ‘:’ + err.message));
      }

    2. </code>


    使用

    exact

    用于防止回退到其他设备的关键字,因为这是一个选择器。



    你可以忽略

    “audiooutput”

    ,因为那些是扬声器,而不是麦克风。也没有这样的事情

    “videooutput”

    。这是一个无效的价值。那些将是我想的显示,但这些都没有列举

    enumerateDevices()




    以上仅用于说明,以说明API的工作原理。由于我们正在处理硬件,因此制作一个强大的选择器是一个留给读者的练习。



    例如:大多数手机只能同时打开一个相机。例如,还可能存在其他冲突,例如使用来自相机之外的相机的麦克风。相比

    device.groupId

    用于了解相机和麦克风是否位于同一硬件上的属性。如果它们匹配,例如,更换相机和麦克风可能会更好。



    如果您怀疑硬件问题,请尝试使用

    WebRTC示例演示

    在你的系统上。


登录 后才能参与评论