跨平台兼容HTTP—VOD系统设计与实现
作者 :  熊冬升,徐晓

  摘要:全面了介绍一种基于开源技术,以HTML5/Flash自适应播放为客户端,以Mp4/H.264为视频编码格式,以Nginx为http服务软件,支持http流式点播的在线VOD系统设计与实现过程,并介绍了相关技术处理细节及在各类平台环境下的兼容性,为在线VOD教学应用提供了可行的完整实施方案。
  关键词:跨平台;HTTP-VOD;HTML5;Flash;Mp4/H.264;Nginx
  中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2013)20-0185-03
  随着视频类课程的广泛应用,很多在线教育机构需要搭建在线VOD来提供在线点播支持服务,当前也有了各类VOD系统解决方案,这些方案有的采用了商业化服务软件,成本高昂;有的需要专门的协议支持,在一些网络环境下不能正常使用;有的需要专门的客户端软件支持,甚至限定在个别环境下才能使用,用户十分不便。我们就试图找到一种方案能为这些问题提供良好解答,可喜的是我们找到了一种完全基于开源技术的解决方案。
  一、跨平台兼容HTTP-VOD系统的实施的关键问题
  一个VOD系统包括三个部分:客户端系统、服务端系统和视频数据。要做一个跨平台兼容的HTTP-VOD系统也离不开这三个部分,但对各个部分有了特殊的要求,这就是实现系统的关键问题。跨平台兼容一般指客户端支持多个平台。当前客户端普遍的平台可以是PC环境(Mac/Windows/类Unix),也可以是移动智能设备环境(iOS/Android/WinPhone),此外还可能包括多种浏览器环境等的不同,要做到完美的跨平台就要各种环境或者浏览器上都能正常地实现功能,但由于个别环境自身限制使得其软件条件无论如何都不能达到功能,所以一般我们只追求大多数常见平台环境可实现功能即可。所以系统实施的关键其一就是找到一种客户端方案使得在常见平台环境下能实现点播播放。其二就是选择一种支持点播应用的服务器系统,要做到最好的网络环境适应性就必然是http服务类型,而且还需要能实现VOD相关应用。其三就是解决视频数据的问题,系统方案中需要明确视频数据格式、编码,以及产生工具和流程问题。
  二、客户端方案问题探讨和选型
  客户端实现点播可以是客户端专门的程序,也可以是基于浏览器的应用。客户端程序模式需要针对不同的平台开发各自客户端,其与服务器端组成C/S系统实现点播应用,这种模式在系统环境支持下能获得最大的可能性和功能可选性,但开发工作量大,有多少种客户端环境就需要开发多少种客户端,甚至与类似的客户端环境如果版本不同也需要开发单独的客户端程序,而且可能不适应新设备环境,所以不建议采用。基于浏览器的应用一般开发工作可以只进行一次,就可以在不同的平台和环境中获得良好的应用,理论上应该优先考虑。但浏览器应用受限于系统环境和浏览器双重限制,一般难找到可行方案。可喜的是随着现代浏览器技术的广泛应用,支持HTML5标准的应用环境得到了更多的普及,使得基于浏览器应用的模式实施的可能性大大增强。我们也倾向于选择浏览器应用模式。对此我们考察了各种平台环境下常见视频的支持性(见表1),发现Mp4/H.264编码格式有较大的跨平台可用性,只需要实现跨平台的播放客户端即可。
  对于跨平台播放客户端,我们找到了JWPlayer(版本5以上),其提供了HTML5/Flash自适应播放应用,完全适用于搭建跨平台兼容HTTP-VOD系统的客户端实现。所谓HTML5/Flash自适应播放,就是客户端播放器可以自动侦测浏览环境,在支持HTML5标签且支持Mp4/H.264编码格式时采用HTML5的video标签嵌入视频播放器实现成功播放,否则就利用flash嵌入式小程序来实现成功播放。如果均不满足则给出信息提示让用户知道不能播放的原因。要实现这点,只需要引入JWPlayer播放时定义好播放模式,比如下面的定义就实现了这一要求:vidoePlayer视频加载中...(需html5支持mp4/H.264,或者支持flash插件)   三、服务器软件选择和相关问题
  在明确了客户端是以浏览器应用和视频采用Mp4/H.264编码格式后,HTTP服务器就可以进行选型了。我们希望是一种开源免费的软件,而且支持Mp4/H.264,最好效率高,此外能够跨平台部署。综合上面的因素,有Apache2、Nginx、Lighttpd等可选,不过Apache2对mp4的支持不如Nginx和Lighttpd,后两者丰富了应用功能,当然更好。最终我们选取Nginx为服务器端,该软件可在Linux/Windows等系统下部署。要支持Mp4/H.264的流式播放,在Nginx的运行模块中需要有ngx_http_mp4_module,如果是自配置编译的版本,需要在编译配置中允许编译该模块。
  四、视频的编码产生相关问题
  前面已经选型了Mp4/H.264编码格式视频文件,但视频文件产生还有一些具体的问题。首先是采用何种编码工具,可选的工具有开源项目Mplayer、FFmepeg等提供的工具,这些工具都可用,而且可以跨平台使用,但基本上是基于命令行的处理,可能对大多数用户来说不太方便。对于普通用户来说,少量的视频转换,可以考虑格式工厂等有图形界面工具。编码时具体的编码格式选择H.264/AVC。此外需要注意的是Mp4文件在同样的编码下会有不同的混流形式,不同的混流形式在本地应用时差别不大。所以我们要选择元信息模块在文件头部的混流形式,如果前面编码工具产生的文件不符合要求,可以采用Mp4Box工具来重新混流。对于编码的码流选择,要根据视频源的分辨率、质量等来选择。大致可以参考下面的表:
  可见在当前普通用户联网1~2M带宽环境下,要适应网络点播可选视频分辨率要低于1280×720,码流范围要低于2Mbps。
  我们利用本文的方案搭建了完整的实例系统,并设置多个不同码流的视频文件在不同环境下测试了系统的功能,系统设计功能实现良好,点播及随机拖动表现等播放体验也十分良好,具体各平台/浏览器环境中测试情况见下表:
  可见该方案在所有客户端测试环境中都实现了可用,达到了设计要求,是一个良好的跨平台兼容HTTP-VOD系统设计方案。本文在介绍中还具体介绍了包括视频文件编码工具选择、编码流量选择等,对实施建设HTTP-VOD系统有了更全面的指导意义,介绍中最终选用的软件也均为开源或免费软件,使得整体实施成本大幅降低,值得参考采用。
  参考文献:
  [1]熊冬升.支持随机播放HTTP协议流式视频点播系统的搭建[J].现代教育技术,2010,(8):52-53,62.
  [2]LongTail.JW Player 5 for Flash & HTML5 [EB/OL].
  http://www.longtailvideo.com/support/jw-player/jw-player-for
  -flash-v5,2012.9.20.
  [3]WIKI.H.264/MPEG-4 AVC [EB/OL].
  http://en.wikipedia.org/wiki/H.264,2012.9.20.
  [4]Nginx.org.nginx documentation[EB/OL].
  http://nginx.org/en/docs/,2012.9.19.
  [5]w3cschool.cn.HTML5教程[EB/OL].
  http://www.w3school.com.cn/html5/index.asp,2012.9.20.