运行AudioContext脚本处理器时,如何更改WebRTC发布流的音频设备?
在本例中,我使用Ant Media Server应用程序中的基本发布HTML/js代码(请参阅)。(注意-我实际使用的是带有WebRTC的企业版) 在该代码的基础上,我创建了一个脚本处理器,在AudioContext上运行,以显示麦克风音量的VU表(简化发布代码): 当用户尝试切换设备时,我会在尝试切换音频设备之前运行运行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
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);
}