Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行AudioContext脚本处理器时,如何更改WebRTC发布流的音频设备?_Webrtc_Audiocontext_Ant Media Server - Fatal编程技术网

运行AudioContext脚本处理器时,如何更改WebRTC发布流的音频设备?

运行AudioContext脚本处理器时,如何更改WebRTC发布流的音频设备?,webrtc,audiocontext,ant-media-server,Webrtc,Audiocontext,Ant Media Server,在本例中,我使用Ant Media Server应用程序中的基本发布HTML/js代码(请参阅)。(注意-我实际使用的是带有WebRTC的企业版) 在该代码的基础上,我创建了一个脚本处理器,在AudioContext上运行,以显示麦克风音量的VU表(简化发布代码): 当用户尝试切换设备时,我会在尝试切换音频设备之前运行stopVUMeters(),方法是从ant\u webtc\u adapter.js文件调用switchAudioInputSource(): this.switchAudioI

在本例中,我使用Ant Media Server应用程序中的基本发布HTML/js代码(请参阅)。(注意-我实际使用的是带有WebRTC的企业版)

在该代码的基础上,我创建了一个脚本处理器,在AudioContext上运行,以显示麦克风音量的VU表(简化发布代码):

当用户尝试切换设备时,我会在尝试切换音频设备之前运行
stopVUMeters()
,方法是从ant\u webtc\u adapter.js文件调用
switchAudioInputSource()

this.switchAudioInputSource = function(streamId, deviceId) {
    //stop the track because in some android devices need to close the current camera stream
    var audioTrack = thiz.localStream.getAudioTracks()[0];
    if (audioTrack) {
        audioTrack.stop();
    }
    else {
       console.warn("There is no audio track in local stream");
    }

    if (typeof deviceId != "undefined" ) {
        thiz.mediaConstraints.audio = { "deviceId": deviceId };
    }
    thiz.setAudioInputSource(streamId, thiz.mediaConstraints, null, true, deviceId);
}
但是,当我切换时,它无法告诉我另一个设备正在使用麦克风

如果我根本不启动VU仪表,那么它工作正常,因此我认为问题在于我的
AudioContext
没有释放它对音频的保留,但我不知道如何解决它。我需要在iOS上支持Safari,所以我还不能使用AudioWorklet

如何才能干净地释放音频,以便切换音频设备?或者,是否有一种方法可以从WebRTC流获取麦克风活动,而无需首先创建新的AudioContext

编辑 我一直在做更多的实验。这个问题发生在Firefox(Mac)中。在Chrome(Mac)上,我可以切换设备,但Audiocontext保持在默认(我想)设备上(或者设备切换不正常,我也要检查一下)。在Safari中,它只起作用。我还没能在个人电脑上试用

this.switchAudioInputSource = function(streamId, deviceId) {
    //stop the track because in some android devices need to close the current camera stream
    var audioTrack = thiz.localStream.getAudioTracks()[0];
    if (audioTrack) {
        audioTrack.stop();
    }
    else {
       console.warn("There is no audio track in local stream");
    }

    if (typeof deviceId != "undefined" ) {
        thiz.mediaConstraints.audio = { "deviceId": deviceId };
    }
    thiz.setAudioInputSource(streamId, thiz.mediaConstraints, null, true, deviceId);
}