1. 程式人生 > >HTML5 播放器心得與小結

HTML5 播放器心得與小結

隨著 HTML5 的普及,越來越多視訊網站使用 <video></video> 標籤播放直播、點播內容(如下圖所示)。使用 <video> 的好處,主要以下兩點。

  • 可以直接在頁面中播放,也就是所謂的“區域播放”,上半屏是視訊播放,下半屏是其他內容,可以一邊播放,一邊看其他內容。
  • 某些應用如微信朋友圈的 Webview 限制外部開啟視訊,這樣要在微信推廣的話,區域播放就迫切需要了。

儘管有以上好處,但是舊有的點解連結呼叫外部播放器開啟視訊的功能還是有其價值的,因為:

  • HTML5 Video 相容性問題,對 <video> 不一定完整支援。這時,呼叫外部播放器作為一種向下相容(fallback/polyfills)方案出現,在不支援的情況下,提示使用者選擇。
  • 提示使用客戶端開啟(引導使用者使用客戶端)。


播放器功能

HTML5 播放器是頁面的播放器,通過瀏覽器提供的介面呼叫其功能。相當於客戶端封裝的播放器而言頁面播放器的功能不算強大,但基本的播放需求還是可以滿足的。

  • width/height:高度、寬度,可設定百分比的相對單位進行頁面自適應,相容橫、豎螢幕的切換。
  • poster:設定視訊封面,可設定海報或截圖(不過圖片尺寸不好控制)。
  • autoplay/preload: 如果出現該屬性,則視訊在就緒後馬上播放。對於免費的內容。可以立刻播放。否則使用者點選了播放就跳到“訂購”。如果自動播放會佔用使用者的流量 。
  • loop: 如果出現該屬性,則當媒介檔案完成播放後再次開始播放。
  • controls:如果出現該屬性,則向用戶顯示控制元件,比如播放按鈕、全屏。如果需要自定義播放器樣式,可以設定該屬性不去顯示預設控制元件。利用瀏覽器 JavaScript 介面實現相應的功能。

<video> 元素提供的方法如下(參見W3C School)。

<video> 元素提供的屬性如下。
<video> 元素提供的事件如下。

相容性測試

關於瀏覽器自帶播放器的相容問題,詳細可參見《基於web網頁視訊播放常見問題》,文中分析主要的原因如下。

為什麼有些安卓手機無法播放視訊? ……我們知道安卓播放跟廠商支援情況有關,其實前端 JS 這邊對 <video> 標籤的解析和 H264 的解碼做不了什麼實質的事情,我們只能儘量使用 HTML5 的 API 介面找到 hack 各種裝置的方案,但關鍵還是看廠商支援情況,所以要在前端實現適配難度很大。
……
安卓由於嚴重的系統碎片化問題,導致不同的廠商、不同的瀏覽器對上述兩種條件的支援各不相同,所以安卓沒法簡單的說到底是否支援 HTML5 播放,甚至同一個廠商的不同機型,其特點都不一樣,我們遇到過單獨支援 flash 的,單獨支援 html5 的,或者二者都支援的,甚至還有都不支援的,另外還有明明實際上能使用 HTML5 播放但 API 又返回說不支援播放的。對此我們針對不同的 Android 裝置和瀏覽器做了些矯正和強制判斷,許多問題需要 Case by Case 去解決。

當前我們不但希望使用 <video> 播放,而且需要可以半屏內區域播放,最好還是在不修改源情下進行。首先我測試結果如下表。

機型

是否支援區域播放

直播格式

點播格式

視訊格式

rtsp

m3u8

3gp

mp4

Android 2.24

No

Yes

No

Yes

Yes

Android 2.35

No

Yes

No

Yes

Yes

Android 4.0

Yes

Yes

Yes

Yes

Yes

Android 4.1

Yes

Yes

Yes

Yes

Yes

Android 4.2

Yes

Yes

Yes

Yes

Yes

Android 4.3

Yes

Yes

Yes

Yes

Yes

Android 4.4

Yes

Yes

Yes

Yes

Yes

iOS 6

No

No

Yes

Yes

Yes

iOS 7

No

No

Yes

Yes

Yes

iOS 8

No

No

Yes

Yes

Yes

WP 867

No

No

No

Yes

Yes

WP 8.18

Yes

No

No

Yes

Yes

這裡根據上表,嘗試總結如下幾個方面。

  1. 視訊格式方面:一般安卓機型都支援 rtsp 格式,而m3u8 的話 Android 3.0 以後都支援。m3u8 是蘋果推薦的格式,所以 iOS 都支援。點播的話,mp4 一般都支援(H264壓縮演算法)。
  2. 關於區域內播放視訊,Android 2.2 不支援, Android 2.3 以後的版本支援。iPad 可以區域播放 iPhone 卻不行。iPhone 有一種情況可以區域播放,就是在 Webview 中開啟這個特性,僅限應用內的 Webview 使用,——這也就是朋友圈能夠區域播放的原因。
  3. 對於實在不支援 <video> 的瀏覽器,可以在開始標籤和結束標籤之間放置文字內容,這樣老的瀏覽器就可以顯示出不支援該標籤的資訊。

一般來講,Android 版本越高,問題越少。即使瀏覽器可以使用 <video> 播放,在細節上也會遇到各種問題。下面具體說明。

具體障礙

以上討論的是瀏覽器自帶瀏覽器。實際使用過程中,使用國產的第三方 Webkit瀏覽器可能性會大一些,例如 UC、QQ瀏覽器等等——因此又可以把相容性問題劃分為自帶瀏覽器的和第三方瀏覽器的。開發過程中遇到的具體如下。

  • 渲染問題,例如 QQ 瀏覽器,直播播放器播放時滾動會遮蓋導航,UC 瀏覽器 <video>標籤總是在前,設定 z-index 無效。
  • 華為機器不能播放標清內容(RTSP 流)
  • QQ X5 核心瀏覽器需要直接寫 m3u8,不能跳轉方式指定。
  • 小米1 video 標籤失效(Android 4.1 預設瀏覽器),屬於相容性問題。
  • 播放源地址,如果經過 HTTP 302 重定向跳轉的話,低於 Android 4.4 的機器可能不能最終獲取 m3u8/mp3/3gp 源地址。尤其對於直播的地址,因為需要鑑權、獲取手機號碼等流程,中間需要經過多次跳轉,所以舊版的瀏覽器就不能播放了1。試比較以下 HTML 程式碼的寫法:
    <!-- 通過 jsp 返回 m3u8 地址,這是間接的方式 -->
    <video src="http://server/getLive.jsp"/>
    <!-- 直接寫出 m3u8 地址 -->
    <video src="http://server/live.m3u8"/> 

    對此,我們暫時暴露最終源地址給前端 <video> 標籤。不過這樣帶來潛在的一個問題(見下一點)。

  • 因為源地址直接暴露了,所以對防盜鏈方面來說是有害而無利的。之所以之前的跳轉獲取源地址相對是安全點的,是因為那獲取過程是間接的。——當然無論間接還是直接,終端還是曉得源地址的。
  • poster="img.jpg" 設定圖片,不能 100% 自適應寬度。進而使用 video.background CSS 屬性,但會有播放時背景不會消失的問題(Android 上)
  • iOS 7 Safari 不能使用 onclick 登記單擊事件; iOS 8 無此問題
  • iOS 8 下如果設定播放源 src="" 為空的話,會向用戶提示“不可播放”的圖示;iOS 7 不會。這個情況是說使用者沒有許可權播放的時候才會設定 src=“”。
  • 綜上三點問題所述,採用一層 <img /> 遮罩的做法,播放的時候才顯示 video 標籤。這步需要相關的  JavaScript 的編碼。

相關推薦

HTML5 播放心得小結

隨著 HTML5 的普及,越來越多視訊網站使用 <video></video> 標籤播放直播、點播內容(如下圖所示)。使用 <video> 的好處,主要以下兩點。可以直接在頁面中播放,也就是所謂的“區域播放”,上半屏是視訊播放,下半屏是其他

H5視頻播放屬性API控件

mpeg4 使用 視頻 格式 abc video vid controls nbsp 一:理論 1.視頻播放器的格式介紹     視頻主要有三部分組成:視頻、音頻、編碼格式  視頻格式:avi、rmb、wmv、mpeg4、ogg、webm 2.H5的標簽video的簡單

html5播放 —— willesPlay.js,支持手機播放

前端之前介紹了不少視頻播放器,但是很多是基於flash的,現在已經很明顯,flash被很徹底的幹掉了,收藏一兩個html5播放器 (可以手機播放,手機都支持html5),以備做項目之需。 源碼地址 https://www.html5tricks.com/download/html5-video-player-

優酷免費去廣告的 html5 播放

pre AS 同時 代碼 str ring safari esc 開發者 在 HTML5 逐漸普及的技術趨勢下,國內很多的大視頻網站都還是默認使用 flash 來播放視頻,一方面來說,很多的瀏覽器(比如 Chrome Safari)都慢慢拋棄 flash 形式的視頻了,這樣

[嵌入式Linux專案實戰開發]基於QT4.7.4的音樂播放實現設計【2018年給力專案】

[嵌入式Linux專案實戰開發]基於QT4.7.4的音樂播放器實現與設計【2018年給力專案】是【創科之龍】團隊aiku嵌入式視訊教程系列製作的現有的音樂播放器。 主要功能實現: 1.新建工程,基類選擇Qwidget。雙擊開啟介面檔案,在介面檔案中建立label顯示時間、若干個tool

html5播放的一段格式化時間的程式碼

function getFormatTime(time) { var time = time || 0; var h = parseInt(time/3600), m = parseInt(time%3600/60),

一個最簡單的HTML5播放

<!DOCTYPE HTML> <html> <head> <title>Video Player Html5</title> </he

jqm視訊播放,html5視訊播放,html5音樂播放,html5播放,video開發demo,html5視訊播放示例,html5手機視訊播放

最近在論壇中看到了很多實用html5開發視訊播放,音樂播放的功能,大部分都在尋找答案。因此我就在這裡做一個demo,供大家相互學習。html5開發越來越流行了,而對於視訊這一塊也是必不可少的一部分。如何

一個有趣的html5播放

<span style="font-size:14px;"><strong><!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>html5

新手mp3播放心得(一)---- 獲取所有歌曲(遍歷檔案獲取、媒體庫獲取)

(一)遍歷檔案獲取 我在一開始是想著遍歷所有檔案,然後獲取所有歌曲的路徑,而在獲取路徑前涉及到獲取記憶體卡的根路徑,下面就說一下關於獲取記憶體卡根路徑的內容 1.一部分手機將eMMC儲存掛載到 /mnt/external_sd 、/mnt/sdcard2 等節點,而將外接的

B 站 HTML5 播放核心 Flv.js

Flv.js 是 HTML5 Flash 視訊(FLV)播放器,純原生 JavaScript 開發,沒有用到 Flash。由 bilibili 網站開源。 概覽: 一個實現了在 HTML5 視訊中播放 FLV 格式視訊的 JavaScript 庫。它的工作原理是將

html5播放larkplayer

外掛文件和下載地址: 用法: 一、引入外掛的css、js檔案 <script src="https://unpkg.com/[email protected]/dist/larkplayer.js"></script&g

從零實現一個自定義html5播放

寫在最前 本次的分享是一個基於HTML5<vedio>標籤實現的一個自定義視訊播放器。其中實現了播放暫停、進度拖拽、音量控制及全屏等功能。 歡迎關注我的部落格,不定期更新中—— 效果預覽 點我檢視原始碼倉庫。 核心思路 我相信一定會有些沒有接觸過製作自定義播放器的童鞋對於<vedio&

非常漂亮的HTML5音樂播放

tps min 播放 gre 頁面 row 簡單 div tle APlayer是一個非常漂亮的HTML5音頻播放器,它將audio標簽封裝,並結合CSS制作出漂亮的播放器UI,它支持設置歌名、歌手和歌詞,可以設置是否自動播放,支持縮略圖,支持播放進度以及設置播放源。

推薦下:開源ckplayer 網頁播放, 跨平臺(html5, mobile),flv, f4v, mp4, rtmp協議. webm, ogg, m3u8 !

網頁播放器 get ... 默認 control firefox ckplayer 原本 auto 視頻播放, 原本是想h5 自帶視頻播放,使用很簡單,結果現實很骨感。 <video controls="controls" preload="auto" height

4個小時實現一個HTML5音樂播放

同時 status parseint [0 ads 發布 大致 了解 mps 技術點:ES6+Webpack+HTML5 Audio+Sass 這裏,我們將一步步的學到如何從零去實現一個H5音樂播放器。 首先來看一下最終的實現效果:Demo鏈接 接下來就步入正題: 要

使用html5中video自定義播放必備知識點總結以及JS全屏API介紹

標簽 quest htm round internet tel ren per 全屏 一、video的js知識點: controls(控制器)、autoplay(自動播放)、loop(循環)==video默認的; 自定義播放器中一些JS中提供的方法和屬性的記錄: 1、pla

用javascript和html5做一個音樂播放,附帶源碼

功能 優化 str 自由 所有 音樂app 作者 弧形 ner 效果圖: 實現的功能 1、首頁 2、底部播放控件 3、播放頁面 4、播放列表 5、排行榜 6、音樂搜索 輸入搜索關鍵詞,點擊放大鏡圖標 7、側邊欄 目錄結構 開發心得與總結 1、輪播圖 首

自己動手實現html5視訊播放倍數播放功能

自己動手實現html5視訊播放器倍數播放功能 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>阿酷TONY--Tangni&

HTML5倍數功能視訊播放(加速2倍,1.5倍播放

方式一:採用第三方雲視訊平臺 HTML5倍數功能視訊播放器(加速2倍,1.5倍播放) 倍數功能視訊播放器的應用: 培訓場景,教育教學場景下,可以倍速觀看視訊,比如1.5倍,2倍的速度觀看視訊,可以更快速的看完課程,節省時間。 <div id="player">&