From 9036b8879eddd3c36065d58469f1335a75c30fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= Date: Fri, 29 Apr 2022 04:49:15 +0200 Subject: Disconnect received videos by toggling the video directly in Janus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Originally the HPB required a renegotiation to block the received videos. However, besides the standard WebRTC way, Janus also supports directly toggling on and off the video without any renegotiation. This is now exposed by the signaling server through the "selectStream" message, so the video is now blocked using that approach instead. The previous code to block the video using a renegotiation is still kept, though, as it could be used without HPB once all the clients support renegotiations. Signed-off-by: Daniel Calviño Sánchez --- src/utils/webrtc/simplewebrtc/peer.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src') diff --git a/src/utils/webrtc/simplewebrtc/peer.js b/src/utils/webrtc/simplewebrtc/peer.js index df67298fd..fea3aa592 100644 --- a/src/utils/webrtc/simplewebrtc/peer.js +++ b/src/utils/webrtc/simplewebrtc/peer.js @@ -886,6 +886,19 @@ Peer.prototype.setRemoteVideoBlocked = function(remoteVideoBlocked) { return } + // If the HPB is used the remote video can be blocked through a standard + // WebRTC renegotiation or by toggling the video directly in Janus. The last + // one is preferred, as it requires less signaling messages to be exchanged + // and, besides that, the browser starts to decode the video faster once + // enabled again. + if (this.receiverOnly && this.parent.config.connection.hasFeature('update-sdp')) { + this.send('selectStream', { + video: !remoteVideoBlocked, + }) + + return + } + this._remoteVideoShouldBeBlocked = remoteVideoBlocked // The "negotiationneeded" event is emitted if needed based on the direction -- cgit v1.2.3