SVC stands for Scalable Video Coding.
SVC is a technique that allows encoding a video stream once in multiple layers. The layers in SVC are akin to the layers in an onion – they can be “pealed off” while maintaining the video, reducing its quality with the reduction of each layer.
This mechanism is useful when:
- Wanting to employ FEC to video, as we can protect the stream by adding redundant data to some of the layers only
- Wanting to send the video data to multiple participants, where we can send different layers to different participants based on their capabilities. This assists when using routing mechanisms for conferencing
SVC is added as part of the VP9 codec implementation in WebRTC.
Make sure you also read about simulcast.
What Happens in Simulcast?
Before diving into SVC, let’s first understand what happens in a simulcast setup. In a multi-party call, the SFU (Selective Forwarding Unit) decides which individual stream to forward to each participant. The sender sends multiple media streams, and the SFU then chooses which of these streams to forward to the participants.
SVC: Simulcast on Steroids
SVC takes the concept of simulcast to the next level. Unlike simulcast, where the sender sends multiple streams, SVC involves sending a single media stream with multiple layers. The SFU can then decide which layers to forward, almost like peeling an onion, when sending that data to other participants.
One of the advantages of using SVC is the efficient use of bitrate. While it does slightly increase the bitrate usage of a single stream, it consumes less bitrate overall compared to simulcast. This is because SVC involves encoding once and reusing previous layers for encoding higher layers of data.
Modalities Within SVC
So, what can you layer within SVC? There are three main modalities:
In this modality, each layer increases the frame rate over the previous layer. This allows for smoother video playback at varying network conditions.
Signal-to-Noise Ratio (SNR)
Here, more bits are invested in enhancing the quality of each frame. This results in a clearer and more detailed video stream.
In spatial scalability, each layer can increase the resolution of the same frame from the previous layers. This is particularly useful for adapting to different screen sizes and resolutions.