分类: 云计算
2022-12-09 10:46:13
如果仔细读过前面即时通讯网(52im.net)有关实时音视频开发的文章,应该能想到,至少在目前从开发者的角度来说,音视频编码选H.264还是VP8几乎没有悬念(个人认为这当然是H.264了)。本文重在为读者从技术角度讲解H.264和VP8的发展渊源以及现时所面临的问题,相信读完此文后,对于即时通讯(IM聊天应用)的实时音视频开发中视频编码的选择会有个直观的了解。
实际上,实时音视频通讯 = 音视频处理 + 网络传输。包括采集、编码、网络传输、解码、播放等环节。音视频处理中{BANNED}最佳为关键的视频编解码是个头等重要的问题,对于开发者来说,以目前所能找到的技术资源以及应用的普及程度,因为背靠巨头,H.264({BANNED}最佳新版是H.265,微软和苹果一直都在背后力推)和VP8({BANNED}最佳新版是VP9,由Google力推)是{BANNED}最佳为主流的两种编码。
实际上,Google已在几年前已经决定Chrome浏览里放弃H.264标准的支持,转而只支持自家的VP8({BANNED}最佳新版是VP9)编码格式。而且,2011年被Google收购的著名实时音视频方案GIPS——已被Google开源多年并取名为WebRTC,WebRTC中的实时音视频编码默认使用的就是VP8标准。
首先需要理清一些基本概念。我们平常笼统说的「视频格式」其实包含三个部分:视频编码、音频编码、容器格式。其中「编码」这个概念其实又包含两个方面:编码和解码。
「视频编码」作为动词指的是将动态的图像信息转化为二进制数据的过程;其逆过程称为「视频解码」。「视频编码」作为名词则通常指的是某种特定的编码方式。同样的概念也适用于「音频编码」,只不过它转化的是声音信息。
大多数「视频文件」都同时包含视频和音频,因此编码后至少都有两组二进制数据,并且两组数据必须按照特定的方式同步起来,否则我们看到的画面和听到的声音将不吻合。为了解决编码后多组不同类型的的数据的存储、传输问题,需要将他们按照一定的规律组织起来,这种组织方式即是「容器格式」。
我们常见的视频文件扩展名包括 .avi, .rmvb, .mp4, .mkv 等。其实扩展名都是指的某种容器格式。这些容器里面存放的数据可能采用了多种不同的编码方式。例如,常见的 avi 文件里面存放的通常是 xvid 或 divx 编码的视频和 mp3 编码的音频。rmvb 文件里面存放的通常是 RV40 编码的视频和 cook 编码的音频。mp4 文件里面通常存放的是 H.264 编码的视频和 AAC 编码的音频。mkv 文件里面存放的则可能包含前面各种。
常见的视频格式有很多,限于文章内容定义,这次主要讨论H.264(下一代是H.265)和VP8(下一代是VP9)两种:
采用 H.264 视频编码和 AAC 音频编码的 MP4 文件(H.264/AAC/MP4 组合)
采用 VP8 视频编码和 Vorbis 音频编码的 WebM 文件(VP8/Vorbis/WebM 组合)
H.264 是目前公认的效率{BANNED}最佳高的的视频编码。它是由国际电信联盟通电信标准部 (ITU-T) 和国际标准化组织/国际电工委员会动态图像专家组 (ISO/IEC MPEG) 共同开发的一种视频压缩技术。它的另外一个名称是 MPEG-4 AVC。目前 H.264 被广泛的运用在蓝光电影、数字电视、卫星电视、网络媒体等领域。可以说 H.264 是目前被运用得{BANNED}最佳为广泛的视频编码。
AAC 是 ISO/IEC 标准化的音频编码。它是比 MP3 更先进的音频压缩技术,目的在于取代陈旧的 MP3。AAC 音频编码被广泛的运用在数字广播、数字电视等领域。目前网上{BANNED}最佳大的音乐零售商苹果的 iTunes 音乐商店的所有数字音乐也全部采用的 AAC 音频编码。
MP4 则是 ISO/IEC 制定的容器格式标准,用以封装编码后的视频和音频数据。MP4 支持多种方式编码后的数据,但{BANNED}最佳常见的是 H.264 编码的视频和 AAC 编码的音频。
VP8 是类似于 H.264 的另一种视频编码,由 On2 公司开发。后来 Google 收购了 On2,因此 VP8 现在归 Google 所有。据称为了避开 H.264 的专利问题,VP8 没有采用一些特别的算法,使得其压缩效率效率略低于 H.264。
Vorbis 是类似 AAC 的另一种免费、开源的音频编码,由非盈利组织 Xiph 开发。业界的普遍共识是 Vorbis 是和 AAC 一样优秀、用以替代 MP3 的下一代音频压缩技术。由于 Vorbis 是免费、开源的,并且没有 AAC 的专利问题,许多游戏厂商采用 Vorbis 编码游戏中的音频资料,例如著名的 Halo,Guitar Hero 等。{BANNED}最佳近流行的在线音乐网站 Spotify 也是使用的 Vorbis 音频编码。
WebM 是 Google 基于开源容器格式 Matroska(.mkv 很多朋友应该不陌生)而专门开发的一种新型容器格式。其目的是用来封装 VP8 编码的视频和 Vorbis 编码的音频数据以供网络媒体使用。
在涉及 HTML5 视频格式的讨论中,通常「H.264」指代 H.264/AAC/MP4 这个组合,而「WebM」指代 VP8/Vorbis/WebM 这个组合。为了符合习惯、避免重复,我们也将采用同样的简称,即 H.264 = H.264/AAC/MP4,WebM = VP8/Vorbis/WebM。
HTML5 标准制定时曾经考虑过指定一种视频格式(包括视频编码、音频编码、容器格式)作为标准的一部分,所有浏览器厂商都必须实现。
理想的视频格式应该具有如下特性:
高压缩率,且画质尚佳;
解码容易,且要有硬件解码器以供处理能力不足的便携设备使用;
免费,且没有潜在的专利纠纷。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询
当时考虑过的两个组合是 Theora 视频编码、Vorbis 音频编码、Ogg 容器格式,或者 H.264/AAC/MP4(此时 Google 尚未收购 On2)。
Theora/Vorbis/Ogg 组合的三种技术都是由非营利组织 Xiph 开发并可以免费使用。其中 Theora 视频编码是基于 On2 的 VP3 视频编码发展起来的。但 Theora 在技术上落后于 H.264:为达到同样的画质H.264 所需的文件尺寸比 Theora 更小。考虑到 HTML5 视频主要通过网络传输,在保留同等的画质下文件尺寸要尽可能轻巧以节省网络流量开支。参与 HTML5 标准制定的 Google 对此忧心忡忡:按照他们的估算,如果 YouTube 完全采用 Theora 且保持同样的画质的话,那么 YouTube 产生的网络流量将消耗掉整个互联网的带宽资源。因此虽然 Google 宣称将在其浏览器中同时支持 Theora 和 H.264,但 YouTube 的默认视频编码将使用 H.264。
除了技术相对落后外,Theora {BANNED}最佳终没有被采纳的另外一个重要原因则是尚不明朗的专利问题。苹果认为虽然 Theora 可以免费使用,且没有侵犯已知的专利,但这并不保证 Theora 采用的某些技术没有侵犯到所谓的「潜艇专利」。所谓「潜艇专利」是指专利申请人故意推迟专利权的取得、公开,等到有大企业使用的技术侵犯到专利时再突然出现,对侵权企业进行诉讼索赔的做法。该做法类似于平时将潜艇藏起来,等到关键时刻出现发起攻击,因此得名「潜艇专利」。这些尚未明确的潜在专利问题可能会在将来 Theora 流行起来后给采用 Theora 的大公司带来不必要的专利诉讼。另外,很多人尝试改进 Theora 以提高其编码效率,但业内的共识是改进 Theora 的尝试几乎不可避免的会侵犯到某些专利。
参与 HTML5 标准制定的各大厂商未能在是否 H.264 上达成一致。虽然 H.264 具有高压缩比、高画质、解码容易、有成熟的硬件解码器、专利问题相对明朗等优势,但各方争论的焦点主要在于 H.264 不是免费的。免费浏览器厂商如 Mozilla 和 Opera 强烈反对将 H.264 列为 HTML5 视频标准。因为这意味着 Mozilla 和 Opera 如果要支持 HTML5 标准,那么他们必须支付相关的授权费。且不说这做法和其信条相去甚远,Mozilla 没有从其开发的浏览器上获得直接收入,反而需要付出相应成本才能自由分发其浏览器产品;Opera 则抱怨说 H.264 的授权费太贵。因此两者都认为不可接受。
由于各方争执不下,{BANNED}最佳后在 2007 年底的时候 HTML5 标准放弃了制定统一的视频格式的努力,将选择的自由留给了浏览器厂商。后来的结果是,Mozilla Firefox 和 Opera 只支持 Theora;苹果全线产品(包括 Safari 浏览器和所有 iOS 设备)只支持 H.264;微软承诺在 IE9 中原生支持 H.264;Google Chrome 同时支持 Theora 和 H.264。