黃聰:使用七牛上傳視頻調用視頻播放器的推薦方案


視頻應用通常要求播放器具備以下的基本特性:

多客戶端支持。包括:PC端(Web播放)和移動端(iOS,Android等)。具備多平台支持的播放器有助於簡化開發,規避平台之間的差異。 
常用的音視頻編碼格式支持。常用編碼格式主要是:視頻H264;音頻MP3和AAC。這些音視頻格式使用廣泛,兼容性較好。 
常用的容器格式支持。常用容器格式包括:flv、mp4、HLS(m3u8/mpeg-ts),mp3,aac。滿足這些格式,便可以覆蓋大多數的應用場景。 
播放數據統計。播放統計數據主要用於用戶觀看統計、計費、基礎服務的狀態分析、用戶行為分析等等。 
廣告。廣告是視頻應用重要的變現手段。 
外觀定制。外觀定制幫助音視頻應用美化界面,提高用戶體驗。 
播放器的選擇

可供選擇的播放器很多,但能夠很好地支持上述功能的播放器為數不多,常用的有:

ckplayer: http://www.ckplayer.com 
GrindPlayer: http://osmfhls.kutu.ru/docs/grind/

下表羅列了這幾種播放器的功能特性:

  seweise palyer JW Player free+HLSProvider ckplayer GrindPlayer
主要格式 mp4、flv、m3u8 mp4、flv、m3u8 mp4、flv mp4、flv、m3u8
播放技術 flash&html5 flash&html5 flash&html5 flash&html5
外觀設置 支持 支持 支持 不支持
播放列表 支持 支持 支持 支持
廣告 支持 支持 支持 支持
統計信息 支持 支持 支持 支持
字幕 支持 支持 不支持 支持
DVR 支持 支持 不支持 支持
直播 rtmp、hls rtmp、hls rtmp hls
HLS加密 支持 不支持(需premium和Enterprise版) 不支持 128bit
收費 免費/開源 免費/開源(不能用於商業用途) 免費 開源

可以看出,JW Player的功能最為完整。其免費版存在功能限制,比如沒有HLS支持,但有一些開源的插件可以補充這些功能。JW Player免費版+插件的形式主要問題在於免費版不能用於商業用途。ckplayer功能很多,但缺少HLS在Web上的播放支持,所以使用上存在障礙。GrindPlayer功能比較全面些,通常的用況下,足賦使用。

因此,如果可以承擔一些費用的話,Premium版的JW Player是最好的選擇。如果音視頻應用希望使用免費的播放器,並且沒有外觀設置之類的需求,那么可以使用GrindPlayer。如果用戶不需要HLS的支持,那么可以使用ckplayer。如果GrindPlayer和ckplayer都不能滿足要求,同時又要免費,那么可以免費版JW Player+插件。但需要說明的是,這種形式可能存在法律風險,因為免費版JW Player不能用於商業用途。

格式的選擇

音視頻編碼和容器格式的選擇需要兼顧不同播放平台和播放器,同時還需要最少的資源消耗量和開發量。

我們首先建議使用通用性較好的格式。頻編碼格式支持最多的應是H264,大部分的瀏覽器、移動端和播放器都支持這種編碼格式。音頻格式常見的主要是MP3和AAC,兩者獲得大多數的平台支持。因此,音視頻應用應當盡可能以這些編碼生成視頻文件,以便免去進一步編碼轉換的麻煩。如果應用無法控制源音視頻的編碼,那么可以在音視頻上傳后使用七牛雲存儲的音視頻轉碼功能,生成播放所需的音視頻。

容器格式相對復雜一些。不同播放平台的支持各有不同。但是,如果選擇了合適的播放器,那么這方面的選擇可以簡單很多。一般而言,flv格式主要用於flash播放器,mp4在html5上支持較好。而移動端(iOS、Android)上,主要支持MP4和HLS。由於iOS端排斥flash,從而無法播放flv格式。如果我們希望在所有平台上使用統一的一種格式,那么只有MP4。所以,一般情況下,我們建議使用MP4作為視頻播放的主要格式。

MP4的不足之處在於對拖動播放(seek)支持不好。拖動播放是用戶常見的一種播放行為,當用戶需要跳過某些內容,或者音視頻應用支持進度條打點和縮略圖功能的時候,拖動播放有着非常重要的作用。正常情況下,播放器需要將MP4音視頻文件緩存到拖放點,才能開始正式播放。但這會導致用戶長時間等待,並且產生大量的廢流量。有一些工具可以幫助服務端提供支持“?start=…”這樣的參數,但在使用上存在諸多限制和問題。更有效的方式是將長視頻切分成片段(通常5-10分鍾一片),由一個播放列表串接起來。播放器在拖動播放時,只下載所涉及的片段,提高響應,減少廢流量。

但是這種長視頻切片的功能需要播放器的額外支持,現有播放器對此的支持不多。捷徑是使用HLS。HLS盡管通常用於直播,但也可以用於點播。其做法是將長視頻切片,然后用m3u8文件建立索引,由播放器解析並且自動加載和播放。

HLS的問題在於PC端的播放器支持不理想,flash播放器和桌面瀏覽器的html5都不原生支持HLS。因此,我們在選擇播放器的時候將HLS作為重要的一種能力。在上述列出的四種播放器中,大部分都支持HLS協議。因此,我們建議用戶選擇其中支持Web端HLS的播放器,並且使用七牛雲存儲的視頻切片功能,將其轉換為HLS協議,簡化應用的開發,提高用戶體驗。關於HLS播放相關支持,請參考在七牛雲存儲上播放HLS

此外,對於有些應用,希望對於不同的用戶端采用不同的音視頻分辨率和碼率,以適應不同的使用環境。比如,移動端采用較低的碼率和音視頻質量,而PC端采用較高的碼率和質量。更進一步,可以允許用戶根據各自不同的網絡環境自動或者手動地選擇音視頻質量。這需要音視頻播放的多碼率的支持。HLS本身支持多碼率音視頻流,可以很方便地實現這種功能。關於HLS多碼率支持,請參考如何利用七牛雲存儲實現HLS的多碼率播放

案例

假設有一個視頻文件: sintel_trailer.mp4,以HLS播放。需要做三件事情:

將文件上傳至七牛雲存儲。具體上傳方法參考上傳操作。 
使用avthumb/m3u8功能將其轉換成HLS媒體文件。這個轉換可以在上傳時使用數據預處理功能執行轉換;或者在上傳完成后,對其進行持久化FOP。但是,無論哪種方式,都需要使用saveas功能轉碼結果保存為指定的名稱(需要.m3u8文件名后綴)。 
將轉碼后的結果構造成下載URL: http://ztest.qiniudn.com/sintel.m3u8 ,然后放入播放器,或者播放頁面的參數中。

最主要給大家推薦一款免費播放插件

插件地址:https://github.com/jackzhang1204/sewise-player 
demao :http://jackzhang1204.github.io/sewise/sewise_player/demos/index.html

下面的播放頁面演示了幾種播放器播放樣例視頻:

HLS:

seweizhi:http://seweizhi.qiniudn.com/demao.html 
GrindPlayer:http://www.flashls.org/latest/examples/osmf/GrindPlayer.html 
seweizhi:http://jackzhang1204.github.io/sewise/sewise_player/demos/index.html

MP4: 
seweizhi:https://github.com/jackzhang1204/sewise-player

FLV: 
seweizhi:http://jackzhang1204.github.io/sewise/sewise_player/demos/index.html 


免責聲明!

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



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