颠覆网络35天 ─ 使用HTML5 video时向前兼容

原文地址:using HTML5 video with fallbacks to other formats
系列地址:颠覆网络35天

====================================

Mozilla支持计划support.mozilla.com(简称SUMO)是一个开放的志愿社区,希望每周为超过300万用户提供支持和帮助。Firefox支持社区维护一个拥有超过30种语言的大量文章的知识库,并提供在线客服服务。他们制作了下面的演示,让大家知道如何同时使用开放视频和基于Flash的视频,从而不用担心用户使用的浏览器。这个演示文章作者为Laura Thomson、Cheng Wang 和 Eric Cooper。

要想互联网大量支持开放视频很大一个挑战在于,用户如果还使用未支持开放视频浏览器的话,在线视频服务也能提供相同的功能。与其要求用户去下载这些支持的浏览器或者采用不同的播放器,全新的<video>标签直接支持元素降级,从而允许互联网开发人员提供更好的体验。

在SUMO项目中,我们使用系统提供解决问题的截屏视频,例如这篇文章展示如何把Firefox设定为缺省浏览器

如果你使用Firefox 3.5访问该页面,或者其他支持开放视频的浏览器,点击“查看操作视频”链接,你会获得一份Ogg格式的截屏视频。如果使用不支持开放视频的浏览器访问,你会跟以往一样得到一个开源.flv播放器和该视频的.flv格式文件。后者是目前互联网中最流行的视频播放方式。

代码如下。

在包含截屏视频的页面中,我们包括一些JavaScript。下面显示代码的一些摘要,可以在Mozilla SVN中获得所有代码。

代码开始构建对象来呈现播放器:

Screencasts.Player = {
width: 640,
height: 480,
thumbnails: [],
priority: { ‘ogg’: 1, ’swf’: 2, ‘flv’: 3 },
handlers: { ’swf’: ‘Swf’, ‘flv’: ‘Flash’, ‘ogg’: ‘Ogg’ },
properNouns: { ’swf’: ‘Flash’, ‘flv’: ‘Flash’, ‘ogg’: ‘Ogg Theora’ },
canUseVideo: false,
isThumb: false,
thumbWidth: 160,
thumbHeight: 120
};

我们为支持的视频格式提供一个优先级,同时定义属性'canUseVideo',默认值为false

接下来,我们检测用户的浏览器看他支持什么样的视频:

var detect = document.createElement(‘video’);
if (typeof detect.canPlayType === ‘function’ &&
    detect.canPlayType(‘video/ogg;codecs=”theora,vorbis”‘) == ‘probably’ ) {
      Screencasts.Player.canUseVideo = true;
      Screencasts.Player.priority.ogg =
          Screencasts.Player.priority.flv + 2
}

如果我们可以生成video元素,那么表明浏览器支持开放视频,可以播放Ogg Theora格式,于是我们设定canUseVideotrue并增加Ogg文件的优先级高于.flv格式。

最后,我们使用优先级来选择播放哪个文件:

for (var x=0; x < file.length; x++) {
  if (!best ) {
    best = file[x];
  } else {
    if (this.priority[best] < this.priority[file[x]])
      best = file[x];
  }
}

使用这些代码,就可以根据浏览器器来选择播放什么格式的视频。

资源

Trackback/Pingback (1)

  1. […] 在前面一篇文章中,我们讨论过使用JavaScript根据浏览器支持来动态生成视频元素。 […]