兼容各個瀏覽器的H.264播放: H.264+HTML5+FLOWPLAYER+WOWZA+RMTP


一、方案確定

計划做視頻播放,要求可以播放H264編碼的mp4文件,各個瀏覽器,各種終端都能播放。

首先查找可行性方案,

http://www.cnblogs.com/sink_cup/archive/2011/04/21/html5_video_ipad_firefox_chrome_ie9876_flash.html。這個方法將視頻播放分為兩部分。一是html5播放,二是flash播放。假設瀏覽器支持用html5video標簽播放h264mp4文件,如ie9,chromesafari採用html5播放,假設不支持。降級採用flowplayerp(下面簡稱fp)播放mp4文件。

不足是firefoxopera眼下不支持h264編碼。不管是html5還是fp在這兩種瀏覽器上無法播放(經過后來實驗,ff下是僅僅有音頻沒有視頻)。

 

 

 

另一個方案是 http://hi.baidu.com/alimyself/item/7f5c003f3397968bb611db07 使用很easy。僅僅要鏈接一個js文件就能夠了。

所以,僅僅要您的頁面上(頭部或底部)有這么段代碼:

<scriptsrc="http://html5media.googlecode.com/svn/trunk/src/html5media.min.js"></script> 

就能夠了。

這個封裝太嚴密,無法靈活控制狀態條和播放器屬性。

http://www.zhangxinxu.com/study/201003/html5-video-mp4.html 

決定採用此方案。

首先使用方案中的代碼搭建總體框架。

在使用該方案過程中,有一些修改。后附代碼。

其它的一些降級方案:

可行的跨瀏覽器 HTML5 音頻和視頻:

http://msdn.microsoft.com/zh-cn/magazine/hh781023.aspx

優雅降級:http://www.iefans.net/html5-qianru-shipin/

沒怎么看明確的一篇文章,貌似也是引用外部的一個js就可以:

http://camendesign.com/code/video_for_everybody

Flowplayer提供的降級方案:http://flowplayer.blacktrash.org/graceful.html

 

 

 

二、業務說明

基本框架增加后,就須要增加實際業務邏輯。

邏輯是全部人能夠觀看視頻播放。

角色A滿足某條件時,觀看視頻時不能控制播放進度,不能快進和后退,而且須要記錄本次有效觀看時間。播放開始時,須要從上次觀看結束的時間點自己主動開始播放。

 

 

 

三、html5播放

首先是html5部分,在用video標簽實現了基本播放后。須要控制角色A的播放控制條。禁用進度條。

搜索到一個用jquerycss實現的html5自己定義控件:

http://www.inwebson.com/html5/custom-html5-video-controls-with-jquery/

 能夠靈活控制button是否可見。及button事件。

下個問題是html5播放怎樣計時。在上邊的控件中,有文件video.js中。定義有播放器的timeupdate事件,在此方法中,調用自己定義的timeupdate方法。在自己定義方法中。獲取當前播放視頻的進度currenttime。進行計時。

下個問題是html5怎樣在播放開始時設置播放器從哪里開始播放。

html5videocurrenttime屬性。

chromesafari下能夠設置后,效果非常好。可是ie9下,若設置開始播放時間較長,currenttime會沒有效果,直接從0開始播放。因此做了一些特殊處理。

相關參考:

檢測當前瀏覽器是否支持html5video標簽:

http://www.w3school.com.cn/html5/html_5_video.asp

Html5全局屬性:http://www.w3school.com.cn/html5/html5_ref_globalattributes.asp

Html5 全局事件屬性:http://www.w3school.com.cn/html5/html5_ref_eventattributes.asp

針對html5video標簽的具體解釋:http://www.aspxhome.com/design/css/20106/1415123_3.htm

http://wiki.whatwg.org/wiki/Video_type_parameters

各個瀏覽器對html5支持程度測試:www.html5test.com

各個瀏覽器對html5支持程度的圖文說明:http://html5readiness.com/

Html5視頻播放是否能用wowzaserver,

http://www.wowza.com/forums/showthread.php?7532-HTML5-Support-for-video-playback

眼下沒有測試成功,直接使用http播放。

 

 

四、 flowplayer 播放

Html5播放搞定后,整個播放才完畢了一小部分,繼續fp播放。首先是fp的播放button控制,fp有提供一個控制條插件:在頁面jsp中增加flowplayer.controls-3.2.8.js,flowplayer.controls-3.2.8.min.js

而且在播放器初始代碼中初始化就可以。可自己定義控制條各個button是否顯現及播放條樣式。

工具條插件:

http://flowplayer.org/plugins/flash/controlbar.html

http://flowplayer.org/documentation/configuration/clips.html

//菜單插件

http://flowplayer.org/plugins/flash/menu.html

 

 

 

下邊是播放怎樣計時。因為fp沒有類似於html5timeupdate事件,因此須要自己定義js計時器,在播放器開始播放時,開始計時:

clearIntervalFun=setInterval(fpTimeUpdate,1000);

timeupdate中用getttime方法獲取fp的當前時間並計時。

Flowerplayer事件及屬性

http://blog.sina.com.cn/s/blog_6cabf4070100wry7.html 

http://flowplayer.org/demos/skinning/tooltips.html

http://flowplayer.org/documentation/events/ 

http://releases.flowplayer.org/apidoc-latest/org/flowplayer/model/Clip.html

最難的是fp怎樣設置視頻的開始播放時間,在fp官網看到一個關於偽流的東西,http://flowplayer.org/plugins/streaming/pseudostreaming.html

上邊有一句話非常是讓人開心:Random seeking to any part of the timeline at any time.。能夠載入到視頻的不論什么地方進行播放。

須要flowplayer.pseudostreaming-3.2.9.swf 插件。看還有說要用到一個名為lighttpdweb server

 

於是嘗試在linuxserver下安裝lighttpd,以期可以使用flowplayer.pseudostreaming

搜索之后,發現lighttpd默認播放flv,假設要播放h264的,須要加入h264 模塊。

http://h264.code-shop.com/trac/wiki/Mod-H264-Streaming-Apache-Version2

安裝完lighttpd,加入h264模塊,

http://www.wenzizone.cn/?p=167

這個過程極其繁瑣,耗費大量時間。

此時再使用fpstart參數。或者是seek方法,均不湊效。

后再細致看流媒體概念。見:

http://202.192.163.58/internet/page/kch-nr/page_10_4.htm

才發現偽流是順序流式下載,“這樣的方式和傳統的下載方式沒有本質的差別,僅僅是由於client的軟件能夠在媒體沒有全然下載就能夠播放。它不能跳過頭部。必須先下完前面的才干夠看后面的;”。

假設須要視頻從一開始就播放還未下載到的部分。那么僅僅能使用實時流式傳播。

是我對fp的偽流控件的說明理解的有問題。還是lighttpd安裝有問題,詳細問題出在哪里,如今還不明確。

假設要使用實時流式傳播。就要使用流媒體server。鑒於fp有提供一個rtmp的插件。決定用rtmp協議。

原來已經成功安裝helix,並成功使用rtsp協議進行realplayer播放。准備繼續沿用helix,可是在helixport配置中未找到rtmp的port配置,不確定helix是否支持rtmp協議,因此決定流媒體server用wowza

各個流媒體對照:http://en.wikipedia.org/wiki/Comparison_of_streaming_media_systems

Wowza 在各種流媒體server中。支持較多編碼格式。較多終端。

 

 

安裝wowza

Wowza安裝  http://sunky045.iteye.com/blog/538288

並配置applications,詳細見

http://www.wowza.com/forums/content.php?

3-quick-start-guide

Wowza配置application。簡單說就是在安裝文件夾/usr/local/WowzaMediaServerProapplication下,創建一個你的applicationName名稱的空文件夾。在

/usr/local/WowzaMediaServerProconf目錄下,創建一個與上邊applicationName保持一致的目錄,然后把/usr/local/WowzaMediaServerProconf下的全部配置文件,拷貝到

/usr/local/WowzaMediaServerPro/conf/applicationName下。改動復制過來的配置文件里的application.xmlStorageDir 路徑。這個就是wowzaapplication指向的地址。

Wowza測試是否正在執行  訪問: http://ip:1935 假設能訪問到。說明wowza成功安裝。

 

 

安裝完成,並參考fp官網的rtmp使用方法。

Flowplayer使用 wowza 演示樣例: http://flowplayer.blacktrash.org/test/issue392.html

Wowza官網關於 flowplayer使用rtmp協議播放 視頻的演示樣例:

http://www.wowza.com/forums/content.php?54

直接播放。在ie876下,能播放,有聲音,可是沒有圖像。 經過搜索,給wowza打了patch包,詳見

http://www.wowza.com/forums/showthread.php?

14256-No-video-in-RTSP-gt-RTMP-resteam-from-ip-cam

再次播放。能夠。

參考fp官網關於rtmp的使用方法,並設置start參數,播放成功。

詳見http://flowplayer.electroteque.org/controls-markers

 

 

 

比較有趣的一個東西:flowplayerjw分別使用start參數。看視頻播放處理的不同方式:

http://lvis.lavasmith.com/flowplayer/3.2.9.aspx?

player=flowplayer&clip=Topic8&start=40&cb=1340611398536

沒有不論什么流媒體及視頻播放基礎,一個人鑽牛角尖。無同事可請教。自己硬啃英文站點及文檔,苦不堪言。幸虧有熱心網友幫忙,指點迷津。

假設文章能對他人有一點幫助。將十分欣慰。仍然有一些遺留問題,有熱心高人指點下,不勝感激。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM