- From: Peter Thatcher <pthatcher@google.com>
- Date: Mon, 16 Jun 2014 14:43:15 -0700
- To: Bernard Aboba <Bernard.Aboba@microsoft.com>
- Cc: "public-ortc@w3.org" <public-ortc@w3.org>
- Message-ID: <CAJrXDUGNr_UyEgB++uhdwQ5Yp3ayDTNnakrQ2us+ESDiFW6D0g@mail.gmail.com>
This is a significant cleanup and covers a lot of things that were missing before. It feels good and complete. Thanks for doing this work. On Fri, Jun 13, 2014 at 1:51 PM, Bernard Aboba <Bernard.Aboba@microsoft.com> wrote: > In ORTC API, we have Capabilities which describe what an implementation > can do, and Parameters, which describe what the developer wants to do. > > > > After having reworked the RTCRtpCapabilities object so as to be able to > rewrite the Examples that formerly called the createParameters and > filterParameters methods, we took a look at the implications for the > RTCRtpParameters object. > > > > In the last Editor’s draft, the RTCRtpParameters object had made reference > to the concepts of Capabilities and Settings from the getUserMedia() > specification (specifically, the constrainable interface). > > > > This concerned some folks because of the overall complexity of the > constrainable interface. For example, in Issue #84, Shijun Sun noted that > “ IMHO we should avoid the “Capabilities” stuff if it is not needed.” > > > > So we looked at whether we could simplify the RTCRtpParameters object. > > > > Also, we went over the RTP Usage Draft to make sure that ORTC API could be > used to set any configuration parameter which that document “required to be > signaled”. A number of things were found to be missing, such as the > ability to configure RTP/RTCP multiplexing and reduced-size RTCP. > > > > Furthermore, we looked at what configuration information was necessary for > RTCP feedback messages. Some of these relate to the transport layer (e.g. > Generic NACK and TMMBR/TMMBN) so that they can apply to any codec, whereas > other payload-specific messages (e.g. SLI, PLI, RPSI) are sent and > processed within the codec, so they need to be configured at the codec > level. Rather than enabling RTCP feedback messages to be configured at > both the RTP and per-codec levels, we decided that all RTCP configuration > should be done at the codec level, so as to avoid complexity. > > > > With respect to Header Extensions, which could be configured for use with > particular codecs, there was also a need for global consistency. For > example, the same header extension could be used with multiple codecs but > with the same ID for all of them. Therefore it made sense to have the ID > reside at the RTP level, but there also needed to be a way of indicating > whether the header extension would be used with a given codec or not. For > example, it would not make sense to use the Client to Mixer Audio extension > with a video codec. > > > > After we went through the RTCRtpParameters again with a fine tooth comb, > we found that we could eliminate the use of Capabilities and Settings from > getUserMedia entirely, while at the same time providing the appropriate > configuration knobs. Here is what the proposed new dictionaries look > like: > > > > > > dictionary RTCRtpParameters { > > DOMString receiverId = ""; > > // Provide a sequence of codec configurations. > > sequence<RTCRtpCodecParameters> codecs; > > // Provide a sequence of all the header extensions to be supported on all > the codecs. > > sequence<RTCRtpHeaderExtensionParameters> headerExtensions; > > // Provide the encoding parameters for the codecs. > > sequence<RTCRtpEncodingParameters> encodings; > > // Provide information on RTCP settings applying to all codecs. > > RTCRtcpParameters rtcp; > > }; > > > > dictionary RTCRtpCodecParameters { > > // Specify the name of the codec. > > DOMString name = ""; > > // Specify the codec payload type. > > unsigned short payloadType; > > unsigned long? clockRate = null; > > unsigned short? numChannels = 1; > > // Indicate what RTCP feedback messages are to be used with this codec. > > // This includes both Transport Layer and Payload-specific messages. > > sequence<RTCRtcpFeedback> rtcpFeedback; > > // Allow setting of codec-specific parameters (e.g. fmtp parameters). > > Dictionary parameters; > > // Specify the header extensions to be used with this codec. The header > extension IDs > > // are specified in RTCRtpParameters so they don't conflict. > > sequence<DOMString> headerExtensionURIs; > > }; > > > > dictionary RTCRtpHeaderExtensionParameters { > > DOMString uri; > > // The extension ID. Must be the same for all codecs enabling the header > extension. > > unsigned short id; > > // Whether the header extension is encrypted or not. > > boolean encrypt = false; > > }; > > > > dictionary RTCRtpEncodingParameters { > > // The SSRC to which the encoding parameters apply, if available. > > unsigned long? ssrc = null; > > // Payload Type (and therefore, codec) to which the encoding parameters > apply. > > unsigned short? codecPayloadType = null; > > // FEC configuration details, if used. > > RTCRtpFecParameters? fec = null; > > // Retransmission configuration details, if used. > > RTCRtpRtxParameters? rtx = null; > > double priority = 1.0; > > // Maximum bitrate. > > double? maxBitrate = null; > > double minQuality = 0; > > double framerateBias = 0.5; > > // Fraction of resolution to be used in this layer (for spatial > scalability). > > double resolutionScale = null; > > // Fraction of framerate to be supported in this layer (for temporal > scalability) > > double framerateScale = null; > > // Fraction of quality to be supported in this layer (for quality > scalability) > > double qualityScale = null; > > // Whether this layer is active. > > boolean active = true; > > // The layer identifier (used for either simulcast or SVC layers) > > DOMString? encodingId; > > // The layers on which this layer depends (used only for SVC layers) > > sequence<DOMString> dependencyEncodingIds; > > }; > > > > dictionary RTCRtcpParameters { > > // The SSRC used for RTCP. > > unsigned long ssrc; > > // Whether compound RTCP is used, or reduced size RTCP as specified in RFC > 5506 (false). > > boolean compound = true; > > // Whether RTP/RTCP multiplexing is used (as specified in RFC 5761). > > boolean mux = true; > > }; > > > >
Received on Monday, 16 June 2014 21:44:22 UTC