AVI格式(后綴為.AVI):它的英文全稱為Audio Video Interleaved,即音頻視頻交錯格式.這種視頻格式的優點是圖像質量好。由於無損AVI可以保存alpha通道,,經常被我們使用。缺點太多,體積過於龐大,而且更加糟糕的是壓縮標准不統一,最普遍的現象就是高版本Windows媒體播放器播放不了采用早期編碼編輯的
DV-AVI格式(后綴為.AVI):DV的英文全稱是Digital Video Format,是由索尼、松下、JVC等多家廠商聯合提出的一種家用
QuickTime File Format格式(后綴為.MOV)美國Apple公司開發的一種視頻格式,默認的播放器是蘋果的QuickTime。
MPEG:它的英文全稱為Moving Picture Experts Group,即運動圖像專家組格式. MPEG文件格式是運動圖像壓縮算法的國際標准。MPEG格式目前有三個壓縮標准,分別是MPEG-1、MPEG-2、和MPEG-4。MPEG-1、MPEG-2目前已經使用較少,着重介紹MPEG-4,其制定於1998年,MPEG-4是為了播放流式媒體的高質量視頻而專門設計的,以求使用最少的數據獲得最佳的圖像質量。
WAV(后綴為.WMV .ASF):它的英文全稱為Windows Media Video,也是微軟推出的一種采用獨立編碼方式,並且可以直接在網上實時觀看視頻節目的文件壓縮格式。
Real Video格式(后綴為.RM .RMVB):Real Networks公司所制定的音頻視頻壓縮規范稱為Real Media。用戶可以使用RealPlayer根據不同的網絡傳輸速率制定出不同的壓縮比率,從而實現在低速率的網絡上進行影像數據實時傳送和播放。:這是一種由RM視頻格式升級延伸出的新視頻格式,當然性能上有很大的提升。RMVB視頻也是有着較明顯的優勢,一部大小為700MB左右的DVD影片,如果將其轉錄成同樣品質的RMVB格式,其個頭最多也就400MB左右。大家可能注意到了,以前在網絡上下載電影和視頻的時候,經常接觸到RMVB格式,但是隨着時代的發展這種格式被越來越多的更優秀的格式替代,著名的人人影視字幕組在2013年已經宣布不再壓制RMVB格式視頻。
Flash Video(后綴.FLV):由Adobe Flash延伸出來的的一種流行網絡視頻封裝格式.
Matroska格式(后綴為.MKV):是一種新的多媒體封裝格式,這個封裝格式可把多種不同編碼的視頻及16條或以上不同格式的音頻和語言不同的字幕封裝到一個Matroska Media檔內。它也是其中一種開放源代碼的多媒體封裝格式。Matroska同時還可以提供非常好的交互功能,而且比MPEG的方便、強大。
video標簽可播放的視頻格式為mp4,ogg,mov,mkv
谷歌瀏覽器支持mp4播放格式,但是MP4的視頻格式可以使用DivX也可使用H264,Chrome只支持H264。
常用視頻格式mp4,mov,avi,谷歌瀏覽器僅支持mp4中H264視頻格式,safari支持mov,mp4但avi不支持,發現web端瀏覽器對這些支持並不好,相比較而言移動端還可以
視頻比較大,直接在加載整個頁面顯然不是最好的選擇,於是想到了m3u8流媒體,將一個大的媒體文件進行分片直接用播放器進行在線播放
HLS流:
1、HLS是蘋果公司實現的基於 HTTP 的流媒體傳輸協議,全稱 HTTP Live Streaming,可支持流媒體的直播和點播,主要應用在 iOS 系統,為 iOS 設備(如 iPhone、iPad)提供音視頻直播和點播方案。
2、HLS 的基本原理就是當采集推流端將視頻流推送到流媒體服務器時,服務器將收到的流信息每緩存一段時間就封包成一個新的 ts 文件,同時服務器會建立一個 m3u8 的索引文件來維護最新幾個 ts 片段的索引。當播放端獲取直播時,它是從 m3u8 索引文件獲取最新的 ts 視頻文件片段來播放,從而保證用戶在任何時候連接進來時都會看到較新的內容,實現近似直播的體驗。HLS 最大的不同在於直播客戶端獲取到的並不是一個完整的數據流,而是連續的、短時長的媒體文件,客戶端不斷的下載並播放這些小文件。這種方式的理論最小延時為一個 ts 文件的時長,一般情況為 2-3 個 ts 文件的時長。HLS 的分段策略,基本上推薦是 10 秒一個分片,這就看出了 HLS 的缺點:
通常 HLS 直播延時會達到 20-30s,而高延時對於需要實時互動體驗的直播來說是不可接受的。
HLS 基於短連接 HTTP,HTTP 是基於 TCP 的,這就意味着 HLS 需要不斷地與服務器建立連接,TCP 每次建立連接時的三次握手、慢啟動過程、斷開連接時的四次揮手都會產生消耗。
HLS 的優點:
數據通過 HTTP 協議傳輸,所以采用 HLS 時不用考慮防火牆或者代理的問題。
使用短時長的分片文件來播放,客戶端可以平滑的切換碼率,以適應不同帶寬條件下的播放。
HLS 是蘋果推出的流媒體協議,在 iOS 平台上可以獲得天然的支持,采用系統提供的 AVPlayer 就能直接播放,不用自己開發播放器。
當使用 HLS 流媒體網絡傳輸協議時,<video>
元素 src
屬性使用的是 blob://
協議。講到該協議,我們就不得不聊一下 Blob 與 Blob URL。
RTMP流:
RTMP實時消息傳輸協議,Real Time Messaging Protocol,是 Adobe Systems 公司為 Flash 播放器和服務器之間音頻、視頻和數據傳輸開發的開放協議。協議基於 TCP是一個協議族,包括 RTMP 基本協議及 RTMPT/RTMPS/RTMPE 等多種變種。RTMP 是一種設計用來進行實時數據通信的網絡協議,主要用來在 Flash/AIR 平台和支持RTMP協議的流媒體/交互服務器之間進行音視頻和數據通信。
相對於 HLS 來說,采用 RTMP 協議時,從采集推流端到流媒體服務器再到播放端是一條數據流,因此在服務器不會有落地文件。這樣 RTMP 相對來說就有這些優點:
延時較小,通常為 1-3s。
基於 TCP 長連接,不需要多次建連。穩定性高。
支持加密: RTMPE和RTMPS為加密協議。
因此業界大部分直播業務都會選擇用 RTMP 作為流媒體協議。通常會將數據流封裝成 FLV 通過 HTTP 提供出去。但是這樣也有一些問題需要解決:
iOS 平台沒有提供原生支持 RTMP 或 HTTP-FLV 的播放器,這就需要開發支持相關協議的播放器。
協議復雜:RTMP協議比起HTTP復雜很多,導致性能低下。
有累積延遲:,原因是RTMP基於TCP不會丟包。所以當網絡狀態差時,服務器會將包緩存起來,導致累積的延遲;待網絡狀況好了,就一起發給客戶端。這個的對策就是,當客戶端的緩沖區很大,就斷開重連。
Video.js的使用(可兼容播放hls與rtmp)
Video.js 是一個通用的在網頁上嵌入視頻播放器的 JS 庫,Video.js 自動檢測瀏覽器對 HTML5 的支持情況,如果不支持 HTML5 則自動使用 Flash 播放器
1、對於Video.js 5.x及更低版本,Flash技術是Video.js核心存儲庫的一部分。對於Video.js 6.x及更高版本,Flash技術位於單獨的存儲庫中。videojs-flash.js插件只與Video.js> = 6.0.0一起使用,因為之前的flash技術已構建到版本中! video.js不能直接播放rtmp流,需要videojs-flash.js 這個插件。
2、對於播放HLS視頻,在videojs7版本之前要引用videojs-contrib-hls.js插件才能播放。videojs7版本之后的,Video.js默認捆綁VHS(VHS是videojs-contrib-hls的繼承者。它是一個源自videojs-contrib-hls存儲庫的源處理程序。雖然videojs-contrib-hls最初設計用於在所有瀏覽器上添加HLS播放,但我們意識到引擎也可以播放其他格式,所以videojs-contrib-hls這個項目已經被棄用,被videojs-http-streaming繼承)。默認情況下,在Video.js 7及以上版本中已經集成Videojs HTTP Streaming(昵稱為VHS),不必使用videojs-http-streaming插件就可以播放HLS,DASH和未來的HTTP流媒體協議視頻。
注意:
1.對於Video.js 7之前的版本(明確說是6版本的),必須使用videojs-http-streaming.js插件才可以播放HLS,DASH和未來的HTTP流媒體協議視頻,即使它們不是本機支持的。
播放rtmp流提示No compatible source was found for this media
這是你的瀏覽器沒有開啟flash的原因,只要將flash開啟就好了
1 const myer = videojs(this.$refs.eventVideo, { 2 autoplay: true, 3 muted: true, 4 }, function onPlayReady() { 5 this.on('error', function (error) { 6 videojs.log('監聽到異常,錯誤信息:'); 7 videojs.log(error); 8 }); 9 }); 10 myer.play();
這里需要特殊注意,flv文件比較特殊,在video標簽需要加上 muted屬性,因為音頻轉碼可能會轉碼失敗導致整段視頻無法播放.
flv.js是bilibili開發,大致的播放方法是把flv文件轉成一小段一小段的mp4格式(再往深處說就是指用代碼標記人物動作,而不儲存人物圖像)
初始化video播放器,讓其能播放flv文件
vue 和 html都適用:
1 // 在js中flv改為flvjs即可,flvjs是默認的參數 2 if(flv.isSupported()){ 3 setTimeout(function(){ 4 // 這里加了個200ms的定時器,原因是因為抓取元素之后vue無法瞬間響應 5 var videoElement = document.getElementById('videoElementByFlv') 6 that.flvPlayer = flv.createPlayer({ 7 url:"src", 8 type: 'flv', 9 }) 10 that.flvPlayer.attachMediaElement(videoElement) 11 that.flvPlayer.load() 12 },200) 13 }
對比以下互聯網上用的流媒體分發方式:
. HLS(m3u8格式):apple的HLS,支持點播和直播。
. HTTP:即HTTP stream,各家自己定義的http流,應用於國內點播視頻網站。
. RTMP:直播應用,對實時性有一定要求,以PC為主。
. 編碼器輸出RTMP協議。
. 流媒體系統接入使用RTMP協議。
. 流媒體系統內部直播分發使用RTMP。
. PC+直播+實時性要求高:使用flash播放RTMP。
. PC+直播+沒有實時性要求:使用RTMP或者HLS均可。
. PC+點播:使用HTTP或者HLS。