SlideShare a Scribd company logo
1 of 48
Download to read offline
SFU’s, Simulcast and SVC
What’s new in WebRTC?
Lorenzo Miniero
@elminiero
IIT Real-Time Communication 2019 – WebRTC Track
October 15th 2019, Chicago, IL, USA
A few words about me
Lorenzo Miniero
• Ph.D @ UniNA
• Chairman @ Meetecho
• Main author of Janus®
Contacts and info
• lorenzo@meetecho.com
• https://twitter.com/elminiero
• https://www.slideshare.net/LorenzoMiniero
WebRTC topologies: full-mesh
https://webrtchacks.com/webrtc-beyond-one-one/
WebRTC topologies: MCU (Multipoint Control Unit)
https://webrtchacks.com/webrtc-beyond-one-one/
WebRTC topologies: SFU (Selective Forwarding Unit)
https://webrtchacks.com/webrtc-beyond-one-one/
Simulcast in a nutshell
https://webrtchacks.com/sfu-simulcast/
SVC as a different way to encode multiple tracks
https://webrtchacks.com/chrome-vp9-svc/
Simulcast vs. SVC
• Simulcast
• Same source, same m-line
• Streams of different “quality” are separate tracks
• Each track is a different SSRC
• Each track can be decoded indepedently from others
• SVC
• Same source, same m-line
• Streams of different “quality” are layers of the same “thing”
• All tracks share the same SSRC (since they’re layers)
• Each track depends on the previous to be decoded
• Less bandwidth, but more CPU intensive
Fun fact – Simulcast in browsers also enables temporal scalability
Allows to drop to lower framerate without sacrificing quality
Simulcast vs. SVC
• Simulcast
• Same source, same m-line
• Streams of different “quality” are separate tracks
• Each track is a different SSRC
• Each track can be decoded indepedently from others
• SVC
• Same source, same m-line
• Streams of different “quality” are layers of the same “thing”
• All tracks share the same SSRC (since they’re layers)
• Each track depends on the previous to be decoded
• Less bandwidth, but more CPU intensive
Fun fact – Simulcast in browsers also enables temporal scalability
Allows to drop to lower framerate without sacrificing quality
Simulcast vs. SVC
• Simulcast
• Same source, same m-line
• Streams of different “quality” are separate tracks
• Each track is a different SSRC
• Each track can be decoded indepedently from others
• SVC
• Same source, same m-line
• Streams of different “quality” are layers of the same “thing”
• All tracks share the same SSRC (since they’re layers)
• Each track depends on the previous to be decoded
• Less bandwidth, but more CPU intensive
Fun fact – Simulcast in browsers also enables temporal scalability
Allows to drop to lower framerate without sacrificing quality
Both only make sense with an SFU on the path
• Browsers can’t negotiate receiving part of simulcast
• ... unless you’re Philipp Hancke’s browser!
• https://webrtchacks.com/a-playground-for-simulcast-without-an-sfu/
• It wouldn’t make much sense anyway!
• Why receive all “versions” when you only need one?
• Job for a Selective Forwarding Unit!
• Pretty much all SFU’s support simulcast today
• Janus (wink wink! )
• Jitsi
• mediasoup
• Medooze
• ...
• Most support some flavour of SVC as well (more on that later)
Both only make sense with an SFU on the path
• Browsers can’t negotiate receiving part of simulcast
• ... unless you’re Philipp Hancke’s browser!
• https://webrtchacks.com/a-playground-for-simulcast-without-an-sfu/
• It wouldn’t make much sense anyway!
• Why receive all “versions” when you only need one?
• Job for a Selective Forwarding Unit!
• Pretty much all SFU’s support simulcast today
• Janus (wink wink! )
• Jitsi
• mediasoup
• Medooze
• ...
• Most support some flavour of SVC as well (more on that later)
Both only make sense with an SFU on the path
• Browsers can’t negotiate receiving part of simulcast
• ... unless you’re Philipp Hancke’s browser!
• https://webrtchacks.com/a-playground-for-simulcast-without-an-sfu/
• It wouldn’t make much sense anyway!
• Why receive all “versions” when you only need one?
• Job for a Selective Forwarding Unit!
• Pretty much all SFU’s support simulcast today
• Janus (wink wink! )
• Jitsi
• mediasoup
• Medooze
• ...
• Most support some flavour of SVC as well (more on that later)
Both only make sense with an SFU on the path
• Browsers can’t negotiate receiving part of simulcast
• ... unless you’re Philipp Hancke’s browser!
• https://webrtchacks.com/a-playground-for-simulcast-without-an-sfu/
• It wouldn’t make much sense anyway!
• Why receive all “versions” when you only need one?
• Job for a Selective Forwarding Unit!
• Pretty much all SFU’s support simulcast today
• Janus (wink wink! )
• Jitsi
• mediasoup
• Medooze
• ...
• Most support some flavour of SVC as well (more on that later)
Both only make sense with an SFU on the path
• Browsers can’t negotiate receiving part of simulcast
• ... unless you’re Philipp Hancke’s browser!
• https://webrtchacks.com/a-playground-for-simulcast-without-an-sfu/
• It wouldn’t make much sense anyway!
• Why receive all “versions” when you only need one?
• Job for a Selective Forwarding Unit!
• Pretty much all SFU’s support simulcast today
• Janus (wink wink! )
• Jitsi
• mediasoup
• Medooze
• ...
• Most support some flavour of SVC as well (more on that later)
Tackling simulcast at the IETF 104 hackathon
https://trac.ietf.org/trac/ietf/meeting/wiki/104hackathon/webrtc
Enabling simulcast the ugly way (SDP munging)
a=ssrc:659652645 cname:Taj3/ieCnLbsUFoH
a=ssrc:659652645 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:659652645 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:659652645 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:98148385 cname:Taj3/ieCnLbsUFoH
a=ssrc:98148385 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:98148385 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:98148385 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc-group:FID 659652645 98148385
Enabling simulcast the ugly way (SDP munging)
a=ssrc:659652645 cname:Taj3/ieCnLbsUFoH
a=ssrc:659652645 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:659652645 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:659652645 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:98148385 cname:Taj3/ieCnLbsUFoH
a=ssrc:98148385 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:98148385 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:98148385 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc-group:FID 659652645 98148385
Enabling simulcast the ugly way (SDP munging)
a=ssrc:659652645 cname:Taj3/ieCnLbsUFoH
a=ssrc:659652645 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:659652645 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:659652645 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:98148385 cname:Taj3/ieCnLbsUFoH
a=ssrc:98148385 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:98148385 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:98148385 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1982135572 cname:Taj3/ieCnLbsUFoH
a=ssrc:1982135572 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1982135572 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:1982135572 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:2523084908 cname:Taj3/ieCnLbsUFoH
a=ssrc:2523084908 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:2523084908 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:2523084908 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:3604909222 cname:Taj3/ieCnLbsUFoH
a=ssrc:3604909222 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:3604909222 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:3604909222 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1893605472 cname:Taj3/ieCnLbsUFoH
a=ssrc:1893605472 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1893605472 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:1893605472 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc-group:SIM 659652645 1982135572 3604909222
a=ssrc-group:FID 659652645 98148385
a=ssrc-group:FID 1982135572 2523084908
a=ssrc-group:FID 3604909222 1893605472
Enabling simulcast the ugly way (SDP munging)
a=ssrc:659652645 cname:Taj3/ieCnLbsUFoH
a=ssrc:659652645 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:659652645 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:659652645 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:98148385 cname:Taj3/ieCnLbsUFoH
a=ssrc:98148385 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:98148385 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:98148385 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1982135572 cname:Taj3/ieCnLbsUFoH
a=ssrc:1982135572 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1982135572 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:1982135572 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:2523084908 cname:Taj3/ieCnLbsUFoH
a=ssrc:2523084908 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:2523084908 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:2523084908 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:3604909222 cname:Taj3/ieCnLbsUFoH
a=ssrc:3604909222 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:3604909222 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:3604909222 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1893605472 cname:Taj3/ieCnLbsUFoH
a=ssrc:1893605472 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1893605472 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:1893605472 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc-group:SIM 659652645 1982135572 3604909222
a=ssrc-group:FID 659652645 98148385
a=ssrc-group:FID 1982135572 2523084908
a=ssrc-group:FID 3604909222 1893605472
Enabling simulcast the ugly way (SDP munging)
a=ssrc:659652645 cname:Taj3/ieCnLbsUFoH
a=ssrc:659652645 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:659652645 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:659652645 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:98148385 cname:Taj3/ieCnLbsUFoH
a=ssrc:98148385 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:98148385 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:98148385 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1982135572 cname:Taj3/ieCnLbsUFoH
a=ssrc:1982135572 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1982135572 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:1982135572 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:2523084908 cname:Taj3/ieCnLbsUFoH
a=ssrc:2523084908 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:2523084908 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:2523084908 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:3604909222 cname:Taj3/ieCnLbsUFoH
a=ssrc:3604909222 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:3604909222 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:3604909222 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1893605472 cname:Taj3/ieCnLbsUFoH
a=ssrc:1893605472 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1893605472 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:1893605472 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc-group:SIM 659652645 1982135572 3604909222
a=ssrc-group:FID 659652645 98148385
a=ssrc-group:FID 1982135572 2523084908
a=ssrc-group:FID 3604909222 1893605472
Enabling simulcast the ugly way (SDP munging)
a=ssrc:659652645 cname:Taj3/ieCnLbsUFoH
a=ssrc:659652645 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:659652645 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:659652645 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:98148385 cname:Taj3/ieCnLbsUFoH
a=ssrc:98148385 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:98148385 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:98148385 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1982135572 cname:Taj3/ieCnLbsUFoH
a=ssrc:1982135572 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1982135572 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:1982135572 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:2523084908 cname:Taj3/ieCnLbsUFoH
a=ssrc:2523084908 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:2523084908 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:2523084908 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:3604909222 cname:Taj3/ieCnLbsUFoH
a=ssrc:3604909222 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:3604909222 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:3604909222 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1893605472 cname:Taj3/ieCnLbsUFoH
a=ssrc:1893605472 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc:1893605472 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk
a=ssrc:1893605472 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb
a=ssrc-group:SIM 659652645 1982135572 3604909222
a=ssrc-group:FID 659652645 98148385
a=ssrc-group:FID 1982135572 2523084908
a=ssrc-group:FID 3604909222 1893605472
Hardcoded table for simulcast bitrates
https://webrtchacks.com/a-playground-for-simulcast-without-an-sfu/
Testing simulcasting via SDP munging
https://www.meetecho.com/blog/simulcast-janus-ssrc/
Enter “rid” (Firefox >= 46)
var sender = pc.getSenders().find(s => s.track.kind == "video");
var parameters = sender.getParameters();
if(!parameters)
parameters = {};
parameters.encodings = [
{ rid: "h", active: true, maxBitrate: 900000 },
{ rid: "m", active: true, maxBitrate: 300000,
scaleResolutionDownBy: 2 },
{ rid: "l", active: true, maxBitrate: 100000,
scaleResolutionDownBy: 4 }
];
sender.setParameters(parameters);
Encoding simulcast info in the SDP offer
a=extmap:6/sendonly urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
[..]
a=rid:h send
a=rid:m send
a=rid:l send
a=simulcast: send rid=h;m;l
a=ssrc:2232294953 cname:{d31e1342-72d7-45e3-9b8d-9419cf7121b6}
a=ssrc:2149721810 cname:{d31e1342-72d7-45e3-9b8d-9419cf7121b6}
a=ssrc:2539596807 cname:{d31e1342-72d7-45e3-9b8d-9419cf7121b6}
Encoding simulcast info in the SDP answer
a=extmap:6/recvonly urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
[..]
a=rid:h recv
a=rid:m recv
a=rid:l recv
a=simulcast: recv rid=h;m;l
Testing Firefox’s flavour of rid-based simulcasting
https://www.meetecho.com/blog/simulcast-janus-ssrc/
Configuring the simulcast envelope the “spec” way
pc.addTransceiver(track, {
direction: "sendrecv",
streams: [stream],
sendEncodings: [
{ rid: "h", active: true, maxBitrate: 900000 },
{ rid: "m", active: true, maxBitrate: 300000,
scaleResolutionDownBy: 2 },
{ rid: "l", active: true, maxBitrate: 100000,
scaleResolutionDownBy: 4 }
]
});
https://www.w3.org/TR/webrtc/#simulcast-functionality
Hey, where’s my SSRC?!
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
[..]
a=rid:h send
a=rid:m send
a=rid:l send
a=simulcast:send h;m;l
SDP answer
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
[..]
a=rid:h recv
a=rid:m recv
a=rid:l recv
a=simulcast: recv h;m;l
Why remove the SSRC from the SDP?
• Many implementations rely on the SSRC for demultiplexing
• RTP/RTCP from multiple streams all muxed together
• SSRC used to recognize one stream from another
• Missing SSRCs break most of those applications
• Chrome’s perspective: the problem of mapping “rid” to “ssrc”
• Both are in the SDP, but how are they mapped?
• Order-based just a convention, and at the time not specified anywhere
• https://tools.ietf.org/html/draft-alvestrand-mmusic-simulcast-ssrc-00
Solution: parse rid RTP extension on the recipient side
• SSRC in related packet allows for specific rid↔ssrc association
• Once you know the SSRC, keep on multiplexing on that
Why remove the SSRC from the SDP?
• Many implementations rely on the SSRC for demultiplexing
• RTP/RTCP from multiple streams all muxed together
• SSRC used to recognize one stream from another
• Missing SSRCs break most of those applications
• Chrome’s perspective: the problem of mapping “rid” to “ssrc”
• Both are in the SDP, but how are they mapped?
• Order-based just a convention, and at the time not specified anywhere
• https://tools.ietf.org/html/draft-alvestrand-mmusic-simulcast-ssrc-00
Solution: parse rid RTP extension on the recipient side
• SSRC in related packet allows for specific rid↔ssrc association
• Once you know the SSRC, keep on multiplexing on that
Why remove the SSRC from the SDP?
• Many implementations rely on the SSRC for demultiplexing
• RTP/RTCP from multiple streams all muxed together
• SSRC used to recognize one stream from another
• Missing SSRCs break most of those applications
• Chrome’s perspective: the problem of mapping “rid” to “ssrc”
• Both are in the SDP, but how are they mapped?
• Order-based just a convention, and at the time not specified anywhere
• https://tools.ietf.org/html/draft-alvestrand-mmusic-simulcast-ssrc-00
Solution: parse rid RTP extension on the recipient side
• SSRC in related packet allows for specific rid↔ssrc association
• Once you know the SSRC, keep on multiplexing on that
Mapping “rid” values to SSRC
Mapping “rid” values to SSRC
Testing rid-based simulcasting via sendEncodings
https://www.meetecho.com/blog/simulcast-janus-ssrc/
What about SVC?
https://webrtchacks.com/chrome-vp9-svc/
Currently only available in Chrome, and behind a flag
/opt/google/chrome/google-chrome
--user-data-dir=/home/user/customprofile
--no-first-run
--force-fieldtrials=
WebRTC-SupportVP9SVC/EnabledByFlag_2SL3TL/
Testing VP9 SVC in Chrome
https://www.meetecho.com/blog/vp9-svc-in-janus-meetecho-cosmo/
AV1 is coming! (and SVC is mandated)
https://aomediacodec.github.io/av1-spec/
Prefefined scalability modes
Name Spatial Layers Resolution Ratio Temporal Layers Inter-layer dependency
L1T2 1 2
L1T3 1 3
L2T1 2 2:1 1 Yes
L2T2 2 2:1 2 Yes
L2T3 2 2:1 3 Yes
S2T1 2 2:1 1 No
S2T2 2 2:1 2 No
S2T3 2 2:1 3 No
L2T1h 2 1.5:1 1 Yes
L2T2h 2 1.5:1 2 Yes
L2T3h 2 1.5:1 3 Yes
S2T1h 2 1.5:1 1 No
S2T2h 2 1.5:1 2 No
S2T3h 2 1.5:1 3 No
... ... ... ... ...
https://w3c.github.io/webrtc-svc/#scalabilitymodes*
Prefefined scalability modes
Name Spatial Layers Resolution Ratio Temporal Layers Inter-layer dependency
... ... ... ... ...
L3T1 3 2:1 1 Yes
L3T2 3 2:1 2 Yes
L3T3 3 2:1 3 Yes
S3T1 3 2:1 1 No
S3T2 3 2:1 2 No
S3T3 3 2:1 3 No
L3T2_KEY 3 2:1 2 Yes
L3T3_KEY 3 2:1 3 Yes
L4T5_KEY 4 2:1 5 Yes
L4T7_KEY 4 2:1 7 Yes
L3T2_KEY_SHIFT 3 2:1 2 Yes
L3T3_KEY_SHIFT 3 2:1 3 Yes
L4T5_KEY_SHIFT 4 2:1 5 Yes
L4T7_KEY_SHIFT 4 2:1 7 Yes
https://w3c.github.io/webrtc-svc/#scalabilitymodes*
Programmable SVC – IETF 105 hackathon
https://twitter.com/intenttoship/status/1152955435898605568
WebRTC F2F during W3C TPAC 2019
https://www.w3.org/2011/04/webrtc/wiki/September_19-20_2019
What it may look like in the future
pc.addTransceiver(track, {
direction: "sendrecv",
streams: [stream],
sendEncodings: [
{
scalabilityMode: "L3T3",
maxBitrate: 600000,
maxFramerate: 30,
spatialLayers: [
{ active: true, maxBitrate: 50000, temporalLayerWeights: [0.6, 0.2, 0.2] },
{ active: true, maxBitrate: 150000, temporalLayerWeights: [0.5, 0.4, 0.2] },
{ active: false, temporalLayerWeights: [0.6, 0.3, 0.3] }
]
},
]
});
https://github.com/w3c/webrtc-svc/issues/14
What’s next? – IETF Hackathon in Singapore!
https://www.ietf.org/how/runningcode/hackathons/106-hackathon/
Thanks! Questions? Comments?
Get in touch!
• https://twitter.com/elminiero
• https://twitter.com/meetecho
• https://www.meetecho.com

More Related Content

What's hot

マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
Takuya ASADA
 
Security and Multi-Tenancy with Apache Pulsar in Yahoo! (Verizon Media) - Pul...
Security and Multi-Tenancy with Apache Pulsar in Yahoo! (Verizon Media) - Pul...Security and Multi-Tenancy with Apache Pulsar in Yahoo! (Verizon Media) - Pul...
Security and Multi-Tenancy with Apache Pulsar in Yahoo! (Verizon Media) - Pul...
StreamNative
 

What's hot (20)

Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
Dockerクイックツアー
 
cluster-monitoringで困ったこと学んだこと
cluster-monitoringで困ったこと学んだことcluster-monitoringで困ったこと学んだこと
cluster-monitoringで困ったこと学んだこと
 
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...VirtualBox と Rocky Linux 8 で始める Pacemaker  ~ VirtualBox でも STONITH 機能が試せる! Vi...
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
 
OpenStackをコマンドで攻める! 構築・運用とトラブル解決 - OpenStack最新情報セミナー 2014年6月
OpenStackをコマンドで攻める! 構築・運用とトラブル解決 - OpenStack最新情報セミナー 2014年6月OpenStackをコマンドで攻める! 構築・運用とトラブル解決 - OpenStack最新情報セミナー 2014年6月
OpenStackをコマンドで攻める! 構築・運用とトラブル解決 - OpenStack最新情報セミナー 2014年6月
 
Apache Nifi Crash Course
Apache Nifi Crash CourseApache Nifi Crash Course
Apache Nifi Crash Course
 
KubeVirt 101
KubeVirt 101KubeVirt 101
KubeVirt 101
 
Introduction to Kubernetes
Introduction to KubernetesIntroduction to Kubernetes
Introduction to Kubernetes
 
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
 
How to Prepare for CKA Exam
How to Prepare for CKA ExamHow to Prepare for CKA Exam
How to Prepare for CKA Exam
 
オンプレでPrivate Registry使ったDockerイメージの運用について
オンプレでPrivate Registry使ったDockerイメージの運用についてオンプレでPrivate Registry使ったDockerイメージの運用について
オンプレでPrivate Registry使ったDockerイメージの運用について
 
Open vSwitch Offload: Conntrack and the Upstream Kernel
Open vSwitch Offload: Conntrack and the Upstream KernelOpen vSwitch Offload: Conntrack and the Upstream Kernel
Open vSwitch Offload: Conntrack and the Upstream Kernel
 
WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編
 
Machine configoperatorのちょっとイイかもしれない話
Machine configoperatorのちょっとイイかもしれない話 Machine configoperatorのちょっとイイかもしれない話
Machine configoperatorのちょっとイイかもしれない話
 
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
 
Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介Docker volume基礎/Project Longhorn紹介
Docker volume基礎/Project Longhorn紹介
 
OpenStack Neutron's Distributed Virtual Router
OpenStack Neutron's Distributed Virtual RouterOpenStack Neutron's Distributed Virtual Router
OpenStack Neutron's Distributed Virtual Router
 
Cluster API によるKubernetes環境のライフサイクル管理とマルチクラウド環境での適用
Cluster API によるKubernetes環境のライフサイクル管理とマルチクラウド環境での適用Cluster API によるKubernetes環境のライフサイクル管理とマルチクラウド環境での適用
Cluster API によるKubernetes環境のライフサイクル管理とマルチクラウド環境での適用
 
Scaling WebRTC applications with Janus
Scaling WebRTC applications with JanusScaling WebRTC applications with Janus
Scaling WebRTC applications with Janus
 
Security and Multi-Tenancy with Apache Pulsar in Yahoo! (Verizon Media) - Pul...
Security and Multi-Tenancy with Apache Pulsar in Yahoo! (Verizon Media) - Pul...Security and Multi-Tenancy with Apache Pulsar in Yahoo! (Verizon Media) - Pul...
Security and Multi-Tenancy with Apache Pulsar in Yahoo! (Verizon Media) - Pul...
 

Similar to Simulcast/SVC @ IIT-RTC 2019

Similar to Simulcast/SVC @ IIT-RTC 2019 (20)

WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023
 
Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020
 
Scaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONEDScaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONED
 
Janus + Audio @ Open Source World
Janus + Audio @ Open Source WorldJanus + Audio @ Open Source World
Janus + Audio @ Open Source World
 
Janus @ ClueCon 2019
Janus @ ClueCon 2019Janus @ ClueCon 2019
Janus @ ClueCon 2019
 
Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021
 
WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022
 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConference
 
The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023
 
Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020
 
WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021
 
WebRTC, RED and Janus @ ClueCon21
WebRTC, RED and Janus @ ClueCon21WebRTC, RED and Janus @ ClueCon21
WebRTC, RED and Janus @ ClueCon21
 
Janus/SIP @ OpenSIPS 2019
Janus/SIP @ OpenSIPS 2019Janus/SIP @ OpenSIPS 2019
Janus/SIP @ OpenSIPS 2019
 
Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021
 
Fuzzing RTC @ Kamailio World 2019
Fuzzing RTC @ Kamailio World 2019Fuzzing RTC @ Kamailio World 2019
Fuzzing RTC @ Kamailio World 2019
 
Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017Janus/Asterisk @ Astricon 2017
Janus/Asterisk @ Astricon 2017
 
15年前に作ったアプリを現在に蘇らせてみた話
15年前に作ったアプリを現在に蘇らせてみた話15年前に作ったアプリを現在に蘇らせてみた話
15年前に作ったアプリを現在に蘇らせてみた話
 
Euroclojure2014: Schema & Swagger - making your Clojure web APIs more awesome
Euroclojure2014: Schema & Swagger - making your Clojure web APIs more awesomeEuroclojure2014: Schema & Swagger - making your Clojure web APIs more awesome
Euroclojure2014: Schema & Swagger - making your Clojure web APIs more awesome
 
Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021
 
Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019Fuzzing Janus @ IPTComm 2019
Fuzzing Janus @ IPTComm 2019
 

More from Lorenzo Miniero

More from Lorenzo Miniero (13)

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Getting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC ServerGetting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC Server
 
BWE in Janus
BWE in JanusBWE in Janus
BWE in Janus
 
Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023
 
Become a rockstar using FOSS!
Become a rockstar using FOSS!Become a rockstar using FOSS!
Become a rockstar using FOSS!
 
SIP transfer with Janus/WebRTC @ OpenSIPS 2022
SIP transfer with Janus/WebRTC @ OpenSIPS 2022SIP transfer with Janus/WebRTC @ OpenSIPS 2022
SIP transfer with Janus/WebRTC @ OpenSIPS 2022
 
Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021
 
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPSVirtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
 
Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020Insertable Streams and E2EE @ ClueCon2020
Insertable Streams and E2EE @ ClueCon2020
 
Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020Janus Workshop @ ClueCon 2020
Janus Workshop @ ClueCon 2020
 
Turning live events to virtual with Janus
Turning live events to virtual with JanusTurning live events to virtual with Janus
Turning live events to virtual with Janus
 
Janus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingJanus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 Beijing
 
Welcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of JanusWelcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of Janus
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 

Simulcast/SVC @ IIT-RTC 2019

  • 1. SFU’s, Simulcast and SVC What’s new in WebRTC? Lorenzo Miniero @elminiero IIT Real-Time Communication 2019 – WebRTC Track October 15th 2019, Chicago, IL, USA
  • 2. A few words about me Lorenzo Miniero • Ph.D @ UniNA • Chairman @ Meetecho • Main author of Janus® Contacts and info • lorenzo@meetecho.com • https://twitter.com/elminiero • https://www.slideshare.net/LorenzoMiniero
  • 4. WebRTC topologies: MCU (Multipoint Control Unit) https://webrtchacks.com/webrtc-beyond-one-one/
  • 5. WebRTC topologies: SFU (Selective Forwarding Unit) https://webrtchacks.com/webrtc-beyond-one-one/
  • 6. Simulcast in a nutshell https://webrtchacks.com/sfu-simulcast/
  • 7. SVC as a different way to encode multiple tracks https://webrtchacks.com/chrome-vp9-svc/
  • 8. Simulcast vs. SVC • Simulcast • Same source, same m-line • Streams of different “quality” are separate tracks • Each track is a different SSRC • Each track can be decoded indepedently from others • SVC • Same source, same m-line • Streams of different “quality” are layers of the same “thing” • All tracks share the same SSRC (since they’re layers) • Each track depends on the previous to be decoded • Less bandwidth, but more CPU intensive Fun fact – Simulcast in browsers also enables temporal scalability Allows to drop to lower framerate without sacrificing quality
  • 9. Simulcast vs. SVC • Simulcast • Same source, same m-line • Streams of different “quality” are separate tracks • Each track is a different SSRC • Each track can be decoded indepedently from others • SVC • Same source, same m-line • Streams of different “quality” are layers of the same “thing” • All tracks share the same SSRC (since they’re layers) • Each track depends on the previous to be decoded • Less bandwidth, but more CPU intensive Fun fact – Simulcast in browsers also enables temporal scalability Allows to drop to lower framerate without sacrificing quality
  • 10. Simulcast vs. SVC • Simulcast • Same source, same m-line • Streams of different “quality” are separate tracks • Each track is a different SSRC • Each track can be decoded indepedently from others • SVC • Same source, same m-line • Streams of different “quality” are layers of the same “thing” • All tracks share the same SSRC (since they’re layers) • Each track depends on the previous to be decoded • Less bandwidth, but more CPU intensive Fun fact – Simulcast in browsers also enables temporal scalability Allows to drop to lower framerate without sacrificing quality
  • 11. Both only make sense with an SFU on the path • Browsers can’t negotiate receiving part of simulcast • ... unless you’re Philipp Hancke’s browser! • https://webrtchacks.com/a-playground-for-simulcast-without-an-sfu/ • It wouldn’t make much sense anyway! • Why receive all “versions” when you only need one? • Job for a Selective Forwarding Unit! • Pretty much all SFU’s support simulcast today • Janus (wink wink! ) • Jitsi • mediasoup • Medooze • ... • Most support some flavour of SVC as well (more on that later)
  • 12. Both only make sense with an SFU on the path • Browsers can’t negotiate receiving part of simulcast • ... unless you’re Philipp Hancke’s browser! • https://webrtchacks.com/a-playground-for-simulcast-without-an-sfu/ • It wouldn’t make much sense anyway! • Why receive all “versions” when you only need one? • Job for a Selective Forwarding Unit! • Pretty much all SFU’s support simulcast today • Janus (wink wink! ) • Jitsi • mediasoup • Medooze • ... • Most support some flavour of SVC as well (more on that later)
  • 13. Both only make sense with an SFU on the path • Browsers can’t negotiate receiving part of simulcast • ... unless you’re Philipp Hancke’s browser! • https://webrtchacks.com/a-playground-for-simulcast-without-an-sfu/ • It wouldn’t make much sense anyway! • Why receive all “versions” when you only need one? • Job for a Selective Forwarding Unit! • Pretty much all SFU’s support simulcast today • Janus (wink wink! ) • Jitsi • mediasoup • Medooze • ... • Most support some flavour of SVC as well (more on that later)
  • 14. Both only make sense with an SFU on the path • Browsers can’t negotiate receiving part of simulcast • ... unless you’re Philipp Hancke’s browser! • https://webrtchacks.com/a-playground-for-simulcast-without-an-sfu/ • It wouldn’t make much sense anyway! • Why receive all “versions” when you only need one? • Job for a Selective Forwarding Unit! • Pretty much all SFU’s support simulcast today • Janus (wink wink! ) • Jitsi • mediasoup • Medooze • ... • Most support some flavour of SVC as well (more on that later)
  • 15. Both only make sense with an SFU on the path • Browsers can’t negotiate receiving part of simulcast • ... unless you’re Philipp Hancke’s browser! • https://webrtchacks.com/a-playground-for-simulcast-without-an-sfu/ • It wouldn’t make much sense anyway! • Why receive all “versions” when you only need one? • Job for a Selective Forwarding Unit! • Pretty much all SFU’s support simulcast today • Janus (wink wink! ) • Jitsi • mediasoup • Medooze • ... • Most support some flavour of SVC as well (more on that later)
  • 16. Tackling simulcast at the IETF 104 hackathon https://trac.ietf.org/trac/ietf/meeting/wiki/104hackathon/webrtc
  • 17. Enabling simulcast the ugly way (SDP munging) a=ssrc:659652645 cname:Taj3/ieCnLbsUFoH a=ssrc:659652645 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:659652645 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:659652645 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:98148385 cname:Taj3/ieCnLbsUFoH a=ssrc:98148385 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:98148385 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:98148385 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc-group:FID 659652645 98148385
  • 18. Enabling simulcast the ugly way (SDP munging) a=ssrc:659652645 cname:Taj3/ieCnLbsUFoH a=ssrc:659652645 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:659652645 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:659652645 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:98148385 cname:Taj3/ieCnLbsUFoH a=ssrc:98148385 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:98148385 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:98148385 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc-group:FID 659652645 98148385
  • 19. Enabling simulcast the ugly way (SDP munging) a=ssrc:659652645 cname:Taj3/ieCnLbsUFoH a=ssrc:659652645 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:659652645 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:659652645 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:98148385 cname:Taj3/ieCnLbsUFoH a=ssrc:98148385 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:98148385 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:98148385 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1982135572 cname:Taj3/ieCnLbsUFoH a=ssrc:1982135572 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1982135572 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:1982135572 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:2523084908 cname:Taj3/ieCnLbsUFoH a=ssrc:2523084908 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:2523084908 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:2523084908 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:3604909222 cname:Taj3/ieCnLbsUFoH a=ssrc:3604909222 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:3604909222 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:3604909222 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1893605472 cname:Taj3/ieCnLbsUFoH a=ssrc:1893605472 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1893605472 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:1893605472 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc-group:SIM 659652645 1982135572 3604909222 a=ssrc-group:FID 659652645 98148385 a=ssrc-group:FID 1982135572 2523084908 a=ssrc-group:FID 3604909222 1893605472
  • 20. Enabling simulcast the ugly way (SDP munging) a=ssrc:659652645 cname:Taj3/ieCnLbsUFoH a=ssrc:659652645 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:659652645 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:659652645 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:98148385 cname:Taj3/ieCnLbsUFoH a=ssrc:98148385 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:98148385 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:98148385 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1982135572 cname:Taj3/ieCnLbsUFoH a=ssrc:1982135572 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1982135572 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:1982135572 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:2523084908 cname:Taj3/ieCnLbsUFoH a=ssrc:2523084908 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:2523084908 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:2523084908 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:3604909222 cname:Taj3/ieCnLbsUFoH a=ssrc:3604909222 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:3604909222 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:3604909222 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1893605472 cname:Taj3/ieCnLbsUFoH a=ssrc:1893605472 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1893605472 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:1893605472 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc-group:SIM 659652645 1982135572 3604909222 a=ssrc-group:FID 659652645 98148385 a=ssrc-group:FID 1982135572 2523084908 a=ssrc-group:FID 3604909222 1893605472
  • 21. Enabling simulcast the ugly way (SDP munging) a=ssrc:659652645 cname:Taj3/ieCnLbsUFoH a=ssrc:659652645 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:659652645 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:659652645 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:98148385 cname:Taj3/ieCnLbsUFoH a=ssrc:98148385 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:98148385 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:98148385 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1982135572 cname:Taj3/ieCnLbsUFoH a=ssrc:1982135572 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1982135572 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:1982135572 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:2523084908 cname:Taj3/ieCnLbsUFoH a=ssrc:2523084908 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:2523084908 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:2523084908 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:3604909222 cname:Taj3/ieCnLbsUFoH a=ssrc:3604909222 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:3604909222 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:3604909222 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1893605472 cname:Taj3/ieCnLbsUFoH a=ssrc:1893605472 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1893605472 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:1893605472 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc-group:SIM 659652645 1982135572 3604909222 a=ssrc-group:FID 659652645 98148385 a=ssrc-group:FID 1982135572 2523084908 a=ssrc-group:FID 3604909222 1893605472
  • 22. Enabling simulcast the ugly way (SDP munging) a=ssrc:659652645 cname:Taj3/ieCnLbsUFoH a=ssrc:659652645 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:659652645 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:659652645 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:98148385 cname:Taj3/ieCnLbsUFoH a=ssrc:98148385 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:98148385 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:98148385 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1982135572 cname:Taj3/ieCnLbsUFoH a=ssrc:1982135572 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1982135572 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:1982135572 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:2523084908 cname:Taj3/ieCnLbsUFoH a=ssrc:2523084908 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:2523084908 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:2523084908 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:3604909222 cname:Taj3/ieCnLbsUFoH a=ssrc:3604909222 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:3604909222 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:3604909222 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1893605472 cname:Taj3/ieCnLbsUFoH a=ssrc:1893605472 msid:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk 028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc:1893605472 mslabel:i1zOaprU7rZzMDaOXFdqwkq7Q6wP6f3cgUgk a=ssrc:1893605472 label:028ab73b-cdd0-4b61-a282-ea0ed0c6a9bb a=ssrc-group:SIM 659652645 1982135572 3604909222 a=ssrc-group:FID 659652645 98148385 a=ssrc-group:FID 1982135572 2523084908 a=ssrc-group:FID 3604909222 1893605472
  • 23. Hardcoded table for simulcast bitrates https://webrtchacks.com/a-playground-for-simulcast-without-an-sfu/
  • 24. Testing simulcasting via SDP munging https://www.meetecho.com/blog/simulcast-janus-ssrc/
  • 25. Enter “rid” (Firefox >= 46) var sender = pc.getSenders().find(s => s.track.kind == "video"); var parameters = sender.getParameters(); if(!parameters) parameters = {}; parameters.encodings = [ { rid: "h", active: true, maxBitrate: 900000 }, { rid: "m", active: true, maxBitrate: 300000, scaleResolutionDownBy: 2 }, { rid: "l", active: true, maxBitrate: 100000, scaleResolutionDownBy: 4 } ]; sender.setParameters(parameters);
  • 26. Encoding simulcast info in the SDP offer a=extmap:6/sendonly urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id [..] a=rid:h send a=rid:m send a=rid:l send a=simulcast: send rid=h;m;l a=ssrc:2232294953 cname:{d31e1342-72d7-45e3-9b8d-9419cf7121b6} a=ssrc:2149721810 cname:{d31e1342-72d7-45e3-9b8d-9419cf7121b6} a=ssrc:2539596807 cname:{d31e1342-72d7-45e3-9b8d-9419cf7121b6}
  • 27. Encoding simulcast info in the SDP answer a=extmap:6/recvonly urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id [..] a=rid:h recv a=rid:m recv a=rid:l recv a=simulcast: recv rid=h;m;l
  • 28. Testing Firefox’s flavour of rid-based simulcasting https://www.meetecho.com/blog/simulcast-janus-ssrc/
  • 29. Configuring the simulcast envelope the “spec” way pc.addTransceiver(track, { direction: "sendrecv", streams: [stream], sendEncodings: [ { rid: "h", active: true, maxBitrate: 900000 }, { rid: "m", active: true, maxBitrate: 300000, scaleResolutionDownBy: 2 }, { rid: "l", active: true, maxBitrate: 100000, scaleResolutionDownBy: 4 } ] }); https://www.w3.org/TR/webrtc/#simulcast-functionality
  • 30. Hey, where’s my SSRC?! a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id [..] a=rid:h send a=rid:m send a=rid:l send a=simulcast:send h;m;l
  • 31. SDP answer a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id [..] a=rid:h recv a=rid:m recv a=rid:l recv a=simulcast: recv h;m;l
  • 32. Why remove the SSRC from the SDP? • Many implementations rely on the SSRC for demultiplexing • RTP/RTCP from multiple streams all muxed together • SSRC used to recognize one stream from another • Missing SSRCs break most of those applications • Chrome’s perspective: the problem of mapping “rid” to “ssrc” • Both are in the SDP, but how are they mapped? • Order-based just a convention, and at the time not specified anywhere • https://tools.ietf.org/html/draft-alvestrand-mmusic-simulcast-ssrc-00 Solution: parse rid RTP extension on the recipient side • SSRC in related packet allows for specific rid↔ssrc association • Once you know the SSRC, keep on multiplexing on that
  • 33. Why remove the SSRC from the SDP? • Many implementations rely on the SSRC for demultiplexing • RTP/RTCP from multiple streams all muxed together • SSRC used to recognize one stream from another • Missing SSRCs break most of those applications • Chrome’s perspective: the problem of mapping “rid” to “ssrc” • Both are in the SDP, but how are they mapped? • Order-based just a convention, and at the time not specified anywhere • https://tools.ietf.org/html/draft-alvestrand-mmusic-simulcast-ssrc-00 Solution: parse rid RTP extension on the recipient side • SSRC in related packet allows for specific rid↔ssrc association • Once you know the SSRC, keep on multiplexing on that
  • 34. Why remove the SSRC from the SDP? • Many implementations rely on the SSRC for demultiplexing • RTP/RTCP from multiple streams all muxed together • SSRC used to recognize one stream from another • Missing SSRCs break most of those applications • Chrome’s perspective: the problem of mapping “rid” to “ssrc” • Both are in the SDP, but how are they mapped? • Order-based just a convention, and at the time not specified anywhere • https://tools.ietf.org/html/draft-alvestrand-mmusic-simulcast-ssrc-00 Solution: parse rid RTP extension on the recipient side • SSRC in related packet allows for specific rid↔ssrc association • Once you know the SSRC, keep on multiplexing on that
  • 37. Testing rid-based simulcasting via sendEncodings https://www.meetecho.com/blog/simulcast-janus-ssrc/
  • 39. Currently only available in Chrome, and behind a flag /opt/google/chrome/google-chrome --user-data-dir=/home/user/customprofile --no-first-run --force-fieldtrials= WebRTC-SupportVP9SVC/EnabledByFlag_2SL3TL/
  • 40. Testing VP9 SVC in Chrome https://www.meetecho.com/blog/vp9-svc-in-janus-meetecho-cosmo/
  • 41. AV1 is coming! (and SVC is mandated) https://aomediacodec.github.io/av1-spec/
  • 42. Prefefined scalability modes Name Spatial Layers Resolution Ratio Temporal Layers Inter-layer dependency L1T2 1 2 L1T3 1 3 L2T1 2 2:1 1 Yes L2T2 2 2:1 2 Yes L2T3 2 2:1 3 Yes S2T1 2 2:1 1 No S2T2 2 2:1 2 No S2T3 2 2:1 3 No L2T1h 2 1.5:1 1 Yes L2T2h 2 1.5:1 2 Yes L2T3h 2 1.5:1 3 Yes S2T1h 2 1.5:1 1 No S2T2h 2 1.5:1 2 No S2T3h 2 1.5:1 3 No ... ... ... ... ... https://w3c.github.io/webrtc-svc/#scalabilitymodes*
  • 43. Prefefined scalability modes Name Spatial Layers Resolution Ratio Temporal Layers Inter-layer dependency ... ... ... ... ... L3T1 3 2:1 1 Yes L3T2 3 2:1 2 Yes L3T3 3 2:1 3 Yes S3T1 3 2:1 1 No S3T2 3 2:1 2 No S3T3 3 2:1 3 No L3T2_KEY 3 2:1 2 Yes L3T3_KEY 3 2:1 3 Yes L4T5_KEY 4 2:1 5 Yes L4T7_KEY 4 2:1 7 Yes L3T2_KEY_SHIFT 3 2:1 2 Yes L3T3_KEY_SHIFT 3 2:1 3 Yes L4T5_KEY_SHIFT 4 2:1 5 Yes L4T7_KEY_SHIFT 4 2:1 7 Yes https://w3c.github.io/webrtc-svc/#scalabilitymodes*
  • 44. Programmable SVC – IETF 105 hackathon https://twitter.com/intenttoship/status/1152955435898605568
  • 45. WebRTC F2F during W3C TPAC 2019 https://www.w3.org/2011/04/webrtc/wiki/September_19-20_2019
  • 46. What it may look like in the future pc.addTransceiver(track, { direction: "sendrecv", streams: [stream], sendEncodings: [ { scalabilityMode: "L3T3", maxBitrate: 600000, maxFramerate: 30, spatialLayers: [ { active: true, maxBitrate: 50000, temporalLayerWeights: [0.6, 0.2, 0.2] }, { active: true, maxBitrate: 150000, temporalLayerWeights: [0.5, 0.4, 0.2] }, { active: false, temporalLayerWeights: [0.6, 0.3, 0.3] } ] }, ] }); https://github.com/w3c/webrtc-svc/issues/14
  • 47. What’s next? – IETF Hackathon in Singapore! https://www.ietf.org/how/runningcode/hackathons/106-hackathon/
  • 48. Thanks! Questions? Comments? Get in touch! • https://twitter.com/elminiero • https://twitter.com/meetecho • https://www.meetecho.com