在webrtc调用期间进行视频和音频流控制

时间:2014-02-02 06:24:49

标签: javascript webrtc

我可以在两方之间通过视频和音频流进行webrtc通话。有没有办法让用户在通话期间停止仅共享视频或音频?

假设

A和B在webrtc电话中

在通话期间

只是停止他的视频频道,这样b只能听A的语音/音频而不是视频。 当A再次恢复视频时,B可以再次看到A面。

有人可以帮忙吗?

3 个答案:

答案 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},那么视频就会显示在他身边。