WebRTC:在通话中将传出视频静音的同时查看自己的视频

WebRTC: View self-view while muting outgoing video in a call

目前,webrtc中的视频静音功能是通过将视频轨道的enabled 属性设置为false

来实现的

stream.getVideoTracks().forEach(function (track) {
    track.enabled = false;
});

但是上面的代码不仅会使传出视频静音,而且使用该本地流呈现的本地自身视图也会出现黑帧。 有没有办法,只静音传出的视频帧,但仍然能够显示本地自身视图?

目前还没有简单的方法。一旦 MediaStreamTrack.clone() 被浏览器支持,您可以克隆视频轨道以获得它的第二个实例,并带有单独可控的静音 属性,并将一个轨道发送到您的自视,另一个轨道发送到 peerConnection .这可以让您独立地在本地和远程关闭视频。

今天,我知道的唯一解决方法是在 Chrome 上调用 getUserMedia 两次(至少应该在 https 上工作,其中权限将被保留,因此用户不会被提示两次)这将给你两个你可以独立视频静音的轨道,或者在 Firefox 上你可以使用 RTCRtpSender.replaceTrack() 和来自 getUserMedia 的第二个 "fake" 视频流使用非标准 { video: true, fake: true } 约束 like this .