- From: Peter Thatcher <pthatcher@google.com>
- Date: Fri, 9 May 2014 14:22:08 -0700
- To: Bernard Aboba <Bernard.Aboba@microsoft.com>
- Cc: "public-ortc@w3.org" <public-ortc@w3.org>
- Message-ID: <CAJrXDUHBJgzhSa2qdfzTXycNAXjrDpUHcoq=HV=mXNNTfk1O7g@mail.gmail.com>
On Fri, May 9, 2014 at 12:06 PM, Bernard Aboba
<Bernard.Aboba@microsoft.com>wrote:
> [BA] For example, while the encodingId and dependencyEncodingIds can be
> used to set up layering, to do layering and simulcast together requires
> setting up multiple sender objects.
>
> [Peter] Why? Can't you express a mix here?
>
> [BA] As an example, let's say that in a single sender object we wanted to
> simulcast two streams, each with different resolution, and each of which
> support temporal scalability with two layers. So we have four streams
> overall. Let's say we have a "framescale" variable which means
> to use that fraction of the framerate from getUserMedia. Would this work?
>
> var encodings =[{
> layerId: "halfScaleBase",
> scale: 0.5,
> framescale: 0.5
> }, {
> layerId: "fullScaleBase",
> scale: 1.0,
> framescale: 0.5
> }, {
> layerId: "temporalEnhancemenToHalfScaleBase",
> layerDependencies: ["halfScaleBase"],
> scale: 0.5,
> framescale: 1.0
> }, {
> layerId: "temporalEnhancementToFullScaleBase",
> layerDependencies: ["fullScaleBase"],
> scale: 1.0,
> framescale: 1.0
> }]
>
>
That seems like a reasonable way to express what you want. Is it
implementable? Also, I'm not sure if I like the name "framescale".
Perhaps "relativeFramerate" or "framerateScale"?
>
> [Peter] That said, we do need to make sure that our RtpCapabilties object
> provides enough information to be able to do this. Do you think it's
> lacking something in particular?
>
> [BA] There are a few things that come to mind:
>
> a. One is a statement about what types of scalability a given
> encoder/decoder supports. Another is how many layers they support within
> that type. These can perhaps
> be combined into a capability array: [temporalMaxLayers,
> spatialMaxLayers, qualityMaxLayers] where setting MaxLayers of a given type
> to 0 means "I don't support it at all".
>
This:
int temporalLayers;
int spatialLayers;
int qualityLayers;
sounds good to me, although I'm not sure about the quality layers, since we
don't have a way to express those in RtpParameters yet (do we?).
Now where should these go? Should they be in RtpCapabilities directly? Or
are they codec-specific, so we need to so something more fancy, like
RtpVideoEncodingCapabilities { DOMString codecName; int temporalLayers;
... }, and then have a sequence<RtpVideoEncodingCapabilities> in
RtpCapabilities (much like there is an array of RtpEncodingParameters in
RtpParameters)?
>
> b. Another is a statement about what types of simulcast is supported
> within an object and how many streams are supported. This also might be
> expressed in a similar array.
>
int temporalLayers;
int spatialLayers;
int simulcastLayers;
?
Although, I don't quite understand why there would be a limit. You can
create as many RtpSenders as you want, right?
>
> [BA] Some other questions relating to whether these attributes make sense
> for SVC at all.
> For example, priority makes sense for specifying the priority between
> audio and video – but what does it mean when it is specified in individual
> SVC layers?
>
> [Peter] Maybe it wouldn't. But it does for simulcast, doesn't it?
>
> [BA] Yes, for simulcast it makes sense.
>
> [BA] Similarly, minQuality might make some sense for a base layer (as
> might minFrameRate or minResolution), but what does it mean to specify this
> at each SVC layer?
>
> [Peter] Maybe for SVC it doesn't. But it does for simulcast, doesn't it?
>
> [BA] "Quality" has a specific meaning within SVC (e.g. "quality
> scalability"). So I'm not sure the variable is intended to have the same
> meaning in simulcast.
>
I think for quality scalability, we'd need a different field.
"qualityScale"?
> [BA] Also, is it necessary to provide a maxBitrate knob for each layer in
> SVC?
>
> [Peter] Again, maybe not all knobs make sense for SVC. So if you're
> doing SVC, don't use the knobs that don't make sense.
>
> [BA] The knobs may make sense at an overall level -- as in "I'd like to
> impose a maximum Bit rate on the combination of layers".
>
>
That last bit about a maximum for all layers, I'm not sure how to solve.
I think Justin had an idea about how to do it previously. Justin? Are
you reading this thread?
Received on Friday, 9 May 2014 21:23:16 UTC