CBCS versus CMAF versus TS
This article is part 1.1 of the "21 Thoughts on Video Streaming in 2021"-series.
Will Law (Chief Architect at Akamai) drops a 2021 prediction on CBCS, and what it means for TS containers.
Both HLS and DASH will shift to using CMAF containers and CBCS encryption as the common baseline for VOD and LIVE. Concomitant with this is the decline of TS containers for segmented media delivery.
Keep reading to get 1) context, 2) my take and 3) related links.
Context
Let's untangle the sea of abbreviations first, and then illustrate these concepts, and address two examples.
- VOD means "video on-demand". It's a video stream with a fixed duration, for example a movie. It's content you consume on-demand, for example by going on Netflix and selecting a specific movie.
- A Live stream can be a linear live stream or an event stream. A linear live stream has no fixed start or stop time – it plays "forever". (e.g. a TV channel) An event stream has a fixed start or stop time. (e.g. a sports game)
- A HLS stream is an adaptive video stream. An adaptive stream is a stream which adapts to the environment of the viewer. For example, if the viewer is on a super fast internet connection, they'll see a high quality quality video. If the viewer is on crappy internet connection, they might see a crappy video quality. Adaptive streams use this mechanism to ensure a smooth playback experience – the stream wants to guarantee that the experience doesn't buffer and that it always keeps playing.
- MPEG-DASH is a different type of adaptive video stream. HLS is "owned" by Apple, and MPEG-DASH is "owned" by the DASH Industry Forum (DASH-IF) which is made up by many different contributors.
- A video container "contains" video data. A video stream is a list (="stream") of containers (="segments") which are played in continuation. TS and CMAF are two types of containers. You could argue that a container is a mini-video, but if you combine all containers, you get your real video. (A single container could have the size of a megabyte or higher.)
- TS containers are traditionally used in HLS streams and are considered "old school". TS containers weren't really used in MPEG-DASH streams – MPEG-DASH usually uses a type of MP4 containers.
- Nowadays, the industry is moving to CMAF containers, because it's the Common Media Application Format. It tries to solve the challenge of requiring TS containers for HLS, and MP4 for MPEG-DASH. Instead, both HLS and MPEG-DASH should use CMAF containers. CMAF containers are used synonymously with "fragmented MP4" (fMP4) containers.
- As you can imagine, CMAF will save the industry money, because they no longer need to "clone" their containers (once for HLS with TS, and once for MPEG-DASH with MP4).
- However, when you protect your content by encrypting it, you need to use a type of encryption scheme. There are two popular encryption schemes: Counter Mode (CTR) and Cipher Block Chaining mode (CBC). (You don't need to understand the technical details of CTR versus CBC.)
- The thing with CTR versus CBC is that you can only apply one scheme to one container, and not all platforms browsers support both types. For example, Apple only supports CBC, and Windows only supported CTR. This is a big problem, because even though you have this great unification through CMAF, you would still need to create two versions of your container: one encrypted with CTR and one encrypted with CBC.
- Nowadays, most platforms also support CBC, meaning that if you encrypt your CMAF file with CBC.
- CBCS is what they call CBC in the CENC (Common Encryption) specification. Don't worry too much about this nuance. (Basically, CENC defines how platforms should implement CBC (and CTR) so that there's compatibility across all platforms... because if there's no compatibility, you might still need multiple versions of your container.)
Illustration
Let's recap through the visual perspective below.
The left side of the above image illustrates the make of an adaptive stream. An adaptive streams contains one or more containers. A container can be encrypted to protect it. A container contains video data. (And video data is encoded with a video codec.)
The right side of the above image illustrates popular configurations of adaptive streams in the past versus the future. In the past, you often had HLS streams with TS containers and CBC encryption, and DASH streams with MP4 containers and CTR encryption. In the future, HLS and DASH streams use CMAF containers with CBC encryption. (Note that different combinations are also possible; both in the past and future!)
Example
Let's share final, tangible perspective by comparing a stream with TS containers versus a stream with CMAF containers.
A "manifest" represents a HLS or DASH stream. A manifest is a file, and this file references a list of containers.
For example, the HLS manifest at https://developer.apple.com/streaming/examples/advanced-stream-ts.html references a list of TS containers. Your "video stream server" should be able to produce such TS containers and manifests that can reference those containers.
(The right side of the screenshot below is a snapshot of mentioned HLS manifest.)
For example, the HLS manifest (see screenshot below) at https://developer.apple.com/streaming/examples/advanced-stream-fmp4.html references a list of CMAF containers. Remember: CMAF containers are fragmented MP4 containers, so they'll appear as .mp4 files in your manifest. Your "video stream server" should be able to produce CMAF containers and manifests that can reference those containers. (The right side of the screenshot below is a snapshot of the mentioned HLS manifest.)
My take
CBCS is one of the hot themes in 2021, so most likely we'll see a decline in TS containers. I don't think we'll get rid of TS containers in 2021 (nor is Will claiming this). I'll even go as far as claiming that TS containers in HLS streams will stay common practice until 2024.
Why will TS containers stay common practice for now?
- It takes time for consumer hardware to catch up to the latest and greatest. For example, your mom might be using your old Android phone which doesn't yet support CBCS. For here to watch her Netflix shows, she'd need to watch a video stream which doesn't use CBCS... so you'd still need to create multiple versions of your containers.
- It takes time for businesses to catch up to the latest and greatest. For example, a streaming service might not be using hardware or software which allows you to produce "CMAF CBCS" streams. (And upgrading these components is not without risk, and takes time.)
(💬 Share your take on CBCS through LinkedIn!)