html5结合flash实现视频文件在所有主流浏览器兼容播放

由于html5的出现,让网页中的视频、音频有了更加便捷的实现方式。但是video、audio标签只在IE 9+、Safari 3+、FireFox 4+、Opera 10+、Chrome 3+的浏览器版本得到了支持,并且各浏览器对于视频编码格式的支持不一致,这就需要我们考虑一个综合的实现方案,使得视频在不同浏览器中都能顺利播放,而且在老版本的浏览器中也能得到支持。

以下是结合项目经验,总结出的几种方案,与大家分享。

方案1、使用VideoJS插件实现兼容 插件下载http://videojs.com

使用新版VideoJS插件需要注意的是其使用方法:

使用步骤一:head部分添加

<link href="http://vjs.zencdn.net/c/video-js.css" rel="stylesheet">
<script src="http://vjs.zencdn.net/c/video.js"></script>

说明:上述javascript代码进适用于支持html5元素的IE版本,对于老版本的IE可以通过HTML5shiv来使不支持HTML5的浏览器支持HTML新标签。htnl5shiv主要解决HTML5提出的新的元素不被IE6/IE7/IE8识别,这些新元素不能作为父节点包裹子元素,且不能应用CSS样式。让CSS 样式应用在未知元素只需执行 document.createElement(elementName) 即可实现。html5shiv的工作原理也就是基于此。html5shiv的使用很简单,由于IE9是支持html5的,故只需要在head中添加如下代码即可:

<!–[if lt IE 9]>
    <script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]–>

使用步骤二:body显示视频部分添加

<video id="my_video_1" class="video-js vjs-default-skin" controls preload="auto" width="275" height="200" poster="http://www.feiliu.com/zt/img/20120417/preview.jpg" data-setup="{}">
    <source src="http://www.feiliu.com/zt/video/mv00.mp4" type=‘video/mp4‘/>
    <source src="http://www.feiliu.com/zt/video/test2.webm" type=‘video/webm‘/>
</video>

说明:这里的webm格式是针对FF浏览器的播放格式。

目前VideoJS最新升级的版本v3.2.0,本人已测试的V3.0以上都不支持IE6/IE7/IE8/,因此我们这里采用老版本v2.0.2实现。
例如文章《VideoJs Version 3 doesn‘t work on IE7 / IE8》 的相关说明请查看帮助文档http://help.videojs.com/
使用方法是:

步骤一:在页面head部分添加如下代码:

<link rel="stylesheet" href="css/video-js.css" type="text/css"/>
<script type="text/javascript" src="js/video.js"></script>
<script type="text/javascript">
// Must come after the video.js library  

// Add VideoJS to all video tags on the page when the DOM is ready
VideoJS.setupAllWhenReady();//可选。不写此函数默认为显示播放控制条,鼠标移开隐藏  

/* ============= OR ============ */  

// Setup and store a reference to the player(s).
// Must happen after the DOM is loaded
// You can use any library‘s DOM Ready method instead of VideoJS.DOMReady  

/*
VideoJS.DOMReady(function(){  

  // Using the video‘s ID or element
  var myPlayer = VideoJS.setup("example_video_1");  

  // OR using an array of video elements/IDs
  // Note: It returns an array of players
  var myManyPlayers = VideoJS.setup(["example_video_1", "example_video_2", video3Element]);  

  // OR all videos on the page
  var myManyPlayers = VideoJS.setup("All");  

  // After you have references to your players you can...(example)
  myPlayer.play(); // Starts playing the video for this player.
});
*/  

/* ========= SETTING OPTIONS ========= */  

// Set options when setting up the videos. The defaults are shown here.  

/*
VideoJS.setupAllWhenReady({
  controlsBelow: false, // Display control bar below video instead of in front of
  controlsHiding: true, // Hide controls when mouse is not over the video
  defaultVolume: 0.85, // Will be overridden by user‘s last volume if available
  flashVersion: 9, // Required flash version for fallback
  linksHiding: true // Hide download links when video is supported
});
*/  

// Or as the second option of VideoJS.setup  

/*
VideoJS.DOMReady(function(){
  var myPlayer = VideoJS.setup("example_video_1", {
    // Same options
  });
});
*/
</script>

步骤二:在body显示视频位置添加如下代码:

video id="example_video_1" class="video-js" width="280" height="210" controls preload="none" poster="http://www.feiliu.com/zt/img/20120417/img01.jpg">
        <source src="http://www.feiliu.com/zt/video/mv01.mp4" type=‘video/mp4;‘ />
        <source src="http://www.feiliu.com/zt/video/test2.webm" type=‘video/webm‘/>
        <object id="flash_fallback_1" class="vjs-flash-fallback" width="280" height="210" type="application/x-shockwave-flash" data="http://www.feiliu.com/zt/flash/flowplayer-3.2.1.swf">
        <param name="movie" value="http://www.feiliu.com/zt/flash/flowplayer-3.2.1.swf" />
        <param name="allowfullscreen" value="true" />
        <param name="flashvars" value=‘config={"playlist":["http://www.feiliu.com/zt/img/20120417/img01.jpg", {"url": "http://www.feiliu.com/zt/video/mv01.flv","autoPlay":false,"autoBuffering":true}]}‘ />
        <img src="http://www.feiliu.com/zt/img/20120417/img01.jpg" width="280" height="210" alt="Poster Image"  title="No video playback capabilities." />
      </object>
    </video>
    </div>
    <!-- End VideoJS -->
</div>

说明:这段视频代码外层以一个class=“vd”的div分隔区别。这样,支持html5的浏览器,会逐个检测提供的视频编码格式,直到找到可以播放的格式为止,如果所有格式都不能播放,则尝试使用flowplayer这个flash播放器(支持上述mp4格式)对视频进行解码。对于不支持html5的浏览器,也使用flash播放。因此,使用该方案只需要提供一个mp4格式的视频即可实现在所有浏览器上播放,不过flash播放器对mp4格式的文件解码较慢,为了照顾用户体验,故而上述我们又增加了一种flv格式的选择。

这个方法有一缺点:算上页面上的其他js效果,由于使用了大量的js,视频检测机制占用了很大的系统资源,而且我的项目页面上有11个视频之多,造成了页面加载慢,降低了用户体验。出于此,第二套方案诞生。

方案2、由于目前大多数设备的浏览器对flash支持的很好,所以考虑页面一还是使用object/embed传统标签嵌入视频,用Adobe Flash Player播放。而对于不支持flash的苹果设备,制作另一个页面二。然后根据通过js程序对User-Agent的判断给不同的设备浏览器用户显示不同的页面,优酷网曾采用这种模式。

页面一flash传统标签的代码:

<div class="vd">
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="280" height="210">
        <param name="movie" value="http://static.youku.com/v/swf/qplayer.swf?winType=adshow&VideoIDS=XMzg2NzQ2OTU2&isAutoPlay=false&isShowRelatedVideo=false" />
        <param name="quality" value="high" />
        <param name="bgcolor" value="#ffffff" />
        <param name="play" value="true" />
        <param name="loop" value="true" />
        <param name="wmode" value="transparent" />
        <param name="scale" value="showall" />
        <param name="menu" value="true" />
        <param value="true" name="allowfullscreen" />
        <param name="devicefont" value="false" />
        <param name="salign" value="" />
        <param name="allowScriptAccess" value="sameDomain" />
        <param name="flashvars" value="isShowRelatedVideo=false&showAd=0&show_pre=1&show_next=1&isAutoPlay=false&isDebug=false&UserID=&winType=interior&playMovie=true&MMControl=false&MMout=false&RecordCode=1001,1002,1003,1004,1005,1006,2001,3001,3002,3003,3004,3005,3007,3008,9999"/>
        <embed height="210" align="middle" width="280" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" name="aprilfools" flashvars="isShowRelatedVideo=false&showAd=0&show_pre=1&show_next=1&isAutoPlay=false&isDebug=false&UserID=&winType=interior&playMovie=true&MMControl=false&MMout=false&RecordCode=1001,1002,1003,1004,1005,1006,2001,3001,3002,3003,3004,3005,3007,3008,9999" src="http://static.youku.com/v/swf/qplayer.swf?winType=adshow&VideoIDS=XMzg2NzQ2OTU2&isAutoPlay=false&isShowRelatedVideo=false"  menu="true" play="true" allowfullscreen="true" allowscriptaccess="sameDomain" quality="high" wmode="transparent" bgcolor="#fff" ver="10.0.0"></embed>
    </object>
</div>

说明:这里使用的优酷的视频迷你播放器,减小了播放控制条的显示大小,比优酷普通播放器的画面大一些,用户体验好一些。

页面二针对mac设备代码:

<video id="my_video_1" class="video-js vjs-default-skin" controls preload="auto" width="280" height="210" poster="http://www.feiliu.com/zt/img/20120417/preview.jpg" data-setup="{}">
    <source src="http://www.feiliu.com/zt/video/mv01.mp4" type=‘video/mp4‘/>
</video>

说明:mac设备的Safari浏览器支持mp4格式,如果视频文件放在自己服务器,使用上述mp4格式的视频链接即可;也可以使用优酷的链接,优酷提供自动转码到iOS支持格式这一机制。例如优酷视频地址为http://player.youku.com/player.php/sid/XMzkwNzY2NTEy/v.swf,其iOS设备格式地址只需要改为http://v.youku.com/player/getRealM3U8/vid/XMzkwNzY2NTEy/type//video.m3u8 。

相关文章请考考《分析优酷HTML5地址》地址http://blog.xiaohai.co/archives/youku-html5/

统一采用优酷地址的好处是保证了两个页面的一致性,又减轻自己服务器压力,而且可以与优酷合作更好的营销。

页面访问的设备检测代码如下:

<script type="text/javascript">
    if ((/iPhone|iPad|iPod/i).test(navigator.userAgent) || (/Mac68K|MacPPC|Macintosh|MacIntel/i).test(navigator.platform)){
         window.location.href = "####page2.html"
    }
</script>

补充:安卓系统从Android 2.1版本就开始部分支持flash,可下载安装flash插件播放视频。Adobe Flash Player 10.1.92.8已经支持所有android 2.2智能手机。目前主流的安卓智能机系统都在版本2.3以上,android4.0已大行其道。因此无须对安卓设备采用单独的视频处理方案,安卓系统和windows系统采用同样的方案,使用flash播放器即可实现。

html5media是一个让video、audio标签在旧版IE中全面兼容的JavaScript类库,它不依赖于任何JavaScript框架。页面使用了html5media之后,当老版本的浏览器不支持HTML5时,它将会自动切换成Flash模式的flowplayer播放器尝试播放。。

使用html5media的方法:

1、首先在页面head部分加入如下脚本
<script src="http://api.html5media.info/1.1.4/html5media.min.js"></script>
你可以通过使用IE条件注释的方法,只在旧版IE浏览器中加载这条JS脚本。
2、然后在body部分使用audio或video标签,添加音频视频相关代码。
<!-- 视频媒体标签 -->
<video src="http://www.feiliu.com/zt/video/mv02.mp4" width="480" height="320" controls preload></video>
<!-- 音频媒体标签 -->
<audio src="http://www.feiliu.com/zt/audio/test.mp3" controls loop></audio>
这样你便可以在IE6-IE8浏览器中使用audio和video标签了。

转自:http://blog.csdn.net/freshlover/article/details/7535785

时间: 2024-10-01 02:38:26

html5结合flash实现视频文件在所有主流浏览器兼容播放的相关文章

无需Flash录视频——HTML5中级进阶

视频采集 本篇介绍的栗子 都是在chrome 47 版本以上的,低版本的可能会出现白屏和错误. 1.安全环境 随着Chrome版本的升高,安全性问题也越来越被重视,较新版本的Chrome浏览器在调用一些API时需要页面处在安全环境中.本篇文章所介绍的API函数,都需要在安全环境中执行.如果处在非安全环境下 ( http页面 ) 这些API就会有意想不到的问题. 比如 getUserMedia()就会报出警告,并执行出错. 而在设备枚举enumerateDevices()时,虽然不会报错,但是他隐

html5声频audio和视频video

html5作为下一代web标准,年前轩起了html5热潮.对于html5我只是本着了解看看.关于html5和RIA(silverlight,flash,JavaFx等)我不想说什么,也没有什么可说的,存在就有其存在的理由.孰优孰劣,留给事实.时间来证明的. 在html5中出现了一些新特性: canvas 元素 视频 video 和 声频audio 元素 : 对本地离线存储(localStorage,sessionStorage)的支持 : 新增特殊内容元素:article.footer.head

HTML5——音频audio与视频video

文件日志地址  http://blog.csdn.net/q1056843325/article/details/60336226 音频与视频现在已经变得越来越流行 各个网站为了保证跨浏览器的兼容性 仍然选择使用flash (源码截自优酷) 多媒体标签 使用 HTML5增加了audio与video两个多媒体标签 兼容性还不错,低版本IE不支持 可以使我们不需要使用任何浏览器插件就能够插入音频与视频控件 而且非常的简单 (源码截自Bilibili) 元素用法如下 1 <audio src="

HTML5媒体(音频/视频)

摘要: 在HTML5出现之前,web媒体大部分通过Flash来实现.这种方式造成了文件大加载慢,影响网站性能,开发难度高,维护麻烦,不易扩展等.这就导致HTML5自己开始支持媒体功能.HTML5 DOM 为 <audio> 和 <video> 元素提供了方法.属性和事件. 浏览器: 从IE9已经开始支持audio和video标签. Audio: <audio> 标签定义声音,比如音乐或其他音频流. 音频格式:    IE9  Firefox3.5  Opera10.5

html5声频audio和视频video说明

现在已经掀起了html5热潮,本文来说明下html5声频audio和视频video 在html5中出现了一些新特性: * canvas 元素    * 视频 video 和 声频audio 元素 :    * 对本地离线存储(localStorage,sessionStorage)的支持 :    * 新增特殊内容元素:article.footer.header.nav.section :    * 新增表单控件: calendar.date.time.email.url.search . 今天

Flash的视频神奇StageVideo

在过去的几年里,视频已经成为web网页上最主流的趋势之一,这主要是由Adobe Flash Player来推动的.2007年Flash Player 9中引入了H.264和全屏支持技术,通过在web页面上的沉浸式高清视频体验,实实在在地改变了局面.最近,在移动设备上实现的Flash Player已经为Adobe公司的Flash Player项目组带来了新的思路,这些新的思路将帮助项目组解决如何在Flash中播放视频以及如何持续增强用户体验等问题.Stage video便是这些投入所得的成果. F

HTML5中如何显示视频HTML5视频播放

HTML5 规定了一种通过 video 元素来包含视频的标准方法. 在HTML5中,video元素目前支持三种格式的视频文件, 1.Ogg = 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件 2.MPEG4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件 3.WebM = 带有 VP8 视频编码和 Vorbis 音频编码的 WebM 文件 那么在HTML5中如何显示视频呢?例子如下: 代码如下: <video src="demo.mp4&q

利用HTML5来实现网页视频的定义

在上一代的html中我们通常使用JS或是flash动态显示视频.不过在全新的html5中这一功能已经完全能实现了.这无疑大大降低了我们服务器的压力.下面我们就来看一下这是如何实现的吧! <video>标签用于定义视频. 案例: <!DOCTYPE html> <html> <head lang="en">     <meta charset="UTF-8">     <title></ti

.264视频文件封装成.MP4方法

.264视频文件封装成.MP4方法 需求: 海康威视输出的视频格式为.264格式,而html5端对其不支持,所以需要将其封装成. mp4格式. Tips:我们常常提到的. mp4格式视频,其实指的是一种容器(或者说集合体),包括视频.音频,甚至是字幕等.而.264是指一种视频的编码方式,起压缩作用.所以将.264文件转换成.mp4文件,其实就是一个解码的过程. 思路: 网上已经提供解决方案,采用ffmpeg库,先将.264文件解码,再编码生成.mp4文件,但这种方式效率较低,10M的视频可能需要