【发布时间】:2014-02-25 18:44:32
【问题描述】:
我可以通过视频和音频流在 2 方之间进行 webrtc 通话。有什么方法可以让用户在通话期间停止仅共享视频或音频?
假设
A 和 B 在 webrtc 调用中
在通话期间,A 只需停止他的视频频道,这样 b 就只能收听 A 的语音/音频而不是视频。 当 A 再次恢复视频时,B 可以再次看到 A 的脸。
谁能帮忙?
【问题讨论】:
标签: javascript webrtc
我可以通过视频和音频流在 2 方之间进行 webrtc 通话。有什么方法可以让用户在通话期间停止仅共享视频或音频?
假设
A 和 B 在 webrtc 调用中
在通话期间,A 只需停止他的视频频道,这样 b 就只能收听 A 的语音/音频而不是视频。 当 A 再次恢复视频时,B 可以再次看到 A 的脸。
谁能帮忙?
【问题讨论】:
标签: javascript webrtc
假设当用户(A)点击停止按钮隐藏视频。您将 css video {display:none} 应用于 video(local/remote) 元素,并将该命令发送到服务器以供其他用户 (B),当其他用户收到此命令时,在他的一侧 video( local/remote) 将被 video{display:none} 隐藏。
因此视频将被隐藏,并且您(A)和其他(B)可以听到彼此的声音,当您单击显示按钮时,只需在您和其他浏览器上分别对视频元素执行video{display : block}。
但在这种情况下,如果任何用户通过浏览器中的检查元素执行video{display:block},那么视频将出现在他身边。
【讨论】:
{video:none} 发送到服务器,如果是,服务器会将此消息广播到所有浏览器,您可以通过该浏览器控制视频的可见性。
苏曼的回答有点解决问题,但效率不高。您仍在传输数据,只是不显示它。这纯粹是浪费,在带宽有限的设备的情况下可能会出现问题。请注意,默认情况下,WebRTC 的视频传输速率会高达 2Mbps。
此问题的正确解决方案是在对等方之间重新协商提议/答案并将特定媒体标记为 sendonly/recvonly。
为此,您需要将 SDP 报价存储在某处,当需要停止发送特定类型的媒体时,您需要更换线路
a=sendrecv 与 a=recvonly
喜欢:
var localDescr = peerConnection.localDescription;
localDescr = makeRecvOnly(localDescr);
peerConnection.setLocalDescription(localDescr,function(){});
someWebSocketTransport.sendUpdateStreamingStatus(localDescr)
那么另一端应该处理这个 sendUpdateStreamingStatus 并设置接收到的描述使用
peerConnection.setRemoteDescription(receivedRemoteDescr, function() {})
希望这会有所帮助。
【讨论】:
我已经以有效的方式解决了它。我已经处理了本地流音频和视频以暂停和恢复。看我下面的方式
要暂停本地视频流到连接的合作伙伴: mediastream.getVideoTracks()[0].enabled = false;
要恢复本地视频流到连接的合作伙伴: mediastream.getVideoTracks()[0].enabled = true;
对于音频: 暂停: mediastream.getAudioTracks()[0].enabled = false;
简历: mediastream.getAudioTracks()[0].enabled = true;
它在我的项目中运行良好。
【讨论】: