Encode AV1 for Mobile Hardware Decoders with rav1e

This article explains how to use the rav1e (librav1e) encoder to generate AV1 video files that are fully compatible with the hardware decoders found in modern mobile devices. It covers the specific hardware limitations of mobile chipsets, the required encoding profiles, and the exact configuration settings needed to ensure seamless hardware-accelerated playback on iOS and Android.

Mobile Hardware Decoder Requirements

Mobile system-on-chips (SoCs)—such as the Apple A17 Pro/A18, Qualcomm Snapdragon 8 Gen 2/3, and MediaTek Dimensity 9200/9300—feature dedicated AV1 hardware decoding blocks to preserve battery life. Unlike software decoders, which are highly flexible, hardware decoders are rigid and only support specific subsets of the AV1 specification.

To target these hardware decoders, your encoded video must adhere to the following constraints: * Profile: Must be the AV1 Main Profile. Hardware decoders on mobile devices do not support the High or Professional profiles. * Chroma Subsampling: Must be YUV 4:2:0. Subsampling formats like 4:2:2 or 4:4:4 will trigger software fallback or fail to play. * Bit Depth: Must be 8-bit or 10-bit. Most modern mobile AV1 hardware decoders support both 8-bit and 10-bit Main Profile video, but 8-bit offers the widest legacy compatibility. * Levels and Operating Points: The video must not exceed the maximum level supported by the chip (typically Level 5.1, which supports up to 4K at 60 frames per second).

Configuring rav1e for Mobile Compatibility

The rav1e encoder can strictly target these hardware decoders if you pass the correct parameters during the encoding process.

1. Set the Correct Color Format and Bit Depth

To ensure the video matches the Main Profile, you must configure the pixel format to YUV 4:2:0. In rav1e, this is done by specifying the chroma sampling. * For 8-bit compatibility, use rav1e’s 8-bit 4:2:0 configuration. * For 10-bit compatibility (highly recommended for HDR), use the 10-bit 4:2:0 configuration.

2. Limit the Resolution and Frame Rate (Levels)

Mobile hardware decoders have strict pixel-per-second processing limits. When encoding, ensure your source resolution and frame rate fit into standard AV1 levels: * 1080p at 30fps / 60fps: Fits Level 4.0 / 4.1. Supported by all mobile AV1 decoders. * 4K at 30fps / 60fps: Fits Level 5.0 / 5.1. Supported by high-end modern mobile SoCs.

3. Manage Tile Configurations

Hardware decoders use “tiles” to split the video frame and decode sections in parallel. While rav1e allows you to customize tile rows and columns, setting too many tiles can exceed the hardware’s capabilities. It is best to stick to standard tiling configurations: * For 1080p: Use 1 or 2 tile columns. * For 4K: Use 2 or 4 tile columns.

4. Handle Film Grain Synthesis Carefully

AV1 supports Film Grain Synthesis (FGS), which allows the encoder to strip film grain and have the decoder re-synthesize it. While the AV1 specification requires hardware decoders to support this, some early or budget mobile implementations have performance issues when FGS is enabled. If compatibility is your absolute priority, consider disabling film grain exporting in your rav1e settings.

By restricting rav1e to the Main Profile, YUV 4:2:0 chroma subsampling, and standard mobile-friendly resolutions, the resulting AV1 bitstream will successfully trigger hardware-accelerated decoding on compatible mobile devices.