【问题标题】:Video and audio stream control duirng the webrtc callwebrtc调用时的音视频流控制
【发布时间】:2014-02-25 18:44:32
【问题描述】:

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

假设

A 和 B 在 webrtc 调用中

在通话期间,A 只需停止他的视频频道,这样 b 就只能收听 A 的语音/音频而不是视频。 当 A 再次恢复视频时,B 可以再次看到 A 的脸。

谁能帮忙?

【问题讨论】:

    标签: javascript webrtc


    【解决方案1】:

    假设当用户(A)点击停止按钮隐藏视频。您将 css video {display:none} 应用于 video(local/remote) 元素,并将该命令发送到服务器以供其他用户 (B),当其他用户收到此命令时,在他的一侧 video( local/remote) 将被 video{display:none} 隐藏。

    因此视频将被隐藏,并且您(A)和其他(B)可以听到彼此的声音,当您单击显示按钮时,只需在您和其他浏览器上分别对视频元素执行video{display : block}。

    但在这种情况下,如果任何用户通过浏览器中的检查元素执行video{display:block},那么视频将出现在他身边。

    【讨论】:

    • 由于呼叫是多方的,因此通过服务器发送一些命令可能并不容易。我正在考虑下面的一个棘手模型:由于 webrtc 本地和远程视频是 html
    • 据我所知,您可以在本地浏览器上对视频进行任何效果,问题是您如何对远程用户的视频进行此效果。因为流是通过摄像头广播的,而不是来自本地 html 中存在的视频。您无法将消息{video:none} 发送到服务器,如果是,服务器会将此消息广播到所有浏览器,您可以通过该浏览器控制视频的可见性。
    • 你是对的。我已经尝试通过 set local video.src = '' 远程方仍然可以看到我的视频。谢谢!为了你的想法。我会努力的。
    • 欢迎您,如果您愿意,请分享您在这方面的进展。
    【解决方案2】:

    苏曼的回答有点解决问题,但效率不高。您仍在传输数据,只是不显示它。这纯粹是浪费,在带宽有限的设备的情况下可能会出现问题。请注意,默认情况下,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() {})
    

    希望这会有所帮助。

    【讨论】:

    • 如何将 recvonly 更改为 sendrecv
    • 请多描述一下
    【解决方案3】:

    我已经以有效的方式解决了它。我已经处理了本地流音频和视频以暂停和恢复。看我下面的方式

    要暂停本地视频流到连接的合作伙伴: mediastream.getVideoTracks()[0].enabled = false;

    要恢复本地视频流到连接的合作伙伴: mediastream.getVideoTracks()[0].enabled = true;

    对于音频: 暂停: mediastream.getAudioTracks()[0].enabled = false;

    简历: mediastream.getAudioTracks()[0].enabled = true;

    它在我的项目中运行良好。

    【讨论】:

    • 这样它只是暂停流而不停止实际流。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2018-10-13
    • 2016-05-01
    • 2021-11-08
    • 2020-10-25
    相关资源
    最近更新 更多