问题描述
就本示例而言,我正在使用来自Ant Media Server应用程序的基本发布HTML / js代码(请参见https://github.com/ant-media/StreamApp/blob/master/src/main/webapp/index.html)。 (注意-我实际上是在WebRTC中使用企业版)
在该代码之上,我正在创建一个脚本处理器以在AudioContext上运行,以显示麦克风级别的VU表(简化发布的代码):
function startVUMeters() {
navigator.mediaDevices.getUserMedia({audio: true,video: true}).then(function (stream) {
window.vuMeteraudioContext = new AudioContext();
window.vuMeteranalyser = vuMeteraudioContext.createAnalyser();
window.vuMeterMicrophone = vuMeteraudioContext.createmediastreamsource(stream);
window.vuMeteraudioscriptprocessor = vuMeteraudioContext.createscriptprocessor(2048,1,1);
window.vuMeterMicrophone.connect(vuMeteranalyser);
window.vuMeteranalyser.connect(vuMeteraudioscriptprocessor);
window.vuMeteraudioscriptprocessor.connect(vuMeteraudioContext.destination);
window.vuMeteraudioscriptprocessor.onaudioprocess = function () {
// Calculate the microphone levels and update the meter
};
});
}
function stopVUMeters() {
window.vuMeterMicrophone.disconnect();
window.vuMeteranalyser.disconnect();
window.vuMeteraudioscriptprocessor.disconnect();
window.vuMeteraudioContext.close();
window.vuMeterMicrophone = null;
window.vuMeteranalyser = null;
window.vuMeteraudioscriptprocessor = null;
window.vuMeteraudioContext = null;
}
当用户尝试切换设备时,我先运行stopVUMeters()
,然后再尝试切换音频设备,这是通过从ant_webtc_adaptor.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,所以还不能使用audioworklets。
如何清洁释放音频,以便可以切换音频设备?另外,是否有一种方法可以从WebRTC流中获取麦克风活动,而无需首先创建新的AudioContext?
编辑
我一直在尝试更多。在Firefox(Mac)中会发生此问题。在Chrome(Mac)上,我可以切换设备,但是Audiocontext保留在默认(我认为)设备上(或者设备切换无法正常工作,我也要检查一下)。在Safari中可以正常使用。我还不能在PC上尝试它。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)