整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          Facebook視頻完成從Flash轉移到HTML5

          中關村在線軟件資訊】12月21日消息:Adobe Flash正在被逐漸被拋棄,現(xiàn)在Facebook也實現(xiàn)了將全站視頻默認從Adobe Flash切換到了HTML5。

          Facebook前端工程師Daniel Baulig在一篇博客中表示:“我們?nèi)詫⒗^續(xù)與Adobe合作帶來更加安全可靠的Flash平臺游戲體驗,但會在所有瀏覽器上默認改變視頻內(nèi)容”。

          HTML5

          Bauig表示:“我們決定一開始只向小部分瀏覽器用戶推出HTML5版本,不過隨著改進和修復,今后還會不斷向更多版本的瀏覽器和操作系統(tǒng)進行推送。”

          這也可以說明HTML5才是未來的歸宿,Adobe Flash注定要被淘汰,在有條件的情況下網(wǎng)站們還是盡早部署吧。

          2016年10月(Chrome 54)開始,Chrome不再內(nèi)置flash,而是改為用戶第一次訪問flash資源時提示安裝。從Chrome62開始,不再提供“click to play的選項”,改為點擊視頻box后,左上方彈出

          這意味著,flash作為過時的標準將被新技術所取代。


          前言

          從我們可以在網(wǎng)站上播放視頻開始,到h5播放器們?nèi)缁鹑巛钡匕l(fā)展之前,使用flash一直都是web播放視頻的不二之選。甚至于說得更加廣泛一些,在html5成為主流之前,網(wǎng)站的多媒體能力,包括動畫、游戲和視頻一直都是adobe生態(tài)在掌控。那么隨著html5標準的推出,這一切都成為了過去式。

          flv與播方案

          flv的全程是 Flash Video,顧名思義,就是專門給flash播放器提供的播放格式,這種格式具有結構簡單、清晰的優(yōu)點,最早出現(xiàn)是為了解決flash導出的swf文件體積過大,不適合在web中播放的問題。隨著flash的逐漸淘汰,新的video標簽自然是不支持flv格式的,人們開始把web視頻的重點放在mp4或者hls上,但是隨著直播這種視頻形式的火熱興起,flv迎來了新一輪的生機。

          我們來橫向對比一下可用的直播方案:

          flv播放實現(xiàn)·跳轉·清晰度切換

          可以看到,flv由于其編碼格式的特點,只需要一個MetaData 以及音視頻Track各自的Header就可以在任意的時間點播放,極大地符合實時直播的需求,在GOP足夠小的情況下甚至可以達到0延遲,可以說在現(xiàn)有的技術方案里,http-flv是最理想的一個,正是因此,flv依然是web播放器不可或缺的一個格式支持。

          首先我們通過一張圖了解一下前端播放flv的過程

          從上圖可以看到,flv播放的過程其實是從flvt中提取元信息、音視頻header以及數(shù)據(jù),然后轉碼成fmp4盒子結構的過程,再通過MSE交給video的過程。因為flv的結構本身就是流式的,也就是說,它的數(shù)據(jù)被拆分到了很多個小的tag中,所以我們可以很方便地做數(shù)據(jù)的封裝,也就是說將一段flv tag數(shù)據(jù)封裝成一個獨立的moof_mdat盒子對,然后就可以直接交給MSE處理,非常的方便。這里我們討論flv是如何處理加載、跳轉播放、重放及清晰度切換問題的

          數(shù)據(jù)加載 數(shù)據(jù)加載直播和點播兩種模式,首先來聊一下點播:針對點播的數(shù)據(jù)獲取,我們采用Range這個參數(shù)作為分段加載的控制參數(shù)

          如上圖,Range這個參數(shù)向服務器描述了希望加載一個flv文件的 100000 到 3987705 個字節(jié) 這段數(shù)據(jù),相應的,服務器也需要能夠根據(jù)Range參數(shù)正確返回這段數(shù)據(jù)。這里展示一個極簡的服務端代碼:

          從上述代碼可以看到,服務端是先是解析range,根據(jù)range切出文件分段,然后返回一個readableStream交給前端。

          再看一下直播:直播跟點播是非常不一樣的數(shù)據(jù)流動結構,我們看一下簡單的直播流程


          可以看到,直播的流程是一個 推流->服務端格式編碼-> 終端播放 的一個流程。那么這里就帶來了一個問題,我們不可以像點播時那樣去加載數(shù)據(jù)了。因為服務端實際上保存的是一個文件流,不斷有數(shù)據(jù)推到服務端,播放器也不存在緩存一段數(shù)據(jù)這樣的情況,而是不斷向服務器請求,只要有新的流到達服務端,播放器就要拿到這一段進行解碼播放,達到推流和拉流同步進行的一個直播效果。為了實現(xiàn)這種效果,在播放器內(nèi),我們使用 fetch+ streamReader,簡單的實現(xiàn)如下:


          從上述代碼我們可以看到,我們通過一個reader遞歸地從流里面讀取數(shù)據(jù),再將數(shù)據(jù)交給解碼器進行處理。關于直播的數(shù)據(jù)加載還有更加先進的websocket方式,這里不再深入探討,有興趣的同學可以自行查閱相關資料。

          播放時跳轉 播放時點擊進度條跳轉(下稱seek)是一個非常高頻的操作,尤其是在長視頻中。用戶遇到不想看的部分,或者想重看的片段,都會點擊進度條觸發(fā)seek。舉個例子,一段視頻,可能用戶實際觀看的部分只占不到50%, 如果我們將整段視頻加載,那剩下加載的50%就浪費掉了。所以我們要做的事情就是精確地加載用戶希望播放的部分,節(jié)約流量。解決方法如下:

          1. 獲取用戶將要跳轉到的時間點,下稱seekTime根據(jù)seekTime計算出離該時間點最近的一幀的位置,稱為 startPos
          2. 以預加載時間為30s 為例, 計算出seekTime + 30s 這個時間點最近的幀位置 稱為 endPos
          3. 我們以 Range: startPos-endPos 為請求參數(shù),向服務端請求這一段數(shù)據(jù)
          4. 解碼播放

          這里說起來簡單,但是涉及到了一個跟flv格式緊密相關的問題,那就是flv的onMetaData信息里是否具有keyframes這個屬性。我們上述所提到的,基于時間點計算某一幀位置的算法,是完全依賴keyframes這個屬性的,它記錄了flv中所有關鍵幀的時間點和文件偏移量,keyframes大概長這個樣子:


          times中每一個時間點都對應著同位置的fileposition的偏移量,正是基于這一點,我們可以計算需要加載的數(shù)據(jù)Range。值得注意的一點是,并不是所有flv文件都攜帶了keyframes頭,flv文件缺失部分onMetaData屬性是很常見的事情。缺失了keyframes信息,我們就沒辦法做跳轉了,因此我們需要借助額外的工具幫我們補全flv的onMetaData。這里推薦使用yamdi,一個輕量級的工具,有興趣的同學可以看一下它的使用。

          清晰度切換 清晰度切換是一個非常重要的功能,為什么重要呢,因為用戶會根據(jù)網(wǎng)速的快慢,去選擇更清晰或者更流暢的視頻。假設沒有這個選項,用戶看視頻卡頓了沒法切換清晰度,就只能憤憤地關掉窗口了。那么多個清晰度的視頻源我們?nèi)绾巫龅綗o縫的切換呢?我們分情況來討論一下:

          點播中的清晰度切換方案 點播的切換清晰度是比較容易實現(xiàn)的,流程如下

          如圖,簡而言之,就是嘗試加載視頻B,通過從視頻B的onMetaData中提取關鍵幀信息,推算出當前應該加載哪一個關鍵幀,然后加載這個位置之后的數(shù)據(jù),直到數(shù)據(jù)加載到之后,將視頻B的數(shù)據(jù)交給MSE,同時,清除掉之前視頻A在buffer中的緩存。

          直播中的清晰度切換方案 直播清晰度切換目前還沒有發(fā)現(xiàn)無縫的方案,因此建議在切換時,直接重建解碼器以及MSE,關于這方面的問題我們還在探究。更多內(nèi)容請關注我們的開源播放器

          http://h5player.bytedance.com/

          歡迎來我們github提issue (下方擴展鏈接)

          取前端學習資料及視頻進群:532018971

          HTML 很容易寫,但創(chuàng)建網(wǎng)頁時,您經(jīng)常需要重復做同樣的任務,如創(chuàng)建表單。在這篇文章中,我收集了10個超有用的HTML 代碼片段,有 HTML5 啟動模板、空白圖片、打電話和發(fā)短信、自動完成等等,幫助你提高開發(fā)速度。

          一、HTML5 啟動模板

          當啟動一個新的項目的時候,你需要一個啟動模板。這里是一個簡潔干凈的模板,可以作為 HTML5 項目的基礎。

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>Untitled</title>

          <!--[if lt IE 9]>

          <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]-->

          </head>

          <body></body>

          </html>

          二、Base64 編碼的空白 GIF 圖片

          我不推薦使用透明的 GIF,但我知道,即使在2013年,很多人都還在使用他們。如果你是其中之一,你可能會享受這個 Base64 編碼的 1 * 1px的空白 GIF。這種方式比使用的圖像更好。

          <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">三、獲取方位的表單 (Google Maps)

          這里是一個簡單但功能強大的表單代碼,用戶可以輸入他的位置指示到特定的地方。對于聯(lián)系頁面非常有用。<form action="http://maps.google.com/maps"method="get"target="_blank"><label for="saddr">Enter your location</label>

          <input type="text" name="saddr" />

          <input type="hidden" name="daddr" value="350 5th Ave New York, NY 10018 (Empire State Building)" />

          <input type="submit" value="Get directions" />

          </form>

          四、嵌入 Flash

          獲取前端學習資料及視頻進群:532018971


          主站蜘蛛池模板: 久久青草精品一区二区三区| 日韩高清一区二区| 亚洲综合色一区二区三区| 中文字幕在线观看一区| 中文无码精品一区二区三区| 一区二区三区在线观看中文字幕 | 亚洲午夜精品一区二区麻豆| 无码人妻精品一区二区三区夜夜嗨| 国模无码人体一区二区| 国模无码人体一区二区| 亚洲电影国产一区| 亚洲日韩AV一区二区三区中文| 一区二区三区无码被窝影院| 国产一区二区三区电影| 精品无码综合一区| tom影院亚洲国产一区二区| 国产精品资源一区二区| 精品国产日产一区二区三区 | 无码视频免费一区二三区| 麻豆AV天堂一区二区香蕉| 亚洲美女高清一区二区三区| 久久久久人妻一区精品色| 国产在线观看一区二区三区四区 | 亚洲一区二区三区免费观看| 久久久无码精品人妻一区| 国产a久久精品一区二区三区| 久久精品免费一区二区三区| 成人H动漫精品一区二区| 久久久91精品国产一区二区三区| 亚洲国产AV无码一区二区三区| 亚洲第一区在线观看| 中文字幕精品一区影音先锋| 精品一区二区三区水蜜桃| 欧洲无码一区二区三区在线观看| 亚洲视频一区调教| 中日韩一区二区三区| 一区二区不卡视频在线观看| 国产精品一区在线麻豆 | 乱色精品无码一区二区国产盗| 一区三区三区不卡| 精品一区二区三区免费毛片|