我可以在两方之间通过视频和音频流进行webrtc通话。有没有办法让用户在通话期间停止仅共享视频或音频?
假设
A和B在webrtc电话中
在通话期间只是停止他的视频频道,这样b只能听A的语音/音频而不是视频。 当A再次恢复视频时,B可以再次看到A面。
有人可以帮忙吗?
答案 0 :(得分:4)
我已经以有效的方式解决了这个问题。我已经将本地流音频和视频用于处理和恢复。请参阅我的下面的方式
暂停本地视频流到连接的合作伙伴: mediastream.getVideoTracks()[0] .enabled = false;
要将本地视频流恢复为已连接的合作伙伴: mediastream.getVideoTracks()[0] .enabled = true;
用于音频: pasue: mediastream.getAudioTracks()[0] .enabled = false;
简历: mediastream.getAudioTracks()[0] .enabled = true;
它在我的项目中完美运作。
答案 1 :(得分:2)
苏曼的答案解决了这个问题,但效率不高。你仍在传输数据,只是没有显示它。这是纯粹的浪费,在带宽有限的设备的情况下可能会有问题。请注意,默认情况下,WebRTC将高达2Mbps的视频。
解决这个问题的正确方法是重新协商同行之间的提议/答案,并将特定媒体标记为sendonly / recvonly。
为此,您需要存储SDP提供的某个地方,当需要停止发送特定类型的媒体时,您需要替换行
a = sendrecv with 一个= recvonly
像:
var localDescr = peerConnection.localDescription;
localDescr = makeRecvOnly(localDescr);
peerConnection.setLocalDescription(localDescr,function(){});
someWebSocketTransport.sendUpdateStreamingStatus(localDescr)
然后另一端应该处理这个sendUpdateStreamingStatus并使用
设置接收的描述peerConnection.setRemoteDescription(receivedRemoteDescr, function() {})
希望这有帮助。
答案 2 :(得分:1)
假设用户(A)点击停止按钮隐藏视频。您将css video {display:none
}应用于视频(本地/远程)元素,并将该命令发送给服务器以供其他用户(B),当其他用户获得此命令时,将其放在他身边视频(本地/远程)将隐藏video{display:none}
。
因此,视频将被隐藏,您(A)和其他(B)可以听到彼此的声音,当您点击“显示”按钮时,只需在您和其他浏览器上执行video{display : block}
到视频元素分别。
但是在这种情况下,如果任何用户通过浏览器中的inspect元素执行video{display:block}
,那么视频就会显示在他身边。