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 .
目前,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 .