插入或拔出耳机时如何更改音频设备

问题描述

我想通过WebRTC项目中的用户选择来更改音频输出设备。 例子

  1. 内部
  2. 扬声器

我使用了以下代码

// Audio Inputs
  const [audioInputschanged,setAudioInputschanged] = useState(false);
  const [selectedAudioOutput,setSelectedAudioOutput] = useState(null);
  const [audioInputs,setAudioInputs] = useState([]);

  navigator.mediaDevices.ondevicechange = (event) => {
    setAudioInputschanged(true);
    navigator.mediaDevices.enumerateDevices()
      .then((devices) => {
        setAudioInputs(devices);
        devices.forEach((device) => {
          device.kind === 'audiooutput' && console.log(device.deviceid);
        });
      });
  }

  const closeAudioPopup = () => setAudioInputschanged(false);

  const handleSelectedAudio = (deviceid) => {
    otPublisher && otPublisher.current.state.publisher.setAudioSource(deviceid);
    closeAudioPopup();
  }

  const renderAudioDevices = () => {
    return audioInputs.map((device) => {
      const { kind,deviceid,label } = device;
      return kind === 'audiooutput' && (
        <li
          key={deviceid}
          onClick={() => setSelectedAudioOutput(deviceid)}
        >
          {label}
        </li>
      );
    });
  }

  useEffect(() => {
    handleSelectedAudio(selectedAudioOutput);
  },[selectedAudioOutput])

将基于状态值显示弹出窗口。当我插入或拔下USB麦克风时,此方法有效。但是插入或拔下3.5毫米耳机时无法使用。代码中有什么错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)