Reactjs 如何在插入或拔出耳机时更换音频设备

Reactjs 如何在插入或拔出耳机时更换音频设备,reactjs,webrtc,Reactjs,Webrtc,我想在WebRTC项目中通过用户选择更改音频输出设备。 范例 内部的 演讲者 我使用了以下代码 // Audio Inputs const [audioInputschanged, setAudioInputschanged] = useState(false); const [selectedAudioOutput, setSelectedAudioOutput] = useState(null); const [audioInputs, setAudioInputs] = use

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

  • 内部的
  • 演讲者
  • 我使用了以下代码

    // 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])
    
    //音频输入
    const[audioInputschanged,setAudioInputschanged]=使用状态(false);
    常量[selectedAudioOutput,setSelectedAudioOutput]=useState(null);
    常量[audioInputs,setAudioInputs]=useState([]);
    navigator.mediaDevices.ondevicechange=(事件)=>{
    setAudioInputschanged(真);
    navigator.mediaDevices.enumerateDevices()
    。然后((设备)=>{
    设置音频输入(设备);
    devices.forEach((设备)=>{
    device.kind=='audiooutput'&&console.log(device.deviceId);
    });
    });
    }
    const closeAudioPopup=()=>setAudioInputschanged(false);
    const handleSelectedAudio=(设备ID)=>{
    otPublisher&&otPublisher.current.state.publisher.setAudioSource(deviceId);
    closeAudioPopup();
    }
    const renderAudioDevices=()=>{
    返回音频输入。映射((设备)=>{
    const{kind,deviceId,label}=设备;
    返回种类=='audiooutput'&&(
    
  • setSelectedAudioOutput(deviceId)} > {label}
  • ); }); } useffect(()=>{ 无手柄选择音频(选择音频输出); },[selectedAudioOutput])
    将根据状态值显示弹出窗口。当我插上或拔下USB麦克风时,这项功能就起作用了。但在插入或拔出3.5毫米耳机时不工作。代码中的错误是什么