WebRTC - 使用来自纯音频流的优惠从另一个对等方接收视频

时间:2015-04-20 00:57:24

标签: html5 webrtc

如果通过createOffer()请求getUserMedia()的同伴仅允许音频,是否可以从另一个对等方接收视频和音频?

情景说明:

  1. Alice连接到信令服务器,当getUserMedia()被调用时,选择共享 视频和音频。
  2. Bob连接到信令服务器,调用getUserMedia()时,共享音频。
  3. 由于Bob是最后一个参与派对,Bob通过RTCPeerConnection.createOffer()创建了对等连接。他分享了他的localDescription,其中包含未提及视频的SDP数据。
  4. 结果连接仅限音频,因为SDP数据仅包含与音频相关的信息。
  5. 是否可以创建要求在不共享的情况下接收视频数据的优惠?

2 个答案:

答案 0 :(得分:7)

所以关键在于提供优惠。

参考规范

WebRTC 1.0 specification说:

  

4.2.5提供/应答选项

     

这些词典描述了可用于控制商品/答案创建过程的选项。

dictionary RTCOfferOptions {
    long    offerToReceiveVideo;
    long    offerToReceiveAudio;
    boolean voiceActivityDetection = true;
    boolean iceRestart = false;
};

对于视频:

offerToReceiveVideo of type long
     

在某些情况下,RTCPeerConnection可能希望接收视频但不发送任何视频。 RTCPeerConnection需要知道它是否应该向远程端发信号是否希望接收视频。此选项允许应用程序在创建商品时指示其对要接收的视频流数量的首选项。

解决方案

RTCPeerConnection.createOffer()可以将MediaConstraints作为可选的第三个参数。

我发现的例子来自WebRTC for Beginners文章:

  

创建优惠SDP

peerConnection.createOffer(function (sessionDescription) {
    peerConnection.setLocalDescription(sessionDescription);

    // POST-Offer-SDP-For-Other-Peer(sessionDescription.sdp, sessionDescription.type);

}, function(error) {
    alert(error);
}, { 'mandatory': { 'OfferToReceiveAudio': true, 'OfferToReceiveVideo': true } });

这些MediaContraints也可以与createAnswer()一起使用。

答案 1 :(得分:1)

鲍勃的优惠将包含音频,但爱丽丝也将分享她的视频。

当Bob后来希望添加(视频)流时,他调用RtcPeerConnection.addStream()并需要(重新)协商(请参阅negotiationneeded事件)。这将允许Bob随时添加不同的(附加视频)或其他流。您只需确保正确交换要约/回答(例如,在negotneeded事件中)。

我写了一个(基于dart的)webrtc库,可以帮助您了解它是如何工作的。请参阅SenderReceiver