http://www.featheast.com/it/video-on-the-web-html5
自从上个月Google IO以来,对于HTML5的讨论是越来越多,而其中十分重要的一个部分就是视频Video。作为内嵌进入HTML的新的标记,Video将在HTML5中发挥其核心的作用,将互联网的表达能力继续提升。
不过在实际中,有很多人对于视频的了解还很浅显,对于WebM等这些新的名词到底代表的什么意思,以及和以前的MP4,AVI等有什么关系是完全的一头雾水。在这里找到了一篇很好的文章,直接翻译过来,希望对大家都有所帮助。至少我在读完这篇文章之后,对于Video的确是有了更为清晰的认识。
文章的网址在http://diveintohtml5.org/video.html,是一本新书的其中一个章节。
每一个在过去四年中访问过YouTube的人都应该知道你可以将视频内嵌在网页中。但是在HTML5之前,是没有一个标准的方式来完成这件事情的。实际上,所有你在网络上所观看的视频,都是通过的第三方插件 - 或许是QuickTime,或许是RealPlayer,或许是Flash(YouTube使用的是Flash)。这些插件能够很好的和你的浏览器结合,以至于很有可能你都意识不到你在使用它们,直到你试图观看一个视频但是你的平台不支持这个插件的时候。
HTML5定义了一个标准,使用
IE9 IE8 IE7 FX3.5 FX3.0 SAF4 SAF3 CHROME OPERA
yes yes yes yes yes yes
不过支持
视频容器
你可以把视频文件看做是AVI文件或者是MP4文件。在现实之中,AVI和MP4仅仅只是视频容器的格式。就像一个ZIP压缩文件可以存储任意的文件在其中一样,视频容器格式只是定义了如何在容器中存储东西,而不是什么类型的数据可以进行存储。(当然这个可能稍微要复杂一些,因为不是所有的视频流都和所有的视频容器格式所匹配的,不过暂时不要担心这些)
一个视频文件通常会包括几个轨道 - 一个视频轨道(没有音频),加上一个或者多个的音频轨道(没有视频)。 轨道通常是互相关联在一起的。一个音频轨道之中存储着标记来帮助和视频同步。单一的轨道可以包含元数据,比如视频的标题,视频的封面,集数(对于电视剧而言),还有很多很多。
视频的容器格式有很多很多,其中最为重要的一些包括:
视频编码器
当你谈到观看视频的时候,你通常所说的应该是一个视频流和音频流的组合。但是你并没有两种不同的文件,你只有一个视频文件。可能是AVI,也可能是MP4。这些仅仅只是容器的格式,就像ZIP压缩文件可以存放各种文件一样。视频容器格式定义了如何在单一文件中储存视频和音频流。
当你观看视频的时候,你的视频播放器在同时做以下几件事:
1. 通过对视频容器格式的解析,来判断哪种视频和音频轨道,和他们是如何存储在这个容器之中的,从而可以将这些数据找出并进行解码。
2. 对视频流进行解码并将一帧一帧的图像播放在屏幕上。
3. 对音频流进行解码并将声音送到喇叭中。
一个视频编码器指的是一个视频流进行编码的算法,它规定了如何完成上述的第二步。(词语Codec是一个合成词,他是编码coder和解码decoder的合成)。你的视频播放器通过视频编码器将视频流进行解码,然后播放一些列的图像或者帧在屏幕上。当今大多数的视频编码器使用了各种技巧来减少大量的播放帧之间的信息。比如,仅仅只存储两帧图像之间的差异,而不是完完全全存储两帧单独的图片。大多数的视频在两帧之间的变化都很小,这样就能够使用高压缩来产生更小的文件大小。
有损耗和无损耗两种类型的编码器。无损耗的视频太大而不适于在网络上使用,所以我们将更多的目光放在损耗的编码器上。一个有损的编码器说明信息在编码的时候会不可挽回的丢失。比如从一个磁带中拷贝时,你将会丢失原有的信息降低音频的质量,并且在每一次的编码中都会发生。除了音频中的zizi的声音之外,多次的视频编码会使得图像看上去更块状,特别是在有很多运动的场景之中。(事实上,这也可能发生在直接从原视频中进行编码,当你使用一个很差的编码器,或者传错了参数的时候发生)。从另一面来说,有损的视频解码器仍够提供很好的压缩器,同时很多提供了一些技巧使得块状的视屏仍够不那么容易被人的眼睛所发觉。
视频编码器的种类有很多很多,三个最为著名的分别是H.264, Theora和VP8.
H.264
H.264也通常被视为MPEG-4 part 10或者MPEG-4 AVC或者MPEG-4 Advanced Video Coding. H.264是被MPEG公司研发,在2003年标准化的。它的目标是提供向低带宽,低CPU设备(手机)或者高带宽,高CPU设备(现代PC)以及所有两者之间的所有设备的一个单一的编码器。为了完成这个目的,H.264标准被划分问profiles,用来定义一些列的可选的属性来再文件大小和复杂程度之间进行选择。高Profiles使用了更多的附加属性,提供了更好的视频效果,花费更多的时间进行编码,并且需要更多的CPU进行实时解码。
为了给大家一个粗略的profiles范围的概念,Apple公司的iPhone使用Baseline profile,AppltTV使用Baseline和Main profile,PC中的Adobe Flash使用Baseline, Main和High profile. YouTube使用H.264来编码高分辨率的视频,通过Adobe Flash来播放。YouTube同时也提供H.264编码的视频给移动设备包括苹果的iPhone和Google的Android。同时H.264也是蓝光Blue-Ray格式所指定的编码格式,蓝光一般使用High profile.
大多数的非PC设备在播放H.264视频的时候(包括iPhone和蓝光),实际上使用的是一个专门的芯片来进行解码,因为它们的CPU还没有强大到能够在实时对视频进行解码。大多数的PC的显卡也支持硬件H.264解码。还有很多H.264解码器的竞争者,包括开源的x264 library。H.264标准是受专利保护的,通过MPEG LA建团所代理。H.264视频可以集成在绝大多数的视频容器格式之中,包括MP4和MKV.
THEORA
THEORA是从VP3解码器发展而来,而如今被Xiph.org Foundation所支持。Theora不像其他的VP3专利,是完全免费没有任何专利保护的编码方式。尽管这个标准从2004年以来就没有变化,Theora项目仅仅只在2008年11月和2009年9月发布了1.0和1.1版本。
Theora视频可以被集成到任意的视频容器格式之中,尽管大多数时候是在Ogg容器中。所有的主流Linux都内置支持Theora,并且Mozilla Firefox 3.5也内置支持。内置支持,我指的是不需要任何插件就可以进行播放。同时Theora视频也可以在Windows和Mac OS X中通过安装Xiph.org的开源解码器软件来进行播放。
VP8
VP8是另外一个On2公司的视频编码器,它们同时也最初研发了VP3(后来的Theora)。从技术上讲,VP8的视频质量类似于Baseline profile的H.264,同时有着很大的提升的潜力。
在2010年,Google收购了On2公司,并且将视频编码器标准和编码解码的样例进行了开源。同时,Google还通过宣布其完全免费打开了所有On2在VP8上的专利。(这也是最好的办法,因为你无法解除任何专利)。