2026年5月31日 · VIDEOLAN · 6分钟阅读
dav2d
一个编解码器,在所有人都能解码它之前,并不真正存在。
今天,我们宣布推出 dav2d,这是一款由 VideoLAN 社区成员开发的、用于新型 AV2 编解码器的快速解码器。
几周前,我们开放了仓库并开始公开开发。自那以后,AV2 本身也发布了首个正式规范版本,因此现在是解释 dav2d 是什么、我们为何启动它以及项目当前状况的好时机。
dav2d 是我们从 dav1d(我们的 AV1 解码器)开始的工作的延续。
目标类似:提供一个体积小、速度快、可移植且正确的解码器,适合真实应用、媒体播放器、浏览器、测试工具和操作系统。
AV2
AV2 是 AV1 的继任者,也是 开放媒体联盟 推出的最新免版税视频编解码器。
该规范现已公开发布于:
AV1 于 2018 年最终定稿,并成为有史以来部署最成功的视频编解码器之一。如今,它已广泛应用于世界各地的浏览器、移动设备、操作系统、电视、流媒体服务和视频应用中。
AV2 建立在这一成功基础之上。该编解码器在预测、变换、熵编码、滤波和色度处理等方面引入了新的编码工具,同时继续致力于提高压缩效率。
报告的增益因测试条件而异,但与 AV1 相比,通常可看到约 25% 的改进,一些评估甚至报告了更大的增益。
AV2 解码的复杂度大约是 AV1 解码的五倍。实际上,这意味着在当今硬件上运行的软件如果不经过仔细的、特定于架构的优化,将难以实时解码 AV2。
这就是我们提前启动 dav2d 的原因,而不是等待规范稳定下来。
从 dav1d 到 dav2d
当 AV1 即将定稿时,我们力推开发一个快速的软件解码器,因为我们不相信硬件解码会足够快地普及,或者能在足够多的设备上实现。
并非所有人都同意这一评估。AOM 社区的一些成员认为硬件实现和参考解码器就足够了。
但我们不这么认为。浏览器、媒体播放器、操作系统和移动设备在专用硬件普及之前很久就需要一个生产质量的解码器。
最终,AOM 自身资助了部分初始开发工作,联盟的一些成员也最终加入了这一努力。
结果就是 dav1d。
事后看来,对快速软件解码器的需求被证明比许多人预期的要大得多。
如今,dav1d 是部署最广泛的 AV1 软件解码器。
它被用于 VLC、FFmpeg、mpv、Firefox、Chrome、Safari、Android、Windows、Linux 以及许多其他应用和平台。
该项目也已成为许多从事 AV1 部署、测试和优化的开发者的参考 AV1 解码器实现。
您可以在本博客上阅读 dav1d 的完整历史: 介绍 dav1d、 通往首个版本之路、 首个版本、 dav1d 1.2 和 1.5 “Sonic”。
对于 AV2,我们试图更早地启动这项工作。
一个编解码器规范很重要,但这还不够。开发者需要一个可以构建、测试、基准测试、集成以及与其他实现进行比较的解码器。
这正是 dav2d 旨在提供的东西。
当前状态
当前的 dav2d 代码树已经包含一个功能完备的 AVM v15 解码器,支持 8 位和 10 位解码。
编解码器的大部分主要部分已经实现,并且正在进行优化,包括:
- 码流解析;
- 帧和序列头;
- 熵解码和 CDF 处理;
- 帧内预测;
- 帧间预测和参考运动矢量;
- 变换;
- CCTX 和 CfL;
- 去块滤波;
- CDEF;
- 维纳滤波;
- 胶片颗粒合成。
这仍然是早期工作,AV2 生态系统本身也还很年轻,但解码器已经具备功能,远非一个空的公告仓库。
工作越来越多地集中在正确性、一致性、优化和平台支持上。
项目进展如此之快的一个原因是 dav2d 并非从零开始。AV2 与 AV1 共享许多概念,而 dav1d 已经解决了许多关于线程化、SIMD 组织、测试、可移植性和 API 设计的架构问题。
尽管 AV2 需要大量新的解码器代码,但多年 dav1d 开发积累的许多经验可以直接转移到 dav2d 上。
性能工作
性能工作已经开始。
在 x86 上,dav2d 已经包含多个逆变换尺寸的 AVX2 代码,以及围绕 CCTX、去块、帧内预测和 CfL 相关路径的工作。
在 ARM 上,已经有用于熵解码、SAD、帧内预测、调色板预测、DC 预测器、平滑预测器和运动相关函数的 AArch64 NEON 代码。一些 arm32 的工作也已开始。
还有一些早期的 RISC-V 工作,主要集中在重新启用和适配现有的帧内预测和运动补偿汇编代码。
这与我们在 dav1d 上的进展相同:首先是干净的 C 实现,然后是验证基础设施,接着是最重要热点路径的特定架构优化代码。
checkasm
与 dav1d 早期相比的一个重要区别是工具。
在 dav1d 开发过程中,我们创建了 checkasm,这是一个用于验证和基准测试优化实现与其 C 等价物相比的框架。
dav2d 从第一天起就受益于这一基础设施。
结合从 dav1d 获得的架构经验,这使得项目进展比 dav1d 在类似阶段时要快得多。
当前代码树已经包含多个领域的 checkasm 覆盖,包括逆变换、运动补偿、胶片颗粒、CfL 和参考运动矢量代码。
这应该会使未来的优化工作既更快又更安全。
开源
与之前的 dav1d 一样,dav2d 作为一个开源项目开发。
解码器采用与 dav1d 相同的 BSD 风格许可证发布,便于集成到开源和专有应用中。
与大多数 VideoLAN 项目一样,开发从第一天起就公开进行:
- 仓库:https://code.videolan.org/videolan/dav2d
- 问题追踪:https://code.videolan.org/videolan/dav2d/-/issues
- 合并请求:https://code.videolan.org/videolan/dav2d/-/merge_requests
我们相信开放的实现对于新媒体技术的健康部署至关重要。它们提供了互操作性、规范的独立验证、更简便的实验以及生态系统的共同基础。
下一步是什么
前方还有很多工作要做。
我们需要继续跟踪 AV2 规范,提高一致性,扩展测试覆盖范围,进一步优化 x86 和 ARM,进行 RISC-V 工作,提高高位深度性能,改善线程化,减少内存使用,并准备未来的版本。
但基础已经存在:工具、架构以及从 dav1d 获得的经验,并附带了额外的改进。
在硬件支持变得无处不在之前很久,dav1d 就帮助使 AV1 变得实用。
我们打算为 AV2 做同样的事情。
让 dav2d 诞生吧。来自 VideoLAN,满怀热爱。
近期文章
- 让 dav2d 诞生吧
- libspatialaudio 0.4:一个现代空间音频库
- libdvdnav / libdvdread 7 和 libdvdcss 1.5 发布:DVD-Audio 及更多
- dav1d 1.5 Sonic
- 荣幸获得 2025 年欧洲 SFS 奖
- libbluray 1.4.0 发布
- Mirrorbits 0.6 发布
- FFmpeg 7.1:海量编解码器