Propsoal: A more full RTCRtpParameters (RTCRtpCodecParams, RTX, FEC, SSRCs, and the beginnings of simulcast)

In various email threads, we've referred to RTCRtpParameters, specifically
for RTCRtpSender.send(RTCRtpParameters) and
RTCRtpReceiver.receive(RTCRtpParameters).  But we've never fully proposed
what it should look like.  Meanwhile, there's been discussion of the
RTCCodec in RTCRtpCapabilities and RTCRtpParameters, which aren't quite the
same.

So, I propose we make an RTCRtpParameters like so, which is combining
various other emails threads, and adding a few things:

It covers I think all of what we need except for specifying quality,
resolution, framerate, and inter-layer depenencies, which is a big topic
that requires a separate email.

dictionary RTCRtpParameters {
​ // ​The value that goes in the "APPID header extension".

 DOMString?                                receiverId;

​ // The codecs to send or receive.
​ // We need more than one send codec because of RTX, CN, etc ​

 sequence<RTCRtpCodecParameters>           codecs;

​ // The header extensions to send or receive​.

 sequence<RTCRtpHeaderExtensionParameters> headerExtensions;

​ // The various "encodings" or "layers"
 // (
​rtx,
fec,
​simulcast, ​
etc). ​
 sequence<RTCRtpEncodingParameters>        encodings;
}

dictionary RTCRtpCodecParameters {
 // The value that goes in the RTP Payload Type field.
​
 unsigned byte payloadType;

​ // ​The same value that goes in the RTCRtpCapabilities.

 RTCRtpCodec codec;

​ // Format parameters that are only used for controlling
 // what is sent, and shouldn't be signalled.
​
​
​
​
​

​ // For example, with opus, stereo=1
 ​
 sequence<KeyValueParam>        formatParameters;

​ // Because they are so different,
 // RTCP feedback params are separated out.​

 sequence<RTCRtcpFeedbackParam> rtcpFeedbackParameters;
};

dictionary RTCRtcpFeedbackParam {
  DOMString type;    // e.g. "nack", "ccm", "tmmbr", "goog-remb"
​, etc​

  DOMString parameters;  // e.g. "rpsi", "fir"
​, etc​

}

dictionary RTCRtpHeaderExtensionParameters {
 DOMString      uri;
 unsigned short id;
 bool           encrypt;
}

dictionary RTCRtpEncodingParameters {
  // The "main" ssrc for this layer/encoding.
​

​​
unsigned int ssrc;

​
// F
​or per-enconding codec specfications, give the codec name here.
  // If null, the browser will choose.​

​

​
DOMString
​?​
codec
​Name​
;

  // If you want FEC or RTX, assign one of these.
  ​
RTCRtpFecParameters? fec;
​
RTCRtpRtxParameters? rtx;

​​  // TODO: Control resolution, quality, framerate, and
​  // Inter-layer depenencies.  ​
​  // It's a topic all on its own :).​

}

dictionary RTCRtpFecParameters {
​  ​
// The ssrc to use for FEC.
​ ​
 unsigned int ssrc;​
​ ​

​DOMString
 mechanism;
}

dictionary RTCRtpRtxParameters {
​  ​
// The ssrc to use for
​RTX.

​  ​
unsigned int ssrc;
}

Received on Thursday, 13 February 2014 01:54:20 UTC