視頻應(yīng)用通常要求播放器具備以下的基本特性:
多客戶端支持。包括:PC端(Web播放)和移動端(iOS,Android等)。具備多平臺支持的播放器有助于簡化開發(fā),規(guī)避平臺之間的差異。
常用的音視頻編碼格式支持。常用編碼格式主要是:視頻H264;音頻MP3和AAC。這些音視頻格式使用廣泛,兼容性較好。
常用的容器格式支持。常用容器格式包括:flv、mp4、HLS(m3u8/mpeg-ts),mp3,aac。滿足這些格式,便可以覆蓋大多數(shù)的應(yīng)用場景。
播放數(shù)據(jù)統(tǒng)計。播放統(tǒng)計數(shù)據(jù)主要用于用戶觀看統(tǒng)計、計費(fèi)、基礎(chǔ)服務(wù)的狀態(tài)分析、用戶行為分析等等。
廣告。廣告是視頻應(yīng)用重要的變現(xiàn)手段。
外觀定制。外觀定制幫助音視頻應(yīng)用美化界面,提高用戶體驗(yàn)。
播放器的選擇
可供選擇的播放器很多,但能夠很好地支持上述功能的播放器為數(shù)不多,常用的有:
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 |
播放技術(shù) | flash&html5 | flash&html5 | flash&html5 | flash&html5 |
外觀設(shè)置 | 支持 | 支持 | 支持 | 不支持 |
播放列表 | 支持 | 支持 | 支持 | 支持 |
廣告 | 支持 | 支持 | 支持 | 支持 |
統(tǒng)計信息 | 支持 | 支持 | 支持 | 支持 |
字幕 | 支持 | 支持 | 不支持 | 支持 |
DVR | 支持 | 支持 | 不支持 | 支持 |
直播 | rtmp、hls | rtmp、hls | rtmp | hls |
HLS加密 | 支持 | 不支持(需premium和Enterprise版) | 不支持 | 128bit |
收費(fèi) | 免費(fèi)/開源 | 免費(fèi)/開源(不能用于商業(yè)用途) | 免費(fèi) | 開源 |
可以看出,JW Player的功能最為完整。其免費(fèi)版存在功能限制,比如沒有HLS支持,但有一些開源的插件可以補(bǔ)充這些功能。JW Player免費(fèi)版+插件的形式主要問題在于免費(fèi)版不能用于商業(yè)用途。ckplayer功能很多,但缺少HLS在Web上的播放支持,所以使用上存在障礙。GrindPlayer功能比較全面些,通常的用況下,足賦使用。
因此,如果可以承擔(dān)一些費(fèi)用的話,Premium版的JW Player是最好的選擇。如果音視頻應(yīng)用希望使用免費(fèi)的播放器,并且沒有外觀設(shè)置之類的需求,那么可以使用GrindPlayer。如果用戶不需要HLS的支持,那么可以使用ckplayer。如果GrindPlayer和ckplayer都不能滿足要求,同時又要免費(fèi),那么可以免費(fèi)版JW Player+插件。但需要說明的是,這種形式可能存在法律風(fēng)險,因?yàn)槊赓M(fèi)版JW Player不能用于商業(yè)用途。
音視頻編碼和容器格式的選擇需要兼顧不同播放平臺和播放器,同時還需要最少的資源消耗量和開發(fā)量。
我們首先建議使用通用性較好的格式。頻編碼格式支持最多的應(yīng)是H264,大部分的瀏覽器、移動端和播放器都支持這種編碼格式。音頻格式常見的主要是MP3和AAC,兩者獲得大多數(shù)的平臺支持。因此,音視頻應(yīng)用應(yīng)當(dāng)盡可能以這些編碼生成視頻文件,以便免去進(jìn)一步編碼轉(zhuǎn)換的麻煩。如果應(yīng)用無法控制源音視頻的編碼,那么可以在音視頻上傳后使用七牛云存儲的音視頻轉(zhuǎn)碼功能,生成播放所需的音視頻。
容器格式相對復(fù)雜一些。不同播放平臺的支持各有不同。但是,如果選擇了合適的播放器,那么這方面的選擇可以簡單很多。一般而言,flv格式主要用于flash播放器,mp4在html5上支持較好。而移動端(iOS、Android)上,主要支持MP4和HLS。由于iOS端排斥flash,從而無法播放flv格式。如果我們希望在所有平臺上使用統(tǒng)一的一種格式,那么只有MP4。所以,一般情況下,我們建議使用MP4作為視頻播放的主要格式。
MP4的不足之處在于對拖動播放(seek)支持不好。拖動播放是用戶常見的一種播放行為,當(dāng)用戶需要跳過某些內(nèi)容,或者音視頻應(yīng)用支持進(jìn)度條打點(diǎn)和縮略圖功能的時候,拖動播放有著非常重要的作用。正常情況下,播放器需要將MP4音視頻文件緩存到拖放點(diǎn),才能開始正式播放。但這會導(dǎo)致用戶長時間等待,并且產(chǎn)生大量的廢流量。有一些工具可以幫助服務(wù)端提供支持“?start=…”這樣的參數(shù),但在使用上存在諸多限制和問題。更有效的方式是將長視頻切分成片段(通常5-10分鐘一片),由一個播放列表串接起來。播放器在拖動播放時,只下載所涉及的片段,提高響應(yīng),減少廢流量。
但是這種長視頻切片的功能需要播放器的額外支持,現(xiàn)有播放器對此的支持不多。捷徑是使用HLS。HLS盡管通常用于直播,但也可以用于點(diǎn)播。其做法是將長視頻切片,然后用m3u8文件建立索引,由播放器解析并且自動加載和播放。
HLS的問題在于PC端的播放器支持不理想,flash播放器和桌面瀏覽器的html5都不原生支持HLS。因此,我們在選擇播放器的時候?qū)LS作為重要的一種能力。在上述列出的四種播放器中,大部分都支持HLS協(xié)議。因此,我們建議用戶選擇其中支持Web端HLS的播放器,并且使用七牛云存儲的視頻切片功能,將其轉(zhuǎn)換為HLS協(xié)議,簡化應(yīng)用的開發(fā),提高用戶體驗(yàn)。關(guān)于HLS播放相關(guān)支持,請參考在七牛云存儲上播放HLS
此外,對于有些應(yīng)用,希望對于不同的用戶端采用不同的音視頻分辨率和碼率,以適應(yīng)不同的使用環(huán)境。比如,移動端采用較低的碼率和音視頻質(zhì)量,而PC端采用較高的碼率和質(zhì)量。更進(jìn)一步,可以允許用戶根據(jù)各自不同的網(wǎng)絡(luò)環(huán)境自動或者手動地選擇音視頻質(zhì)量。這需要音視頻播放的多碼率的支持。HLS本身支持多碼率音視頻流,可以很方便地實(shí)現(xiàn)這種功能。關(guān)于HLS多碼率支持,請參考如何利用七牛云存儲實(shí)現(xiàn)HLS的多碼率播放
假設(shè)有一個視頻文件: sintel_trailer.mp4,以HLS播放。需要做三件事情:
將文件上傳至七牛云存儲。具體上傳方法參考上傳操作。
使用avthumb/m3u8功能將其轉(zhuǎn)換成HLS媒體文件。這個轉(zhuǎn)換可以在上傳時使用數(shù)據(jù)預(yù)處理功能執(zhí)行轉(zhuǎn)換;或者在上傳完成后,對其進(jìn)行持久化FOP。但是,無論哪種方式,都需要使用saveas功能轉(zhuǎn)碼結(jié)果保存為指定的名稱(需要.m3u8文件名后綴)。
將轉(zhuǎn)碼后的結(jié)果構(gòu)造成下載URL: http://ztest.qiniudn.com/sintel.m3u8 ,然后放入播放器,或者播放頁面的參數(shù)中。
插件地址: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