Javascript webrtc音频设备断开和重新连接
我有一个基于WebRTC的视频通话应用程序。它正在按预期工作。然而,当通话进行时,若我断开并连接回音频设备(麦克风+扬声器),只有扬声器部分工作。麦克风部分似乎不工作-另一边听不见了 一旦音频设备重新连接,是否有办法通知WebRTC再次进行音频输入 一旦音频设备重新连接,是否有办法通知WebRTC再次进行音频输入 你的问题看起来很简单扬声器的对称性很吸引人,但一旦我们与拥有多个摄像头和麦克风的用户打交道,问题就不那么简单了:如果你的用户断开了他们正在使用的蓝牙耳机,你应该等他们重新连接,还是立即切换到笔记本电脑麦克风?如果是后者,如果他们稍后重新连接,您是否切换回?这些是应用程序决策 处理这些事情的API主要有:和事件以及方法。您可能还需要约束和方法来处理多个设备 然而,为了简单起见,让我们从表面上看问题中的假设,来探索API: 当用户在通话中拔下唯一的麦克风(而不是摄像头)时,我们的工作是在重新插入麦克风时恢复与麦克风的对话,而不丢失视频:Javascript webrtc音频设备断开和重新连接,javascript,audio,webrtc,Javascript,Audio,Webrtc,我有一个基于WebRTC的视频通话应用程序。它正在按预期工作。然而,当通话进行时,若我断开并连接回音频设备(麦克风+扬声器),只有扬声器部分工作。麦克风部分似乎不工作-另一边听不见了 一旦音频设备重新连接,是否有办法通知WebRTC再次进行音频输入 一旦音频设备重新连接,是否有办法通知WebRTC再次进行音频输入 你的问题看起来很简单扬声器的对称性很吸引人,但一旦我们与拥有多个摄像头和麦克风的用户打交道,问题就不那么简单了:如果你的用户断开了他们正在使用的蓝牙耳机,你应该等他们重新连接,还是立即
结束
事件,了解本地音轨何时下降devicechange
事件以检测(任何内容)的重新插入wait sender.replaceTrack(newAudioTrack)
发送我们的新音频let sender;
(async () => {
try {
const stream = await navigator.mediaDevices.getUserMedia({video: true, audio: true});
pc.addTrack(stream.getVideoTracks()[0], stream);
sender = pc.addTrack(stream.getAudioTracks()[0], stream);
sender.track.onended = () => navigator.mediaDevices.ondevicechange = tryAgain;
} catch (e) {
console.log(e);
}
})();
async function tryAgain() {
try {
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
await sender.replaceTrack(stream.getAudioTracks()[0]);
navigator.mediaDevices.ondevicechange = null;
sender.track.onended = () => navigator.mediaDevices.ondevicechange = tryAgain;
} catch (e) {
if (e.name == "NotFoundError") return;
console.log(e);
}
}
// Your usual WebRTC negotiation code goes here
以上仅作说明。我确信有很多角落的情况需要考虑。这是你的应用程序,还是仅仅在使用它?如果这是一个编程问题,您使用的是什么语言,涉及到哪些库(如果有的话)?简短的回答是肯定的,但一些上下文或代码将有助于确保我回答了正确的问题。它是我在node.js中作为信令服务器开发的应用程序,端点在浏览器上(html、java脚本)。使用webrtc库和其他普通java脚本。希望这能提供一些背景。感谢您的详细解释。将尝试建议的方法。