视频解码器每天处理来自互联网的不可信数据流,却长期运行在内存不安全的C语言上。缓冲区溢出、释放后使用、整数溢出——这些CVE漏洞在libvpx、dav1d、ffmpeg的历史记录中反复出现。现在,一个名为rav2d的项目完成了彻底的重构:将AV2视频解码器从C完整迁移至Rust。
项目团队刚刚发布了rav2d的完整版本。这不是实验性移植,而是生产级替代方案:47个源文件,超过47000行Rust代码,786个单元测试全部通过,100%的C解码逻辑已完成迁移。唯一保留的C代码是汇编层面的DSP内核,通过FFI接口调用——这些经过手工优化的汇编无需重写。
解码管线的完整功能均已覆盖:OBU解析、MSAC熵解码、块解码(帧内/帧间/复合模式)、去块滤波、CDEF、环路恢复(NS/PC维纳滤波、GDF)、胶片颗粒合成、运动补偿、逆变换、参考帧管理、线程任务调度。换句话说,从比特流输入到像素输出,整个链条现在运行在Rust的内存安全保证之下。
技术路线直接借鉴了rav1d的成功经验——后者是AV1解码器的Rust移植版本,由Prossimo/ISRG资助完成。具体策略分三步:保留dav1d的手工优化汇编代码,通过FFI绑定调用;渐进式将核心解码器从C迁移至Rust;每一步都进行一致性测试验证。这种"汇编保留+逻辑重写"的模式,既保住了性能底线,又消除了内存安全风险。
代码已开源:github.com/stukenov/rav2d,采用BSD 2-Clause许可证。对于需要处理不可信视频内容的应用场景——浏览器、流媒体服务器、内容审核系统——这提供了一个值得评估的替代选项。性能数据尚未公布,但rav1d的 precedent 表明,Rust版本在保持安全性的同时,可以做到与C版本相当甚至更优的吞吐表现。
热门跟贴