掌握HTML5中的多媒体--视频(video)

除非你一直生活在一个偏远的岛屿上,过去一年左右的时间,你应该已经听说过HTML5的各式炒作。HTML5将重塑富Web应用的未来。

下面 Figure 1的示例展示了HTML5中video标签与传统的object标签的不同.

Figure 1

1.  <section>

2.      <h1>使用HTML5的video标签播放视频</h1>

3.      <videosrc="video1.mp4">

4.      </video>

5.  </section>

6.  <section>

7.      <h1>使用Flash插件播放视频</h1>

8.      <objecttype="application/x-shockwave-flash"

9.                 data="player.swf"width="290"height="24">

10.        <paramname="movie"value="player.swf">

11.    </object>

12.</section>

那么重要的是什么呢? 这两个示例很简单,也易于实现。因为<视频>标记是一个用来播放媒体的标准, 你不必猜测浏览器是否要安装特定的某个版本插件。这个标准正是HTML之前最为缺少的那部分。

 

HTML5支持的媒体格式

HTML5支持AAC, MP3 和 Ogg Vorbis三种音频格式,以及Ogg Theora, WebM 和MPEG-4三种视频格式.

但并不是所有浏览器都支持所有的格式。如下表:

Figure 2浏览器支持的媒体格式

浏览器

视频格式

音频格式

 

Ogg Theora

H.264

VP8 (WebM)

Ogg Vorbis

MP3

Wav

Internet Explorer

手动安装

9.0

手动安装

No

Yes

No

Mozilla Firefox

3.5

No

4.0

Yes

No

Yes

Google Chrome

3.0

No

6.0

Yes

Yes

Yes

Safari

手动安装

3

手动安装

No

Yes

Yes

Opera

10.50

No

10.60

Yes

No

Yes

 

使用视频标签<video>

在HTML5中播放视频,直接使用<video>标签就可以了, 如下所示:

1. <videosrc="video.mp4"controls/>

src属性 (https://www.w3.org/TR/2011/WD-html5-20110113/video.html#the-source-element) 设备要播放视频的名称(可以多个), control的布尔值用来调整是否显示播放控制栏. 完整的属性列表如下所示:

Figure 3视频相关的属怀

属性

描述

 Muted

Muted

定义的音频的初始状态.目前仅支持muted.

 Crossorigin


定义当前视频是否是一个跨域的项目.

 Mediagroup

ID

将多个视频或音频集合在一起,并结合MediaController实现同步控制.

 Autoplay

Autoplay

如果指定,视频会在准备好(如已取得可播放视频)后自动播放.

 Controls

Controls

添加播放控制及音量控制功能栏.

 Height

Pixels

指定播放器的高度,以pixel为单位.

 Loop

Loop

如果指定,视频将重复播放.

 Poster

url

指定视频的预览图.

 Preload

Preload

如果指定,视频会在加页面加载过程中被加载。当Autoplay被指定时,会被忽略。

 Src

url

目标视频的URL.

 Width

Pixels

指定播放器的宽度,以pixel为单位.

 

下面是一使用了多个属性的示例,也包括一个备用(fallback)的错误信息(当浏览器不支持video标签时显示).

1.  <videosrc="video.mp4"width="320"height="240"autoplaycontrolsloop>

2.      Your browser does not support the video tag.

3.  </video>

 

你也可以使用MIME指定视频的编码格式,如下:

1.       <!-- H.264 Constrained baseline profile video (main and extended video compatible)

2.         level 3 and Low-Complexity AAC audio in MP4 container -->

3.       <source src='video.mp4' type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>

4.       <!-- H.264 Extended profile video (baseline-compatible) level3 and Low-Complexity

5.         AAC audioin MP4 container -->

6.       <source src='video.mp4' type='video/mp4; codecs="avc1.58A01E, mp4a.40.2"'>

 

你也可使用JavaScript来设定这些属性. 如下面的代码示例:

<!—显示控制栏的三种方式-->

<videocontrols>

<videocontrols="">

<videocontrols="controls">

// JavaScript中显示控制栏的两种方式

video.controls = true;

video.setAttribute

       ('controls',

        'controls');

 

如果无法确定目标浏览器是否能支持<video>或者你的视频格式,你最好指定一个回退的信息,以告诉用户为什么没有到期望的内容。如下所示:

1. <videocontrols>

2.     <sourcesrc="video1.mp4"/>

3.     <sourcesrc="video1.ogv"/>

4.     <sourcesrc="video1.webm"/>

5.     <p>This browser does not support HTML5 video</p>

6. </video>

 

如果你要确保视频可以被播放,你可以按照以前的方式加入一个flash的object标签,如下:

1. <videocontrols>

2.     <sourcesrc="video1.mp4"/>

3.     <sourcesrc="video1.ogv"/>

4.     <sourcesrc="video1.webm"/>

5.     <objectdata="videoplayer.swf">

6.         <paramname="flashvars"value="video1.mp4">

7.         您的浏览器对HTML5 Video 和 Flash 都不支持

8.     </object>

9. </video>

 

也可以在JavaScript中使用canPlayType来检测浏览器是否可以播放某个格式的视频:

1.       var video = document.getElementsByTagName('video')[0];

2.       if (video.canPlayType)

3.          { //支持video标签

4.       if (video.canPlayType('video/ogg; codecs="theora, vorbis"'))

5.             { // it may be able to play

              }

6.               else

7.             {// the codecs or container are not supported

8.               fallback(video);

9.         }

10.      }

 

如果希望有更明确清晰的提示,可以使用onerror事件监听器来报告一个错误:

1.       <video src="video.mp4"

2.              onerror="fallback(this)">

3.              不支持<video>

4.       </video>

 

使用poster,你可以在video播放区域显示一张图片来替代,它可以用来显示视频的预览图。下面是一个示例:

1.       <video src="video1.mp4" poster="preview.jpg"</video>

 

最后,使用JavaScript和HTML,你就可以创建一个交互性的视频播放器。Figure 4 展示如何使用JavaScript添加一个video并响应用户的控制操作.(译注:比如Youtue就是采用动态创建video控件的方式来提供视频播放功能的。)

Figure 4 JavaScript对视频的控制

1.       var video = document.createElement('video');

2.       video.src ='video1.mp4';

3.       video.controls =true;

4.       document.body.appendChild(video);

5.       var video = new Video();

6.       video.src ='video1.mp4';

7.       var video = new Video('video1.mp4')

8.       <script>

9.           var video = document.getElementsByTagName('video')[0];

10.      </script>

11.      <inputtype="button"value="Play"onclick="video.play()">

12.      <inputtype="button"value="Pause"onclick="video.pause()">

完整的事件和特性列表,参考https://www.w3.org/TR/2011/WD-html5-20110113/video.html#playing-the-media-resource.

 

译注: 作者的代码可能会让你有些疑问。看的时候,要注意分辨作者可能是使用多种方式来实现同一个功能。以最后一个代码为例,其中5~7行是1~2行的另两种写法。 

以下是一份动态加入video元件,并可以控制静音的功能示例:

*muteVideo是静音状态切换函数

*playVideo函数在没有video控件时会添加一个控件,如果已经存在就播放。

function addSourceToVideo(element,src,type)
{
 var source = document.createElement('source');
 source.src = src;
 source.type= type;
 
 element.appendChild(source);
}

function insertVideo(src,type,width,height)
{
 var vid = document.createElement("video");
 
 vid.controls="controls";
 vid.width = width;
 vid.height=height;
 vid.id = "video_control";
    vid.muted= false;
 
 addSourceToVideo(vid,src,type);
 
 document.getElementById("show").appendChild(vid);
}

function muteVideo()
{
 var vid = document.getElementById("video_control");
 
 if(vid == undefined)
 return;
 
 if (vid.muted==undefined || !vid.muted)
 {
 vid.muted = true;
 }
 else
 {
 vid.muted = false;
 }
}

function playVideo()
{
    var video = document.getElementById("video_control");
    
    if(video==undefined)
    {
     insertVideo("files/happyfit2.mp4","video/mp4",604,256);
     video = document.getElementById("video_control");
    }

 video.play();
}

 参考:掌握HTML5中的多媒体--音频(audio)

原文地址:Working with Media in HTML5

作者:Jason Beres

转载请注明出处:http://blog.csdn.net/horkychen

 

上一篇:web实战:video结合canvas实现视频在线截图


下一篇:转 Vector的使用