W3C home > Mailing lists > Public > public-webrtc@w3.org > September 2013

Simulcast AND layering (was: Handling simulcast)

From: Martin Thomson <martin.thomson@gmail.com>
Date: Fri, 6 Sep 2013 10:55:31 -0700
Message-ID: <CABkgnnVwD_dCKzDSKBvLZdgNYjdDG610R=dMYJu7HiRgAxje5w@mail.gmail.com>
To: "Cullen Jennings (fluffy)" <fluffy@cisco.com>
Cc: "public-webrtc@w3.org" <public-webrtc@w3.org>
On 6 September 2013 10:38, Cullen Jennings (fluffy) <fluffy@cisco.com> wrote:
> The point Justin has made before is the solution below won't work for layered codecs and it would be nice to have the JS code be the same and let the browser take care of negotiating if we use simulcast or layered codecs.

I think that scalable codecs are an entirely different problem.  In
that you don't have any option to coerce the API into generating a
reasonable simulacrum of the same.  Simulcast allows that...sort of.

If you want a complete layering+simulcast solution, and I think that
we might ultimately need such a beast, then a set of constraints might
be appropriate.  If you want to go the indirected (i.e., constraints)
path, I'd go for a couple of levels of specificity:

 { "layers": [ "temporal", "spatial" ] }
 { "simulcast": [ "spatial" ] }

Where the labels are:
 temporal= create a layer or simulcast stream that omits every other frame
 spatial= create a layer/simulcast stream that is smaller (by half or
a quarter perhaps)
 quality= create a layer/simulcast stream that has fewer bits (again,
by half or some other factor we decide)
And the list always includes a final layer or simulcast track that has
all the pixels, bits and frames that are in the track.

And maybe something more specific if greater control is desired:
 { "layers": [ { "scalability": "temporal", "frameRate": 15 }, {
"scalability": "quality", "bitrate": 10 } ] }

One consequence of this is that this will manifest on the receiver end
as a single track.  The constituent parts of that track (the lower
layers, the simulcast components) will be inaccessible to the
application.  It will also appear as a track that has the properties
of the highest quality/scale/rate component, even when it doesn't.
Unless the track properties are reflective of the current state, which
could change constantly.  Ideally, there should be some way to look at
the track and learn about this property, so that applications don't
make strange assumptions about the properties of the track.
Received on Friday, 6 September 2013 17:55:58 UTC

This archive was generated by hypermail 2.3.1 : Monday, 23 October 2017 15:19:36 UTC