整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          如何制作一個完美的全屏視頻H5

          如何制作一個完美的全屏視頻H5

          在前面的話:

          最近一波H5廣告火爆整個互聯網圈,身為圈內人,我們怎能 不! 知!道!


          :( 噓!真不知道的也繼續看下去,有收獲 ↓ )

          So,搞懂這個并不難。

          這篇文章將帶你從頭到尾了解H5廣告的實現。


          本文主要講一下幾個關鍵點

          一、視頻內聯播放。

          -- 想要營造一種文字與視頻混排的現象,視頻不要影響其他模塊


          二、視頻去控件。

          -- 交互視頻,不能點擊快/慢進或暫停哦


          三、去控件全屏播放。

          -- 想要模擬 明星給我打電話的體驗,不能看到明顯的視頻播放器


          四、視頻自動播放。

          -- 想要釋放用戶操作,打開鏈接就自動播放

          五、黑屏問題。

          -- 開始播放時,有一段黑屏時間,不能無縫銜接

          六、其他屬性和方法。

          -- 喜歡一個技術,就要了解“她”的全部,這些你也看看唄





          一、video 標簽內聯播放



          Video 標簽內聯播放,需要添加屬性:

          webkit-playsinline="true" playsinline=“true”



          通過上述代碼可以達到蘋果手機非全屏(內聯)播放的效果,安卓上退出全屏后也可以通過底部的播放按鈕非全屏播放。


          而在 iphone上 默認是全屏播放的。

          需要在 Obj-C 里,webview設置allowsInlineMediaPlayback屬性為YES
          webview.allowsInlineMediaPlayback=YES;


          這個需要客戶端的同學注意一下。


          iOS 10 之前的版本支持 webkit-playsinline,但是加了這個屬性后,在 iOS 9 上出現只能聽到聲音不能看到畫面的問題。

          為了 兼容ios8、9 需要再加上這個庫 iphone-inline-video 一起使用。

          [https://github.com/bfred-it/iphone-inline-video]


          這里補充一下 iphone-inline-video 使用方法:

          1.npm install --save iphone-inline-video

          2.使用



          iphone-inline-video在iOS 10上會自動禁用。

          確保你使用這個playsinline屬性。




          二、播放視頻去控件


          實現上圖效果,可添加CSS:


          此方法僅適用于 非全屏下去掉控件。



          三、去控件全屏播放




          實現去控件全屏播放步驟:

          1、全屏實現:將video視頻寬高設置為 100% (全屏)

          2、去控件參照上面說的第二步


          當然,如果想要實現真正的全屏(頂部的導航消失),針對x5內核的可以使用 同層播放器。

          新版的 TBS 內核(>=036849)支持同層播放器的視頻播放器,且不需要申請白名單。


          只需給 video 設置兩個屬性 x5-video-player-type="h5" 和 x5-video-player-fullscreen="true",播放效果自然服帖,效果如上圖。




          四、視頻自動播放


          設置屬性 autoplay

          But , Android始終不能自動播放,需要手動調用:


          開發中,遇到一個問題,在微信中始終無法實現自動播放,因為IOS和微信都是要求用戶有操作后才能自動播放影音視頻。

          這里,找到了一個hack方法:

          微信中,可以監聽 WeixinJSBridgeReady 事件,來實現視頻的自動播放



          五、黑屏問題

          ios 在播放視頻時,會出現短暫的黑屏(透屏),再正常顯示。


          為了避免不正常顯示,我們可以這樣做:

          在視頻上層覆蓋一個 使用視頻第一幀的圖片填充的“div 塊”,制造播放假象。然后監聽事件 timeupdate ,視頻播放有畫面時移除這個“div塊”




          六、常用屬性和事件

          video 支持的屬性和事件很多,但在有些屬性和事件在不同的系統上跟預想的表現不一致,在嘗試比較之后,以下基本可以滿足需求:


          1、autoplay 屬性


          <video autoplay="true" />


          設置此屬性,視頻將自動播放。


          2、preload 屬性


          <video preload="auto” />


          規定是否預加載視頻。

          可能的值:

          * auto - 當頁面加載后載入整個視頻

          * meta - 當頁面加載后只載入元數據

          * none - 當頁面加載后不載入視頻


          如果設置了 autoplay 屬性,則忽略該屬性。


          3、timeupdate 事件

          監聽音頻/視頻(audio/video)的播放位置發生改變時觸發。通常與 video.currentTime 一同使用





          4、ended 事件

          監聽視頻播放結束






          后記:

          網上關于video介紹的文章也挺多,通過搜集和自己的開發經驗,這里整理了一些問題:

          • 因為視頻是一邊播放一邊加載,因此不但視頻的大小會影響加載體驗,視頻的清晰度對加載體驗影響更大。
          • 建議視頻1S平均大小范圍控制在0.09~0.17M
          • 視頻格式建議使用mp4
          • 如果 在android 環境中,想要隱藏 video 播放器,style屬性 這樣寫:{ position: relative; display: none; z-index: -1; }





          參考資料:

          https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/video

          https://x5.tencent.com/tbs/guide/video.html

          作者:大轉轉 - 張穎

          來源:微信公眾號:大轉轉FE

          出處:https://mp.weixin.qq.com/s/Bz8Ra1coFirSnwsqacifVw

          里云播放器SDK(ApsaraVideo for Player SDK)是阿里視頻云端到云到端服務的重要一環,除了支持點播和直播的基礎播放功能外,還深度融合視頻云業務,支持視頻的加密播放、安全下載、首屏秒開、低延時等業務場景,為用戶提供簡單、快速、安全、穩定的視頻播放服務。本文銜接上文,詳細介紹web播放器的功能及實現。

          一、基本概況及功能

          • 播放器架構

          Aliplayer Web播放器分為H5和Flash兩個,Flash播放器隨著技術的發展會逐漸被邊緣化,所以我們以后只做維護,不會更新功能了,重點會放在H5播放器上。H5播放器架構主要分四層,底層H5 Video,播放能力和H5原生Video緊密相關。第二層是基礎播放器,它不依賴于具體業務,通過URL的方式來播放。第三層是為各種業務場景準備的不同的播放器,可以很容易的擴展,相互隔離不依賴。最上面一層是適配的播放器,會根據終端類型、瀏覽器類型、播放格式和用戶指定來進行智能適配。

          • 播放器功能

          最近,我們在播放器端上也實現了截圖、國際化、變速、UI自定義、微信同層播放、自適應播放、加密播放、H5播放flv、自定義插件等功能。后續,我們還會通過插件的形式實現彈幕、廣告等功能,并會開源到github上,也會支持用戶根據自己業務需求來自定義SDK包。

          • 播放器支持視頻格式

          • 適配播放

          我們整個視頻播放的基本原則是H5優先,能用H5播放的肯定不用Flash去播放。所以在移動端,我們肯定是用H5來播放的,PC端也依照這個原則盡量使用H5。同時,我們會判斷瀏覽器類型支持哪種播放格式,比如m3u8在PC端IE11以上的瀏覽器才能播放,如果遇到IE11以下的瀏覽器,我們自動會選擇Flash播放。在視頻格式方面,假設視頻是rtmp和flv,我們會自動選擇Flash播放。另外,如果用戶自主設置useH5Prism和useFlashPrism屬性,那我們也會依照用戶的選擇。

          • 瀏覽器支持情況

          FLASH支持IE8以上,在瀏覽器上啟動允許FLASH運行即可;H5支持IE9以上,m3u8需要在IE11以上才可以運行;其他瀏覽器都也都是可以支持的。

          • 兩種播放方式

          1. source,通過url 去播放

          2. 通過點播vid+playauth去播放,第二種方式和視頻云結合比較緊密

          • 點播播放格式的選擇

          點播服務中轉碼生成的視頻格式有很多,包括m3u8、flv、mp4等。播放器有自己的一套邏輯去選擇播放格式。對于H5來說,默認播放低清版本來節省流量,如果用戶使用了切換清晰度的功能,那我們會默認打開他選擇的版本。格式方面,則默認播放mp4,用戶也可以設置qualitySort來優先播放高清的的版本。對于Flash來說,默認格式順序是m3u8、flv、mp4。

          二、功能介紹及啟用

          • 創建播放器

          1. 引用正確的JS和CSS文件

          2. 添加播放器容器 需要設置容器的id屬性,另外2.0.1之前的版本要添加prism-player類型。

          • New Aliplayer創建播放

          • 在線配置,用戶可以預先體驗下播放器的情況

          • Aliplayer-Cli創建演示例子

          用戶需要演示例子的時候,不需要寫很多代碼,通過這個命令,就可以創建例子,直接體驗AliPlayer。

          • PC端支持m3u8

          播放域名啟用允許跨域訪問

          • 訂閱和取消事件

          • 清晰度切換

          H5 1.9.9以后的版本和id+playauth播放方式才支持清晰度切換;支持記憶選擇的清晰度,當選擇的清晰度不能播放時,自動選擇下一個清晰度播放。

          • 手動切換視頻-H5

          這個功能播放器內比較常見。我們把它分成兩種情況去處理,如果是地址播放,我們通過loadByUrl來播放;如果是vid+playauth播放,我們通過replayByVidAndPlayAuth的方法來播放。

          • 手動切換視頻-flash

          地址播放方法與H5的方法一樣,vid+playauth播放則需要先銷毀播放器,再重新創建播放。

          • 不同地址格式的切換

          只能先銷毀播放器,再重新選擇正確的播放器播放。Github地址看simple demo:https://github.com/alilmq/aliplayer-simple-demo

          ![b_3_7]

          • UI自定義

          很多用戶有這個需求,所以我們的UI是可以隱藏掉的。提供了一個skinLayout的屬性,當這個屬性沒有指定值的時候,UI組件是全部顯示。如果是空數組的時候,UI組件全部不顯示。并且可以自定義組件的顯示和位置,在默認UI基礎上去裁剪,2.3.0版本以后,用戶也可以通過自定義插件的方式自定義自己的UI。

          • 截屏

          H5啟用:

          FLASH啟用:snapshot:true

          H5播放器,播放域名需添加允許跨域訪問的header

          支持訂閱snapshoted事件,獲取截屏的時間點和數據:

          支持設置截圖的大小和質量:

          支持添加文字水印:

          • 邊轉變播功能

          邊轉邊播是MTS的功能,播放器可以支持這種場景的播放。第一次觀看的時候調用MTS API啟動轉碼,邊轉碼邊播放,而且可以設置延遲播放。轉碼中使用直播播放器,轉碼完成后使用點播方式播放。

          • H5 android微信同層播放

          因為H5在android端微信打開時,會自動全屏播放,覆蓋Dom元素。

          同層播放一般有兩種業務場景,一種是點播的,視頻在某個地方播放,下面的評論、播放列表等,demo地址:https://github.com/alilmq/h5demo

          還要一種場景是直播場景,視頻需要全屏。可以通過設置x5_type:h5啟用同層播放。Demo 地址:https://github.com/alilmq/h5livedemo

          另外H5微信同層播放,有兩篇文章可以參考:

          http://player.alicdn.com/aliplayer/docs/blogs/how-to-handle-h5-same-layer.html

          http://player.alicdn.com/aliplayer/docs/blogs/how-to-handle-h5-same-layer.html

          • 國際化

          提供language屬性,用于啟用各種語言,默認為zh-cn,可選值為zh-cn or en-us。

          • 倍速播放

          提供UI的版本,只提供了0.5、1、1.5、2四種倍速播放;而setspeed方法,可以隨意設置倍速播放。這個可能會有一些限制,移動端有的瀏覽器會不支持,比如android微信。

          • 對于直播播放失敗的處理

          在播放失敗時候,會嘗試重新播放,觸發onM3u8Retry事件,事件里可以做一些提示,比如主播離開請稍等;如果幾次嘗試后還是失敗,會出發livestreamstop事件,事件里做一些直播失敗或結束的提示。


          三、其他輔助功能及工具

          我們也做了一些輔助工具,方便用戶去接入和排查問題。

          • 診斷工具

          通過錯誤碼描述的映射關系,大概能知道用戶的錯誤所在;

          通過vid知道用戶播放的是哪個視頻;

          通過uuid這個唯一標識,可以在日志系統中查到用戶的播放狀態;

          通過requestid和播放時間,可以定位到用戶的錯誤是哪次播放的錯誤和具體的播放時間。

          這里還有一個診斷的功能,可以知道用戶環境的具體信息,省去手工獲取視頻的繁瑣,可以快速診斷問題。

          地址:http://player.alicdn.com/detection.html

          • 檢測工具

          關于視頻播放失敗,我們提供了三種方式,原生H5、阿里云H5、阿里云Flash。我們把播放的日志調出來,通過日志來情況來判斷播放失敗的原因。舉個例子,如果用戶剛開始請求數據時就失敗的話,那我們會猜測存在鑒權失敗的情況;如果加載數據出錯,那可能是用戶的網絡的原因;如果是開始播放后出錯,可能就問題就出在解析或播放器不支持等方面。

          • ffmpeg查看視頻信息

          有的用戶只有畫面,沒有聲音。我們可以通過ffmpeg可以看下視頻的格式、流的情況、碼率、幀率等。

          最后,阿里云播放器的所有情況都聚合在以下的網站上:

          http://player.alicdn.com/detection.html,其中包括幫助文檔、在線配置、診斷工具、產品demo等,大家可以登錄了解詳情。

          creenfull.js --瀏覽器全屏插件

          screenfull.js是用于跨瀏覽器使用JavaScript Fullscreen API的簡單包裝器, 可讓您將頁面或任何元素全屏顯示, 并且平滑瀏覽器實現差異,


          github地址:https://github.com/sindresorhus/screenfull.js 。

          壓縮版下載地址: https://www.bootcdn.cn/screenfull.js/

          項目中需要將后臺瀏覽器的窗口全屏, 也就是我們點擊一個按鈕要實現按F11全屏的效果。

          在HTML5中,W3C制定了關于全屏的API, 就可以實現全屏幕的效果, 也可以讓頁面中的圖片,

          視頻等全屏目前只有google chrome 15 +, safri5.1+,firfox10+,IE11支持

          var docElm=document.documentElement;
          //W3C
          if (docElm.requestFullscreen) {
          docElm.requestFullscreen();
          }
          //FireFox
          else if (docElm.mozRequestFullScreen) {
          docElm.mozRequestFullScreen();
          }
          //Chrome等
          else if (docElm.webkitRequestFullScreen) {
          docElm.webkitRequestFullScreen();
          }
          //IE11
          else if (elem.msRequestFullscreen) {
          elem.msRequestFullscreen();
          }
          if (document.exitFullscreen) {
          document.exitFullscreen();
          }
          else if (document.mozCancelFullScreen) {
          document.mozCancelFullScreen();
          }
          else if (document.webkitCancelFullScreen) {
          document.webkitCancelFullScreen();
          }
          else if (document.msExitFullscreen) {
          document.msExitFullscreen();
          }
          document.addEventListener("fullscreenchange", function () {
          fullscreenState.innerHTML=(document.fullscreen)? "" : "not ";}, false);
          
          document.addEventListener("mozfullscreenchange", function () {
          fullscreenState.innerHTML=(document.mozFullScreen)? "" : "not ";}, false);
          
          document.addEventListener("webkitfullscreenchange", function () {
          fullscreenState.innerHTML=(document.webkitIsFullScreen)? "" : "not ";}, false);
          document.addEventListener("msfullscreenchange", function () {
          fullscreenState.innerHTML=(document.msFullscreenElement)? "" : "not ";}, false);


          實例:

          http://robnyman.github.io/fullscreen/

          html代碼:

          <p>
          <button id="view-fullscreen">Fullscreen</button>
          <button id="cancel-fullscreen">Cancel fullscreen</button>
          </p>

          js代碼


          主站蜘蛛池模板: 在线观看一区二区精品视频| 亚洲国产精品第一区二区三区| 亚洲Av高清一区二区三区| 亚洲中文字幕乱码一区| 成人在线视频一区| 国产裸体舞一区二区三区| 国产美女一区二区三区| 久久精品岛国av一区二区无码| 日韩一区在线视频| 亚洲av日韩综合一区二区三区| 亚洲一区二区三区国产精品无码| 狠狠色婷婷久久一区二区| 国产精品无码一区二区在线观一 | 一区二区免费国产在线观看| 国模私拍福利一区二区| 色噜噜狠狠一区二区三区果冻| 国精品无码一区二区三区左线| 亚洲AV无码一区二区三区国产| 精品女同一区二区三区在线| 好吊妞视频一区二区| 久久精品国内一区二区三区| 蜜桃传媒一区二区亚洲AV| 波多野结衣一区二区三区| 中文字幕无线码一区2020青青| 日韩一区二区在线播放| 97se色综合一区二区二区| 无码播放一区二区三区| 日本一道高清一区二区三区| 激情无码亚洲一区二区三区| 亚洲熟女乱色一区二区三区| 天天综合色一区二区三区| 国产精品免费综合一区视频| 一区二区三区高清在线| 香蕉一区二区三区观| 久久国产精品一区免费下载| 91在线一区二区三区| 国产精品av一区二区三区不卡蜜| 国产在线一区二区三区在线| 成人一区二区免费视频| 日韩人妻精品无码一区二区三区 | 日韩精品一区二区三区毛片|