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

Ari*_*ite 5 html5 webrtc

是否可以接收来自另一个对等体的视频和音频,如果通话的对等方createOffer()仅在通过请求时允许音频getUserMedia()

方案说明:

  1. 爱丽丝连接到信令服务器,当getUserMedia()被调用时,选择共享双方的视频和音频.
  2. Bob连接到信令服务器,并且在getUserMedia()被呼叫时,共享音频.
  3. 由于Bob是最后一个参与派对,Bob通过提供对等连接提供RTCPeerConnection.createOffer().他分享了他的localDescription包含没有提及视频的SDP数据.
  4. 由此产生的连接仅用于音频,因为SDP数据仅包含音频相关信息.

是否可以创建要求接收视频数据而不共享的要约?

Ari*_*ite 7

所以关键在于提供优惠.

参考规范

的WebRTC 1.0规范说:

4.2.5提供/应答选项

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

dictionary RTCOfferOptions {
    long    offerToReceiveVideo;
    long    offerToReceiveAudio;
    boolean voiceActivityDetection = true;
    boolean iceRestart = false;
};
Run Code Online (Sandbox Code Playgroud)

在视频的情况下:

offerToReceiveVideo of type long
Run Code Online (Sandbox Code Playgroud)

在某些情况下,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 } });
Run Code Online (Sandbox Code Playgroud)

这些MediaContraints也可以使用createAnswer().

  • 请注意,示例中的语法与规范不同,但需要与 Google Chrome 一起使用(注意大小写的区别;offerToReceiveVideo 中的“O”与“o”,以及已从规范)。虽然 Firefox 支持新旧语法,但 Chrome 目前对新语法感到窒息,因此在 Chrome 更新之前,旧语法是最兼容的。 (3认同)