Re: Some ideas on SVC support in WebRTC 1.0 (Take 2)

> For example for VP9 SVC with SL3TL2, it would look something like this (each layer encoding could have other attributes like mas bitrate, proction priority, etc):
>
> var encodings = [
>     {
>         //..other encoding parameters..
>         layers : [
>             {id:"sl0tl0", resolutionScale: 4.0, framerateScale: 2.0 },
>             {id:"sl0tl1", resolutionScale: 4.0, framerateScale: 1.0, dependencies: ["sl0tl0"] },
>             {id:"sl1tl0", resolutionScale: 2.0, framerateScale: 2.0, dependencies: ["sl0tl0"] },
>             {id:"sl1tl1", resolutionScale: 2.0, framerateScale: 1.0, dependencies: ["sl1tl0","sl0tl1"] },
>             {id:"sl2tl0", resolutionScale: 1.0, framerateScale: 2.0, dependencies: ["sl1tl0"] },
>             {id:"sl2tl1", resolutionScale: 1.0, framerateScale: 1.0, dependencies: ["sl1tl0","sl2tl0"] }
>         ]
>     }
> ];
>
> And for simulcast with two simulcast layers, the first with two temporal layers and the high res with three
>
> var encodings = [
>     {
>         rid: "lowres",
>         resolutionScale: 2.0,
>         //..other encoding parameters..
>         layers : [
>             {id:"tl0", framerateScale: 2.0 },
>             {id:"tl1", dependencies: ["tl0"] }
>         ]
>     },
>     {
>         rid: "highres",
>         encodingId: "H0",
>         resolutionScale: 1.0,
>         //..other encoding parameters..
>         layers : [
>             {id:"tl0", framerateScale: 4.0 },
>             {id:"tl1", framerateScale: 2.0, dependencies: ["tl0"] },
>             {id:"tl2", dependencies: ["tl1"] }
>         ]
>     }
> ];
>
>
> If we decide to get rid of the layer dependency definition, as for example VP8 and VP9 requires that each layer depends only on the lower temporal and spatial layer, we could have something like this instead:
>
> var encodings = [
>     {
>         //..other encoding parameters..
>         layers : [
>             {sid:0, tid:0, resolutionScale: 4.0, framerateScale: 2.0 },
>             {sid:0, tid:1, resolutionScale: 4.0, framerateScale: 1.0 },
>             {sid:1, tid:0, resolutionScale: 2.0, framerateScale: 2.0 },
>             {sid:1, tid:1, resolutionScale: 2.0, framerateScale: 1.0 },
>             {sid:2, tid:0, resolutionScale: 1.0, framerateScale: 2.0 },
>             {sid:2, tid:1, resolutionScale: 1.0, framerateScale: 1.0, }
>         ]
>     }
> ];
>
> And for simulcast:
>
> var encodings = [
>     {
>         rid: "lowres",
>         resolutionScale: 1.0,
>         //..other encoding parameters..
>         layers : [
>             {tid:0, framerateScale: 2.0 },
>             {tid:1}
>         ]
>     },
>     {
>         rid: "highres",
>         encodingId: "H0",
>         resolutionScale: 1.0,
>         //..other encoding parameters..
>         layers : [
>             {tid:0, framerateScale: 4.0 },
>             {tid:1, framerateScale: 2.0 },
>             {tid:2 }
>         ]
>     }
> ];

I like this approach (having SVC layers definition within a SINGLE
encoding entry rather than splitted on may encondings).

However, Bernard pointed out that such a design lacks the ability to
set different RTX/FEC options per layer, which I do not fully
understand since, at least in a similar thread in ORTC, he assumes
SRST. This is, a single RTP stream, meaning that just a single RTX/FEC
setting applies.




--
Iñaki Baz Castillo
<ibc@aliax.net>

Received on Wednesday, 11 July 2018 09:45:08 UTC