簡介
隨着客戶的增長,mp4文件播放的弊端也日益凸顯,主要集中在兩個方面html
當視頻時長比較長的時候,mp4的關鍵幀元素每每很大,須要加載很長時間才能開始播放,網速很差的狀況緩衝加載就要20多秒的時間,客戶早已急不可耐。
當用戶打開一個視頻播放的時候,瀏覽器會持續請求下載mp4文件直到下載完成,就算是用戶暫停視頻播放瀏覽器也會持續這種下載狀態,若是這個視頻文件是500M則會請求服務器下載500M文件,是1G則會不停下載1G,給服務器硬盤和寬帶形成很大浪費和壓力。
爲了解決上述問題,公司打算使用m3u8格式來替代mp4格式。html5
m3u8是蘋果公司開發的一項新型播放格式,這種播放格式支持目前市面的windows、androis、ios設備主流的瀏覽器,一樣的視頻文件既能夠在flash環境播放,又能在無flash的html5環境播放,它的優點還不止於此,它能夠實現多種碼率在不一樣網速下的自動切換,網速好自動切換高清晰度視頻,網速慢自動播放低清晰度文件,還能夠實現流加密(視頻文件自己加密)、分段下載播放、任意時間點拖拽播放、隨機視頻文件廣告插入等等優點,因此公司打算是用m3u8格式做爲視頻格式。ios
mp4轉碼m3u8
若是視頻不爲mp4格式,需先將視頻轉碼爲mp4,可以使用以下命令進行轉換windows
ffmpeg -i 本地視頻地址 -y -c:v libx264 -strict -2 轉換視頻.mp4
將mp4格式轉換爲ts格式跨域
ffmpeg -y -i 本地視頻.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 轉換視頻.ts
將ts文件進行切片瀏覽器
ffmpeg -i 本地視頻.ts -c copy -map 0 -f segment -segment_list 視頻索引.m3u8 -segment_time 5 前綴-%03d.ts
其中segment 就是切片,-segment_time表示隔幾秒進行切一個文件,上面命令是隔5s,你也能夠調整成更大的參數。bash
轉換好的文件服務器
在跨域的網站根目錄放crossdomain.xml
文件,下面是容許全部的網站(通常不採起這樣的方式,只是方便調試)都可以跨越訪問資源配置以下:dom
<?xml version="1.0" encoding="utf-8"?> <cross-domain-policy> <allow-access-from domain="*"/> </cross-domain-policy>
限制指定網站訪問,能夠參考百度https://www.baidu.com/crossdomain.xml
配置網站
<cross-domain-policy> <allow-access-from domain="*.baidu.com"/> <allow-access-from domain="*.bdstatic.com"/> <allow-http-request-headers-from domain="*.baidu.com" headers="*"/> <allow-http-request-headers-from domain="*.bdstatic.com" headers="*"/> </cross-domain-policy>
若是文件存儲在第三方平臺上,好比阿里雲OSS,就把crossdomain.xml
放在bucket
根目錄下
這裏推薦使用第三方h5播放器ckplayer
,集成完成後看下視頻請求
能夠看到視頻先加載的m3u8
格式的索引文件,而後開始加載視頻,跟據因此文件依次加載abc000.ts
、abc001.ts
、abc002.ts
,這時候拖動視頻,視頻開始加載abc011.ts
、abc012.ts
、abc013.ts
跳過了4~10的文件,這就是m3u8
的好處,按需加載