第 13 章 jQuery+HTML 5实现视频播放器 以往很多喜欢上网看视频、玩游戏的网友经常抱怨不爽,因为网上好多视频和游戏都需要安装Flash插件,并且速度非常慢。HTML 5标准的出现解决了这一难题,HTML 5提供了音频视频的标准接口,实现了无须任何插件支持,只需用户浏览器支持相应的HTML 5标签即可。难怪业内都坚信HTML 5标准是Flash的终结者!目前,IE9+、Safari、Firefox和Chrome等主流浏览器都支持HTML 5标准,用户可以免除Flash插件安装的烦琐而直接在网页中播放音视频。 图13.1是Youtube视频网站的HTML 5视频播放器页面。 图13.1 HTML 5视频播放器 本章主要内容 ? 使用MediaElement.js音视频播放器插件 ? 熟悉HTML 5音视频技术 ? 制作HTML 5页面音视频播放器 13.1 认识MediaElement.js插件 MediaElement.js音视频播放器插件是一个HTML 5音频和视频的解决方案,该插件支持使用HTML 5的音频和视频标签及CSS生成的音视频播放器。对于老的浏览器,MediaElement.js插件使用自定义的Flash或Silverlight播放器模拟HTML 5音视频技术。总体上,MediaElement.js是一款支持众多应用的音视频播放器插件,包括jQuery、Wordpress、Drupel、Joomla等,同时完全兼容目前主流浏览器(IE9+、Safari、Firefox和Chrome等)。 13.1.1 下载音视频播放器插件 MediaElement.js音视频播放器插件的官方网址如下: http://www.mediaelementjs.com/ 在MediaElement.js插件的官方网站,用户可以看到MediaElement.js插件的产品介绍、样例演示链接、源代码下载链接、开发向导链接、官方博客链接、支持文档以及网站版权信息等内容,如图13.2所示。 图13.2 查看产品介绍、样例演示链接等信息 用户继续向下浏览,可以看到MediaElement.js插件的特性介绍、浏览器支持与Demo演示链接等信息,如图13.3所示。 图13.3 查看特性介绍、浏览器支持等信息 目前,选择MediaElement.js音视频播放器插件是一个很不错的选择。MediaElement.js插件具有以下优秀特性,全方位支持设计人员开发: ? 自由联盟和开放源码支持,无许可限制。 ? 上手容易,安装部署简单快捷。 ? 使用纯HTML与CSS开发。 ? 完全支持HTML 5标准的与标签。 ? 广泛的平台支持,支持多编解码器、跨浏览器和跨平台。 ? 全面支持WordPress、Drupal、Joomla、jQuery、BlogEngine.NET、Ruby Gem、Plone、Typo3等流行Web技术。 ? 为早期浏览器的Adobe?Flash?标准与Silverlight技术提供一致的API接口。 ? 可扩展的体系结构,方便开发人员完善改进。 ? 积极和不断增长地为开源社区提供支持。 ? 提供全面的文档和入门指南。 MediaElement.js音视频播放器插件具有很好的跨浏览器支持性,全面兼容目前各款主流浏览器与设备。下面是浏览器支持情况一览。 ? Windows:Firefox、Chrome、Opera、Safari、IE9+。 ? Windows Phone:Windows Phone Browser。 ? iOS:Mobile Safari、iPad、iPhone、iPod Touch。 ? Android:Android 2.3 Browser+。 对于MediaElement.js音视频播放器插件,官方网站还提供了相当丰富的API文档与样例说明,具体如图13.4所示。 图13.4 查看API文档与样例说明 用户从MediaElement.js插件官方网站可以下载一个大约10MB的源文件压缩包,编写本书时,最新版文件名为johndyer-mediaelement-2.13.2.zip。用户解压缩后可以得到MediaElement.js插件完整的源代码,包括所需jQuery框架支持的类库文件、MediaElement.js插件的相关类库文件以及MediaElement.js插件的全部资源文件。 同时,MediaElement.js插件开发方还将其源代码提交到了GitHub资源库,便于设计人员学习交流使用。MediaElement.js插件的GitHub资源库链接地址如下: https://github.com/johndyer/mediaelement/ MediaElement.js插件的GitHub页面如图13.5所示。 图13.5 MediaElement.js音视频播放器插件GitHub页面 13.1.2 开发一个简单的播放器应用 下面通过几个简单的步骤看一下如何快速应用MediaElement.js音视频播放器插件开发一个简单的播放器应用,具体方法如下: (1)新建一个名称为MediaElementJSDemo.html的网页。 (2)打开MediaElement.js插件源代码文件夹,将其中包含的build文件夹与media文件夹全部复制到刚刚创建的MediaElementJSDemo.html页面文件目录下。其中,build文件夹包含使用MediaElement.js插件所必须的类库文件支持,media文件夹包含几个官方提供的免费音视频资源文件。将MediaElementJSDemo.html页面标题命名为“基于MediaElement.js插件的HTML 5播放器应用”,代码如下: 01 02 03 04 基于MediaElement.js插件的HTML 5播放器应用 05 06 07 08 (3)在MediaElementJSDemo.html页面中添加相关HTML页面元素,用于构建页面播放器,代码如下: 01 02 // 省略部分代码 03 MediaElement.js - 基于MediaElement.js插件的HTML 5播放器应用 04 这仅仅是一个支持 Flash/Silverlight Shim 的早期浏览器页面 05 本页面无须任何一款 codec 解码器插件也可以播放音视频文件 06 仅仅是一个简单测试,不提供音视频播放器功能 07 // MP4视频 08 MP4 video (as src) 09 10 11 // 暂停/重启播放功能 12 13 // 时间轴 14 15 // 省略部分代码 16 (4)页面元素构建好后,添加JS代码对MediaElement.js插件进行初始化,完成HTML 5视频播放器功能,代码如下: 01 上面的JS代码通过MediaElement.js插件的命名空间方法进行初始化。具体初始化过程包括:定义了音视频播放器控件的页面id值为player1,通过success回调过程函数完成了视频自动播放功能;并在success回调过程函数中完成了绑定视频时间到页面控件、绑定控制视频暂停和重启播放的页面控件等操作。至此,使用MediaElement.js插件开发HTML 5音视频播放器示例就完成了,运行效果如图13.6所示。 图13.6 MediaElement.js音视频播放器插件效果 MediaElement.js音视频播放器插件初始化使用命名空间方法—— MediaElement(),并在该过程中定义属性,具体语法如下: MediaElement( //属性定义… Object:options ):jQuery 其中,HTML 5标准与MediaElement.js音视频播放器插件均提供了类似的可配置的关键属性,具体对比如表13-1所示。 表13-1 HTML 5与MediaElement.js音视频播放器插件参数对比 HTML 5参数名称 MediaElement.js插件参数名称 paused (get) paused (get) ended (get) ended (get) seeking (get) seeking (get) duration (get) duration (get) playbackRate N/A defaultPlaybackRate N/A seekable N/A played N/A muted (get/set) muted (get), setMuted() volume (get/set) volume (get), setVolume() currentTime (get/set) currentTime (get), setCurrentTime() src(get/set) src (get), setSrc() 同时,HTML 5标准与MediaElement.js音视频播放器插件均提供了类似的过程方法函数,具体方法对比如表13-2所示。 表13-2 HTML 5与MediaElement.js音视频播放器插件方法对比 HTML 5方法名称 MediaElement.js插件方法名称 play() play() pause() pause() load() load() N/A stop()* HTML 5标准并没有提供stop方法,MediaElement.js插件提供了该方法。如果要在HTML 5中实现停止功能,那么可以使用pause方法进行代替操作。 最后,HTML 5标准与MediaElement.js音视频播放器插件均提供了类似的事件处理函数,具体事件对比如表13-3所示。 表13-3 HTML 5与MediaElement.js音视频播放器插件事件对比 HTML 5事件名称 MediaElement.js插件事件名称 loadeddata loadeddata progress progress timeupdate timeupdate seeked seeked canplay canplay play play playing playing (续表) HTML 5事件名称 MediaElement.js插件事件名称 pause pause loadedmetadata loadedmetadata ended ended 除了以上属性,MediaElement.js插件还提供了一些不经常使用的属性与方法,感兴趣的用户可以访问MediaElement.js插件的官方网站参考学习,网址如下: http://www.mediaelementjs.com/#options 13.1.3 使用MediaElement.js插件模仿Windows Media Player 本节实现一个基于MediaElement.js音视频播放器插件的模仿Windows Media Player(WMP)播放器的应用,通过该应用向用户演示如何使用MediaElement.js插件的基本属性和方法,具体步骤如下: (1)新建一个名称为MediaElementJSWMPDemo.html的网页。 (2)打开MediaElement.js插件源代码文件夹,将其中包含的build文件夹与media文件夹全部复制到刚刚创建的MediaElementJSWMPDemo.html页面文件目录下。其中,build文件夹包含使用MediaElement.js插件所必须的类库文件支持,media文件夹包含几个官方提供的免费音视频资源文件。将MediaElementJSWMPDemo.html页面标题命名为“基于MediaElement.js插件模仿WMP的HTML 5播放器应用”,代码如下: 01 02 03 04 基于MediaElement.js插件模仿WMP的HTML 5播放器应用 05 06 07 08 09 10 11 12 (3)在MediaElementJSWMPDemo.html页面中添加相关HTML页面元素,用于构建页面播放器,代码如下: 01 02 // 省略部分代码 03 MediaElementPlayer.js - 基于MediaElement.js插件模仿WMP的HTML 5播放器应用 04 模拟 Windows Media Player 播放器样例 05 通过为 video 标签添加 CSS 样式类 class="mejs-myskin" 实现WMP播放器皮肤 06 "mejs-myskin" 样式名在 mejs-skins.css 文件中定义 07 // WMP风格播放器 08 Windows Media Player(WMP) 风格播放器 09 // HTML 5 video 标签定义 10 // 是否预加载 17 18 // 省略部分代码 19 (4)页面元素构建好后,添加JS代码对MediaElement.js插件进行初始化,完成模仿WMP视频播放器功能。 上面的JS代码通过MediaElement.js插件的mediaelementplayer方法进行初始化。具体初始化过程包括:通过对标签调用mediaelementplayer方法初始化;通过success回调过程函数定义播放器节点参数;通过对节点参数id值连接字符串“-mode”操作,并使用jQuery的$.html方法定义播放器插件类型。至此,使用MediaElement.js插件模仿WMP开发HTML 5播放器示例就完成了,运行效果如图13.7所示。 图13.7 MediaElement.js插件模仿WMP播放器效果图 13.2 实现在线播放器 本节将基于MediaElement.js音视频播放器插件开发具备事件处理功能的播放器应用页面。通过本应用,用户可以全面了解MediaElement.js插件的事件处理过程与使用方法,并可以将这些事件处理方法应用到HTML 5播放器页面开发中。 13.2.1 在页面中添加MediaElement.js 新建一个名为MediaElementJSEventsDemo.html的网页,将网页的标题指定为“基于MediaElement.js插件事件处理的播放器应用”,然后添加对jQuery框架类库文件及MediaElement.js插件类库文件和CSS样式文件的引用,代码如下: 01 02 03 04 HTML 5 MediaElement - 基于MediaElement.js插件事件处理的播放器应用 05 06 07 08 09 10 13.2.2 构建播放器页面布局 在MediaElementJSEventsDemo.html页面中添加相关的HTML页面元素,用于创建事件处理播放器页面控件元素,具体代码如下: 01 02 // 省略部分代码 03 HTML 5 MediaElement - 基于MediaElement.js插件事件处理的播放器应用 04 Events - 事件处理样例 05 // HTML 5 标签与资源文件定义 06 07 08 09 10 Your browser leaves much to be desired. 11 12 // 事件处理日志输出 13 14 15 16 上面HTML页面代码通过一个元素定义MediaElement.js插件事件处理过程的日志输出控件,用于将用户操作回显在页面中。 13.2.3 播放器页面初始化 页面元素构建好后,添加JS代码对MediaElement.js插件进行初始化,完成事件处理播放器应用页面功能。 01 上面的JS代码通过MediaElement.js插件的mediaelementplayer方法进行初始化。具体初始化过程为:通过对标签调用mediaelementplayer方法初始化;通过success回调过程函数定义播放器资源和节点参数;定义MediaElement.js插件的事件变量数组,包括loadstart、loadeddata、play、pause、ended、progress、timeupdate、seeked、volumechange等事件;通过for循环与addEventListener方法对播放器事件进行监听;通过jQuery方法将事件过程日志回显在页面控件内。至此,基于MediaElement.js插件事件处理的播放器应用页面就完成了,运行效果如图13.8和图13.9所示。 图13.8 播放器应用页面效果(一) 图13.9 播放器应用页面效果(二) MediaElement.js音视频播放器插件是HTML 5标准下功能十分强大的开发利器。设计人员可以根据实际项目的需求,将MediaElement.js插件各种效果应用到HTML 5页面功能中。 13.3 小结 目前,国内的视频网站已经如火如荼,大部分视频网站包括两类软件,即本地版和Web版。很多本地版浏览器也通过Web形式实现,和本章介绍的这款插件实现功能类似。Web版的在线播放器基本提供了目前在线视频的所有功能,相信读者看完本章后可以开发出属于自己的视频网站。
这仅仅是一个支持 Flash/Silverlight Shim 的早期浏览器页面
本页面无须任何一款 codec 解码器插件也可以播放音视频文件
仅仅是一个简单测试,不提供音视频播放器功能
模拟 Windows Media Player 播放器样例
通过为 video 标签添加 CSS 样式类 class="mejs-myskin" 实现WMP播放器皮肤
"mejs-myskin" 样式名在 mejs-skins.css 文件中定义
Your browser leaves much to be desired.