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