AV1 for Reels: Engineering choices and deployment

Meta has been rolling out AV1 encoding for Facebook Reels and Instagram Reels as part of a broader push to reduce video bandwidth without sacrificing quality. The company sees AV1 as its most viable codec for the coming years: it delivers roughly 30 percent better coding efficiency than VP9 or HEVC while remaining royalty-free and open source, with active development across both encoders and decoders. Meta is a founding member of the Alliance for Open Media, the body behind the standard, and has been working with the open source community to tune AV1 software implementations for global-scale use.

Newer codecs typically cut bandwidth by 30 to 50 percent relative to their predecessors, but they also demand more compute and energy. Meta’s encoding pipeline has to balance those costs against storage, egress traffic, CDN prefetching and caching, and network congestion. AV1’s feature set covers most of Meta’s production usages, which makes it a practical choice beyond just the compression gains.

Choosing encoders and decoders

For encoding, Meta benchmarked a range of open source options — x264, x265, libvp9, libaom, SVT-AV1, and the VVC reference encoder — for video-on-demand workloads. The results, published jointly with Intel, show where each sits on the quality-versus-complexity curve:

  • SVT-AV1 spans a wide complexity range across its 13 presets, from high-quality AV1 settings to speeds comparable with AVC presets — a range of more than 1000x in complexity.
  • At a given complexity point, SVT-AV1 generally achieves the best coding efficiency. Its M12 preset matches x264 veryfast in speed but is about 30 percent more efficient.
  • At a given quality level, SVT-AV1 is typically the fastest production encoder. Its M8 preset is about as efficient as libvp9 preset 0 but nearly 10 times faster.

SVT-AV1 also includes a -fast-decode option that restricts or disables AV1 tools that are not software-decoder friendly, speeding up playback with only a minor efficiency penalty. Thread management parameters let operators tune density versus speed, which matters for large-scale production and even sub-two-second delay targets for live streaming. The encoder supports several tools relevant to deployment, including reference frame scaling, super resolution, film grain synthesis, and switch frames.

Decoding is the harder side of the equation. Hardware AV1 decoders are appearing in PCs from Intel and NVIDIA, but Meta’s video traffic is mostly mobile, and most phones lack AV1 decode hardware. That leaves software decoders as the primary path. Meta evaluated dav1d (developed by VideoLAN and the open source community) and Google’s libgav1 (integrated into Android SDK). After testing resource usage, crashes, responsiveness, and frame drops, Meta chose dav1d for its iOS and Android players. Working with Ittiam, Meta also ran benchmarks on Android devices: dav1d sustains 720p30 real-time playback on most tested phones and reaches 1080p30 on some mid-range and high-end models.

Some Android flagships — including the Google Pixel 6 Pro and Samsung Galaxy S21 — already have AV1 hardware decoders, and Meta expects broader hardware support to arrive first in high-end models, with mid-tier devices following later.

How Reels encoding works

Since early 2022, uploads to Facebook and Instagram Reels go through a pipeline that generates multiple bit-rate encodings tailored to each video’s projected watch time. Client players pick the version that fits their connection speed, using adaptive bit rate streaming to avoid stalls.

For videos expected to get significant watch time, Meta uses a convex hull dynamic optimizer to pick delivery encodings. The upload is downscaled to several resolutions and each is encoded at multiple quantization parameters or Constant Rate Factors. A 1080p video, for instance, might be encoded at seven resolutions and five CRFs, yielding 35 candidate encodings. Decoded outputs are upscaled to the original resolution and scored with FB-MOS, Meta’s quality metric on a 0–100 scale.

The resulting rate-distortion points form a convex hull connecting the best quality-versus-bit-rate options on the upper left boundary. Any point on that hull is, in theory, the optimal encoding choice for the video at a given resolution and CRF — assuming a dense enough set of candidates. Operators then select the best encoding from the hull based on a target quality or bit rate.

Meta simplified this process based on earlier studies: a fast preset handles the first-pass encoding and hull generation, while a second pass uses a high-quality preset to encode only the selected resolution and CRF points. Although that adds a second encode, the first pass runs so quickly that the overall workflow is faster, with only a slight efficiency loss. Crucially, the two passes can use different encoders — AVC or VP9 for pass one, AV1 for pass two — and the first pass can also run on Meta’s internal ASIC hardware encoders.

The final design is a two-stage hybrid hardware/software ABR approach. When a video is uploaded, hardware AVC encoding runs immediately, storing only quality and bit rate metadata, not bitstreams. If projected watch time crosses a threshold, a second stage encodes the chosen hull points with software AVC, VP9, or AV1. Adding AV1 to the second stage was straightforward; it is already live for Facebook Reels, and Instagram Reels uses a similar heuristic-based flow.

For one example video, the three codec families produced rate-distortion curves closely tracking the first-stage convex hull. The best AV1 encoding matched AVC and VP9 in quality while using 65 percent fewer bits than AVC and 48 percent fewer than VP9. AV1 also reached target quality within a narrower bit rate range, meaning fewer second-stage encodings are needed — cutting both compute and storage costs. For users, the result is the same video quality at lower bandwidth.

Bringing AV1 decoding to Meta’s mobile apps

Enabling AV1 playback on iOS was comparatively straightforward. After a short round of tests, Meta began delivering AV1-encoded Reels to iPhones using the dav1d software decoder, configured with two to four threads per decode session — enough for production workloads without wasting memory or power on additional threads.

dav1d supports both synchronous and asynchronous operation. In synchronous mode, frames are decoded one at a time with low latency per frame. Asynchronous mode decodes multiple compressed frames in parallel but delays rendering until all frames are ready, which in theory yields higher throughput. Meta stuck with the synchronous mode on iOS because it fits the existing player stack, but is evaluating asynchronous mode for a future migration.

To handle 10-bit HDR AV1, Meta built a single dav1d binary capable of both 8-bit and 10-bit decoding, preserving color information through the transcoding pipeline. Android was harder. The enormous device diversity required local and large-scale A/B testing across many models to settle on decoder configurations, and the team added verbose logging that propagated errors from throughout the player stack to aid debugging and triage during integration.

Since Android relies on app-level software decoders, Meta had to run the hardware VP9 decoder and software AV1 decoder side by side during playback of the same stream, supporting mixed codec manifests and in-stream ABR lane switches while keeping both render paths working correctly with the rendering engine.

Low-end Android phones posed another problem that iPhones didn’t: for low-resolution videos, AV1’s bitrate advantage over VP9 shrinks, making it hard to show top-line delivery improvements on weaker devices. Meta compensated by engaging higher-quality encoding presets for the low-resolution ABR lanes to increase coding efficiency.

Early decoding latency was also a concern. Memory allocation and thread creation stretched the decode time of the first frames, delaying player startup and causing mid-play stalls. For Reels, where viewers swipe between videos rapidly, this was a real issue. Prefetching multiple Reels earlier in the scrolling session eased that bottleneck.

Large-scale A/B delivery tests required knowing whether a device could actually decode AV1 in real time — something that can’t be inferred from core counts, chipset vendor, RAM, or model year, and can’t be tested across thousands of device models individually. Meta’s solution was a small benchmarking app that performed basic compute operations, including Gaussian blur, memory allocation, memory copy, and 3D rendering, assigning each phone a numeric performance score. Those scores grouped devices across existing and future models, and A/B tests established which ones could handle 720p, 1080p, and 10-bit HDR playback.

After the initial Android rollout, Meta enabled hardware AV1 decoding for the few compatible Android models. Hardware decoding should improve AV1 performance, and broader large-scale testing is planned once more capable phones are in the wild.

Delivery status on Facebook Reels

AV1 delivery for Facebook Reels on iPhone began in early 2022, with benefits showing up within the first week. Playback FB-MOS for Reels played on iPhones improved by about 0.6 points week over week after the deployment.

At the same time, the average bit rate across all Reels streams played on iPhones dropped by 12 percent.

AV1’s share of watch time on iPhone Reels climbed to roughly 70 percent during the first week of rollout.

Feature enablement has continued since: 1080p30 8-bit AV1 delivery for iPhone 8 and newer, 10-bit HDR up to 1080p30 for iPhone X and newer models with HDR displays, and 1080p60 8-bit AV1 for iPhone 11 and newer. AV1 now accounts for a substantial share of Reels encoding on both Facebook and Instagram for iPhone. On Android, 8-bit AV1 delivery reaches select midrange to high-end models, and the watch-time share, while still modest, is growing.

Remaining work and road ahead

The quality gap at a fixed bit rate between AV1 and older codecs is visible side by side:

Meta will keep expanding AV1 delivery on Android and enable hardware decoding as compatible devices appear. Low-end Android phones are still the weak spot for high-resolution AV1 playback. An experimental approach under development is a mixed codec manifest: the ABR delivery algorithm generates a manifest with multiple video adaptation sets encoded in different codecs, and tells the device which AV1 and VP9 lanes to pick based on its performance score. A weak phone might play AV1 up to 540p, then switch to VP9 for higher-resolution lanes.

As more mobile SoC vendors add AV1 decoders, Meta expects the population of capable devices to grow over the next few years, bringing AV1’s bitrate and quality benefits to more of its users.