- From: Peter Thatcher <pthatcher@google.com>
- Date: Fri, 12 Sep 2014 22:15:44 -0700
- To: Bernard Aboba <Bernard.Aboba@microsoft.com>
- Cc: "public-ortc@w3.org" <public-ortc@w3.org>
On the receive side, if certain parameters don't need to be known, then I would say that they don't need to be set. Hopefully someday the header extensions will have enough information that nothing will be needed other than some IDs. But I don't think the sender should send more than one layer unless the parameters say to. Anything to simplify things for convenience purposes can be done via a library, so it doesn't seem that important to make it too automatic for the sender. On Wed, Sep 10, 2014 at 3:00 PM, Bernard Aboba <Bernard.Aboba@microsoft.com> wrote: > Currently within the ORTC API specification, Section 9.9 provides examples > of how to set up encoding parameters to support simulcast and/or scalable > video coding (SVC). > > > > While some developers might be interested in controlling exactly how > simulcast and SVC are used in their applications, other developers would > probably be happier if they could leave that to the browser. Looking at > the current specification, it appears to me that SVC configuration within an > RTCRtpReceiver might be unnecessary for some video codecs, and in addition, > it might be possible to dispense with configuring the SVC configuration > within an RTCRtpSender in some cases as well. > > > > Below is my understanding of how “automatic” use of SVC works on the > RTCRtpReceiver and how it might work on an RTCRtpSender. > Comments/corrections/suggestions welcome. > > > > In situations where a compliant decoder can decode any valid encoding, it > would appear to me that it is not necessary to set up the SVC configuration > within RTCRtpReceiver.receiver. Essentially, the decision whether to > utilize scalable video coding can be left to the sender. If the receiver > can handle anything that the sender can send, there isn’t even a need for > negotiation, such as an exchange of capabilities. > > > > To give a practical example, if a VP8 decoder can decode any valid VP8 > encoding, including temporal scalability, it seems to me that an > RTCRtpReceiver would not need to configure an SVC layer configuration within > RTCRtpEncodingParameters. In the event that a layering configuration is > provided (e.g. two temporal layers are expected) the RTCRtpSender should > still be free to send something else (e.g. maybe only 1 temporal layer, or > perhaps 3) without a resulting error. So it seems to me that for the > RTCRtpReceiver, configuration of SVC layering is somewhat extraneous. Also, > I’m not clear about the usefulness of having RTCRtpReceiver.getCapabilities > return a value for RTCRtpCodecCapability.maxTemporalLayers. Where > maxTemporalLayers is not set, the default interpretation could be “I can > handle the maximum temporal layers supported by the codec.” > > > > For an RTCRtpSender, it does seem useful for the developer to be able to > indicate whether to use temporal scalability or not. For example, in > peer-to-peer communication the overhead of SVC might not make sense, so it > might be useful to be able to specify only a single layer in > RTCRtpSender.send(). On the other hand, there might be situations where > the developer would just as soon leave the decision to use SVC up to the > browser. Rather than trying to adjust the number of temporal layers within > the application, the browser could decide how many layers might make sense. > > > > Currently within RTCRtpEncodingParameters, it doesn’t appear that a > developer can indicate to the browser “Send SVC if you think it is useful”. > For example, within the RTCRtpEncodingParameters dictionary there is no > “maxTemporalLayers” attribute. All you have is encodingId and a sequence > of dependencyEncodingIds. > > > > > > > > dictionary RTCRtpEncodingParameters { > > unsigned long ssrc; > > payloadtype codecPayloadType; > > RTCRtpFecParameters fec; > > RTCRtpRtxParameters rtx; > > double priority = 1.0; > > double maxBitrate; > > double minQuality = 0; > > double framerateBias = 0.5; > > double resolutionScale; > > double framerateScale; > > boolean active = true; > > DOMString encodingId; > > sequence<DOMString> dependencyEncodingIds; > > }; > > > >
Received on Saturday, 13 September 2014 05:16:52 UTC