一、方案確定
計划做視頻播放,要求可以播放H264編碼的mp4文件,各個瀏覽器,各種終端都能播放。
首先查找可行性方案,
http://www.cnblogs.com/sink_cup/archive/2011/04/21/html5_video_ipad_firefox_chrome_ie9876_flash.html。這個方法將視頻播放分為兩部分。一是html5播放,二是flash播放。假設瀏覽器支持用html5的video標簽播放h264的mp4文件,如ie9,chrome,safari採用html5播放,假設不支持。降級採用flowplayerp(下面簡稱fp)播放mp4文件。
不足是firefox,opera眼下不支持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的播放控制條。禁用進度條。
搜索到一個用jquery和css實現的html5自己定義控件:
http://www.inwebson.com/html5/custom-html5-video-controls-with-jquery/。
能夠靈活控制button是否可見。及button事件。
下個問題是html5播放怎樣計時。在上邊的控件中,有文件video.js中。定義有播放器的timeupdate事件,在此方法中,調用自己定義的timeupdate方法。在自己定義方法中。獲取當前播放視頻的進度currenttime。進行計時。
下個問題是html5怎樣在播放開始時設置播放器從哪里開始播放。
html5的video有currenttime屬性。
在chrome,safari下能夠設置后,效果非常好。可是ie9下,若設置開始播放時間較長,currenttime會沒有效果,直接從0開始播放。因此做了一些特殊處理。
相關參考:
檢測當前瀏覽器是否支持html5的video標簽:
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
針對html5的video標簽的具體解釋: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沒有類似於html5的timeupdate事件,因此須要自己定義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 插件。看還有說要用到一個名為lighttpd的web 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
這個過程極其繁瑣,耗費大量時間。
此時再使用fp的start參數。或者是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?
Wowza配置application。簡單說就是在安裝文件夾/usr/local/WowzaMediaServerPro的application下,創建一個你的applicationName名稱的空文件夾。在
/usr/local/WowzaMediaServerPro的conf目錄下,創建一個與上邊applicationName保持一致的目錄,然后把/usr/local/WowzaMediaServerPro的conf下的全部配置文件,拷貝到
/usr/local/WowzaMediaServerPro/conf/applicationName下。改動復制過來的配置文件里的application.xml的StorageDir 路徑。這個就是wowza的application指向的地址。
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
比較有趣的一個東西:flowplayer和jw分別使用start參數。看視頻播放處理的不同方式:
http://lvis.lavasmith.com/flowplayer/3.2.9.aspx?
player=flowplayer&clip=Topic8&start=40&cb=1340611398536。
沒有不論什么流媒體及視頻播放基礎,一個人鑽牛角尖。無同事可請教。自己硬啃英文站點及文檔,苦不堪言。幸虧有熱心網友幫忙,指點迷津。
假設文章能對他人有一點幫助。將十分欣慰。仍然有一些遺留問題,有熱心高人指點下,不勝感激。