- From: Justin Uberti <juberti@google.com>
- Date: Sun, 11 May 2014 23:08:55 -0700
- To: Robin Raymond <robin@hookflash.com>
- Cc: Peter Thatcher <pthatcher@google.com>, Bernard Aboba <Bernard.Aboba@microsoft.com>, "public-ortc@w3.org" <public-ortc@w3.org>
- Message-ID: <CAOJ7v-0GDyT0dxOgjeRL_5vbVxMUHZ9JuAxeb8WEp6bh-yYCMA@mail.gmail.com>
Do we need them all right now? I would argue we could probably get by with a lot less for ORTC 1. On Sat, May 10, 2014 at 1:03 PM, Robin Raymond <robin@hookflash.com> wrote: > > I'm aware of at least 6 SVC modes of operation, but I believe the top 3 > we should be concerned with are "spacial", "temporal" and "quality". > > To support that you need to be able to have a minimal value per each > supported mode: > - minScale - don't go smaller than this size > - minFrameRate - don't send lower than this frame rate > - minQuality - don't let quality go less than this > > Those values would typically get used as the min requirements for a base > layer in SVC. > > Plus the "bias" doesn't work since it's only factoring "spacial" and > "temporal" priorities but neglects "quality". > > You need to have > - scale priority - relative to frame rate/quality > - frame rate priority - relative to scale/quality > - quality priority - relative to scale/frame rate > > Then you need in each layer: > - relative scale - relative scale from base (how much of an enhancement is > this layer) > - relative frame rate - relative frame rate from base (how much of an > enhancement is this layer) > - relative quality - relative to base (how much of an enhancement is this > layer) > > You need to know what the purpose of each layer is: scale, frame rate, > quality. > > And there are cross dependencies between layers operating in different SVC > modes. > > (and yes, there are use cases why you need all of these if you you to > support three SVC modes of operation) > > -Robin > > Peter Thatcher <pthatcher@google.com> > May 9, 2014 at 5:22 PM > > > > 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? > >
Attachments
- image/jpeg attachment: compose-unknown-contact.jpg
Received on Monday, 12 May 2014 06:09:43 UTC