[ortc] [Proposal] RtpSender setParameters(), getParameters() and send()

ibc has just created a new issue for https://github.com/openpeer/ortc:

== [Proposal] RtpSender setParameters(), getParameters() and send() ==
Let's assume I want to send video.

I get my video capabilities:

```js
var myVideoCaps = RTCRtpSender.getCapabilities('video');

// I get this:
{
  codecs :
  [
    {
      name                 : 'VP8',
      kind                 : 'video',
      clockRate            : 90000,
      preferredPayloadType : 100,
      rtx :
      {
        preferredPayloadType : 96,
        rtxTime              : 1234  // No idea
      },
      rtcpFeedback :
      [
        { type: 'ccm', parameter: 'fir' },
        { type: 'nack' }
      ]
    }
  ]
}
```

So just VP8 with RTX and some RTCP stuff.

Assuming I exchange my capabilities with the remote peer and we both 
agree on VP8, I need to construct my `RTCRtpParameters` which would 
look as follows:

```js
var myRtpParameters =
{
  muxId  : 'my-video',  // Yeah!
  codecs :
  [
    {
      name        : 'VP8',
      clockRate   : 90000,
      payloadType : 100,
      rtx :
      {
        payloadType : 96,
        rtxTime     : 1234
      },
      rtcpFeedback :
      [
        { type: 'ccm', parameter: 'fir' },
        { type: 'nack' }
      ]
    }
  ],
  encodings : [],  // Empty
  rtcp      :  // TODO
};
```

**QUESTION 1:**

How can I set the `RTCRtcpParameters` `rtcp` field?

**QUESTION 2:**

Simple scenario so, of course, I can leave the `encodings` field 
empty. But... it happens that I need to generate a SDP offer so I need
 the SSRCs.

This means that I need to create the `encodings` sequence by myself. 
Ok, we know that we'll just send VP8 and its RTX, so it is clear that 
just 2 streams are needed, so we can create this `encodings`:

```js
myRtpParameters.encodings =
[
  {
    ssrc             : 11111111, // why not?
    codecPayloadType : 100
  },
  {
    ssrc             : 22222222, // why not?
    codecPayloadType : 96
  }
];
```

**QUESTION 3:**

This is a very simple example. Let's imagine multiple codecs, FEC, 
RED, etc. And I do need the SSRCs before sending media. Do I really 
need to create a complex `encodings` sequence with as many entries as 
media codecs + feature codecs?

Simpler API solution:

```js
var myRtpParameters;  // The above RTCRtpParameters with no 
`encodings` nor `rtcp`

// Set my RTP parameters but don't send RTP yet
videoRtpSender.setParameters(myRtpParameters);

// Get the completed & updated parameters (includes `encodings` and 
`rtcp`)
var myUpdatedRtpParameters = videoRtpSender.getParameters();

// Let's create a SDP offer and send it, etc

// Send RTP
videoRtpSender.send();  // No arguments
```

**QUESTION 4:**

How am I supposed to set the remaining `RTCRtpEncodingParameters` 
fields? I mean:

```
unsigned long       maxBitrate;
double              minQuality = 0;
double              resolutionScale;
double              framerateScale;
boolean             active = true;
DOMString           encodingId;
sequence<DOMString> dependencyEncodingIds;
```

Who is supposed to fill them? how can I know which values are 
supported by my browser?


Please view or discuss this issue at 
https://github.com/openpeer/ortc/issues/447 using your GitHub account

Received on Friday, 1 April 2016 00:22:49 UTC