本专栏预计将从如下几方面详细介绍AV1
(1)从AV1的发展历史,AV1与MPEG、AVS系列的异同。
(2)AV1标准支持的传统编码工具及引入的机器学习工具
(3)开源的AV1编码器及解码器原理详解
(4)AV1的生态
一、AV1产生背景
2010年,谷歌收购了一家叫On2 Technologies的公司。那时VP8是这家公司的编解码器,谷歌收购On2后做的第一件事就是将它原封不动地开源出去,使它成为一款免专利费的编解码器。这就诞生了WebM项目,它由VP8开始。如你所知,VP8目前仍然在世界各地的许多实时视频应用中使用。
在VP8推出后不久,又开发推出VP9。目标是在2012年或2013年左右与HEVC同一时间推出VP9。所以VP9有些像是在与HEVC竞争。
在VP9成功之后,又开始研发VP10,即VP9的下一代。但是同一时期,在线视频交付领域中占据重要地位的很多其他公司也对该项目产生了兴趣,这些公司包括Netflix、亚马逊、Facebook(现已更名为Meta)和微软等。
之后,谷歌不再将VP10作为WebM项目的一部分,而是创立一个行业联盟。到了2015年底,一个被称为AOM(Alliance for Open Media)的联盟就诞生了。
AV1的发展前景应该会比较好,主流的互联网及硬件厂家都在参与其中。目前AV1的软件生态已经比较完善,开源的编码器如libaom、svt-av1等都比较成熟。国内各大互联网公司也都在AV1赛道发力。
二、AV1的编码工具
虽然AV1仍旧是一款混合编码架构下的编码器,但是AV1已经有一些对机器学习的探索,内部也开始引入机器学习的编码工具。在帧内、帧间、量化、后处理等模块,AV1针对视频传输的痛点,提出的编码工具不单纯为了提高压缩率,更多的是解决点播、直播或者实时应用传输利用面临的问题。
三、AV1的开源编解码器
(1)编码器
目前已知的AV1开源编码器主要有两款,libaom和svt-av1,两款编码器均用C实现。前者主要由goole维护开发,目前已经到3.8.3版本(2024.6.24),编码架构比较简单,但是内部的快速算法很多,对于深入了解如何开发编码器有一定研究价值。svt-av1是由Intel开源的一款编码器,基于Intel自研的SVT架构开发。
- libaom源代码地址:
# https://aomedia.googlesource.com/aom/
git clone https://aomedia.googlesource.com/aom
- svt-av1源码地址
https://gitlab.com/AOMediaCodec/SVT-AV1
(2)解码器
libaom、svt-av1本身就已经实现了解码器,除此之外,像gav1作为一款单独的解码器实现,在移动端上性能很强大。又比如dav1。
- dav1d源码:
https://code.videolan.org/videolan/dav1d
四、生态支持
- ffmpeg
目前ffmpeg已经支持av1编码、解码、播放。vlc也支持av1码流。
- webrtc
由goole开源的webrtc,也支持av1编码,编码器是libaom。
- NVIDIA
在最新的nv系列显卡上,已经开始逐步支持av1的硬编解