天給大家推薦一個(gè)超強(qiáng)大的html5含彈幕視頻播放器插件DPlayer。
dplayer 一款開(kāi)源的高質(zhì)量H5視頻播放器,Star高達(dá)9.5K+。作者是一名大四95后小鮮肉。支持發(fā)布彈幕、Bilibili視頻及實(shí)時(shí)視頻(HLS M3U8 FLV)等格式。
安裝
$ npm install dplayer --save
也可以使用cdn引入,dplayer目前最新版本1.26.0
https://www.bootcdn.cn/dplayer/
我們先嘗試初始化一個(gè)最簡(jiǎn)單的 DPlayer
加載播放器文件:
<div id="dplayer"></div>
<script src="DPlayer.min.js"></script>
使用模塊管理器
import DPlayer from 'dplayer';
const dp=new DPlayer(options);
使用js初始化
const dp=new DPlayer({
container: document.getElementById('dplayer'),
video: {
url: 'demo.mp4',
},
});
DPlayer 有豐富的參數(shù)可以自定義你的播放器實(shí)例,詳細(xì)配置如下:
const dp=new DPlayer({
container: document.getElementById('dplayer'),
autoplay: false,
theme: '#FADFA3',
loop: true,
lang: 'zh-cn',
screenshot: true,
hotkey: true,
preload: 'auto',
logo: 'logo.png',
volume: 0.7,
mutex: true,
video: {
url: 'dplayer.mp4',
pic: 'dplayer.png',
thumbnails: 'thumbnails.jpg',
type: 'auto',
},
subtitle: {
url: 'dplayer.vtt',
type: 'webvtt',
fontSize: '25px',
bottom: '10%',
color: '#b7daff',
},
danmaku: {
id: '9E2E3368B56CDBB4',
api: 'https://api.prprpr.me/dplayer/',
token: 'tokendemo',
maximum: 1000,
addition: ['https://api.prprpr.me/dplayer/v3/bilibili?aid=4157142'],
user: 'DIYgod',
bottom: '15%',
unlimited: true,
},
contextmenu: [
{
text: 'custom1',
link: 'https://github.com/DIYgod/DPlayer',
},
{
text: 'custom2',
click: (player)=> {
console.log(player);
},
},
],
highlight: [
{
time: 20,
text: '這是第 20 秒',
},
{
time: 120,
text: '這是 2 分鐘',
},
],
});
清晰度切換
在 video.quality 里設(shè)置不同清晰度的視頻鏈接和類(lèi)型,video.defaultQuality 設(shè)置默認(rèn)清晰度
const dp=new DPlayer({
container: document.getElementById('dplayer'),
video: {
quality: [
{
name: 'HD',
url: 'demo.m3u8',
type: 'hls',
},
{
name: 'SD',
url: 'demo.mp4',
type: 'normal',
},
],
defaultQuality: 0,
pic: 'demo.png',
thumbnails: 'thumbnails.jpg',
},
});
HLS支持
需要在 DPlayer.min.js 前面加載 hls.js
<div id="dplayer"></div>
<script src="hls.min.js"></script>
<script src="DPlayer.min.js"></script>
const dp=new DPlayer({
container: document.getElementById('dplayer'),
video: {
url: 'demo.m3u8',
type: 'hls',
},
pluginOptions: {
hls: {
// hls config
},
},
});
console.log(dp.plugins.hls); // Hls 實(shí)例
提供豐富的文檔支持及示例演示
附上項(xiàng)目文檔及地址
# 文檔地址
http://dplayer.js.org/zh/
# 倉(cāng)庫(kù)地址
https://github.com/MoePlayer/DPlayer
另外,DPlayer系列播放器還包含Vue和React版本。
https://dplayer.netlify.app/
https://github.com/MoePlayer/react-dplayer
好了,就分享到這里。感興趣的同學(xué)可以去看下哈!如果小伙伴們有其它優(yōu)秀的H5播放器,歡迎一起交流討論。
言
HTML5 中提供的文件API在前端中有著豐富的應(yīng)用,上傳、下載、讀取內(nèi)容等在日常的交互中很常見(jiàn)。而且在各個(gè)瀏覽器的兼容也比較好,包括移動(dòng)端,除了 IE 只支持 IE10 以上的版本。想要更好地掌握好操作文件的功能,先要熟悉每個(gè)API。
FileList 對(duì)象和 file 對(duì)象
HTML 中的 input[type="file"] 標(biāo)簽有個(gè) multiple 屬性,允許用戶(hù)選擇多個(gè)文件,F(xiàn)ileList對(duì)象則就是表示用戶(hù)選擇的文件列表。這個(gè)列表中的每一個(gè)文件,就是一個(gè) file 對(duì)象。
file 對(duì)象的屬性:
<input type="file" id="files" multiple> <script> var elem=document.getElementById('files'); elem.onchange=function (event) { var files=event.target.files; for (var i=0; i < files.length; i++) { // 文件類(lèi)型為 image 并且文件大小小于 200kb if(files[i].type.indexOf('image/') !==-1 && files[i].size < 204800){ console.log(files[i].name); } } } </script>
input 中有個(gè) accept 屬性,可以用來(lái)規(guī)定能夠通過(guò)文件上傳進(jìn)行提交的文件類(lèi)型。
accept="image/*" 可以用來(lái)限制只允許上傳圖像格式。但是在 Webkit 瀏覽器下卻出現(xiàn)了響應(yīng)滯慢的問(wèn)題,要等上好幾秒才彈出文件選擇框。
解決方法就是將 * 通配符改為指定的 MIME 類(lèi)型。
<input type="file" accept="image/gif,image/jpeg,image/jpg,image/png">
Blob 對(duì)象
Blob 對(duì)象相當(dāng)于一個(gè)容器,可以用于存放二進(jìn)制數(shù)據(jù)。它有兩個(gè)屬性,size 屬性表示字節(jié)長(zhǎng)度,type 屬性表示 MIME 類(lèi)型。
如何創(chuàng)建
Blob 對(duì)象可以使用 Blob() 構(gòu)造函數(shù)來(lái)創(chuàng)建。
var blob=new Blob(['hello'], {type:"text/plain"});
Blob 構(gòu)造函數(shù)中的第一個(gè)參數(shù)是一個(gè)數(shù)組,可以存放 ArrayBuffer對(duì)象、ArrayBufferView 對(duì)象、Blob對(duì)象和字符串。
Blob 對(duì)象可以通過(guò) slice() 方法來(lái)返回一個(gè)新的 Blob 對(duì)象。
var newblob=blob.slice(0,5, {type:"text/plain"});
slice() 方法使用三個(gè)參數(shù),均為可選。第一個(gè)參數(shù)代表要從Blob對(duì)象中的二進(jìn)制數(shù)據(jù)的起始位置開(kāi)始復(fù)制,第二個(gè)參數(shù)代表復(fù)制的結(jié)束位置,第三個(gè)參數(shù)為 Blob 對(duì)象的 MIME 類(lèi)型。
canvas.toBlob() 也可以創(chuàng)建 Blob 對(duì)象。toBlob() 使用三個(gè)參數(shù),第一個(gè)為回調(diào)函數(shù),第二個(gè)為圖片類(lèi)型,默認(rèn)為 image/png,第三個(gè)為圖片質(zhì)量,值在0到1之間。
var canvas=document.getElementById('canvas'); canvas.toBlob(function(blob){ console.log(blob); }, "image/jpeg", 0.5);
下載文件
Blod 對(duì)象可以通過(guò) window.URL 對(duì)象生成一個(gè)網(wǎng)絡(luò)地址,結(jié)合 a 標(biāo)簽的 download 屬性來(lái)實(shí)現(xiàn)下載文件功能。
比如把 canvas 下載為一個(gè)圖片文件。
var canvas=document.getElementById('canvas'); canvas.toBlob(function(blob){ // 使用 createObjectURL 生成地址,格式為 blob:null/fd95b806-db11-4f98-b2ce-5eb16b38ba36 var url=URL.createObjectURL(blob); var a=document.createElement('a'); a.download='canvas'; a.href=url; // 模擬a標(biāo)簽點(diǎn)擊進(jìn)行下載 a.click(); // 下載后告訴瀏覽器不再需要保持這個(gè)文件的引用了 URL.revokeObjectURL(url); });
也可以將字符串保存為一個(gè)文本文件,方法類(lèi)似。
FileReader 對(duì)象
FileReader 對(duì)象主要用來(lái)把文件讀入內(nèi)存,并且讀取文件中的數(shù)據(jù)。通過(guò)構(gòu)造函數(shù)創(chuàng)建一個(gè) FileReader 對(duì)象
var reader=new FileReader();
該對(duì)象有以下方法:
上傳圖片預(yù)覽
在常見(jiàn)的應(yīng)用就是在客戶(hù)端上傳圖片之后通過(guò) readAsDataURL() 來(lái)顯示圖片。
<input type="file" id="files" accept="image/jpeg,image/jpg,image/png"> <img src="blank.gif" id="preview"> <script> var elem=document.getElementById('files'), img=document.getElementById('preview'); elem.onchange=function () { var files=elem.files, reader=new FileReader(); if(files && files[0]){ reader.onload=function (ev) { img.src=ev.target.result; } reader.readAsDataURL(files[0]); } } </script>
但是在一些手機(jī)上豎著拍照上傳照片時(shí)會(huì)有bug,會(huì)發(fā)現(xiàn)照片倒了,包括三星和iPhone。。。解決方案這里不做講解,有興趣可以查看:移動(dòng)端圖片上傳旋轉(zhuǎn)、壓縮的解決方案
數(shù)據(jù)備份與恢復(fù)
FileReader 對(duì)象的 readAsText() 可以讀取文件的文本,結(jié)合 Blob 對(duì)象下載文件的功能,那就可以實(shí)現(xiàn)將數(shù)據(jù)導(dǎo)出文件備份到本地,當(dāng)數(shù)據(jù)要恢復(fù)時(shí),通過(guò) input 把備份文件上傳,使用 readAsText() 讀取文本,恢復(fù)數(shù)據(jù)。
代碼跟上面功能類(lèi)似,這里不重復(fù),具體的應(yīng)用可以參考:notepad
Base64 編碼
在 HTML5 中新增了 atob 和 btoa 方法來(lái)支持 Base64 編碼。它們的命名也很簡(jiǎn)單,b to a 和 a to b,即代表著編碼和解碼。
var a="https://lin-xin.github.io"; var b=btoa(a); var c=atob(b); console.log(a); // https://lin-xin.github.io console.log(b); // aHR0cHM6Ly9saW4teGluLmdpdGh1Yi5pbw==console.log(c); // https://lin-xin.github.io
btoa 方法對(duì)字符串 a 進(jìn)行編碼,不會(huì)改變 a 的值,返回一個(gè)編碼后的值。atob 方法對(duì)編碼后的字符串進(jìn)行解碼。
但是參數(shù)中帶中文,已經(jīng)超出了8位ASCII編碼的字符范圍,瀏覽器就會(huì)報(bào)錯(cuò)。所以需要先對(duì)中文進(jìn)行 encodeURIComponent 編碼處理。
var a="哈嘍 世界"; var b=btoa(encodeURIComponent(a)); var c=decodeURIComponent(atob(b)); console.log(b); // JUU1JTkzJTg4JUU1JTk2JUJEJTIwJUU0JUI4JTk2JUU3JTk1JThD console.log(c); // 哈嘍 世界
https://zhuanlan.zhihu.com/p/27677175
TML5自帶了一個(gè)原生視頻播放器。它在瀏覽器中配備了簡(jiǎn)單的用戶(hù)界面、功能和一些基本的控件。盡管通過(guò)瀏覽器的默認(rèn)視頻播放器的功能完美運(yùn)行,但用戶(hù)界面并不那么美觀(guān)和時(shí)尚,總體上并不令人滿(mǎn)意。
因此,大多數(shù)現(xiàn)代Web應(yīng)用程序和平臺(tái),如Udemy、Netflix、YouTube和Amazon Prime,不會(huì)將默認(rèn)內(nèi)置的HTML5視頻播放器提供給他們的用戶(hù)。相反,他們會(huì)構(gòu)建自己定制的版本,具有時(shí)尚的用戶(hù)界面,使其平臺(tái)更具吸引力和用戶(hù)友好性。
如果你曾經(jīng)好奇這些公司和Web平臺(tái)是如何完成這樣的壯舉的,那么本文就是為你而寫(xiě)的。
在按照逐步指南進(jìn)行操作時(shí),您將獲得一些實(shí)踐經(jīng)驗(yàn),該指南將教您如何構(gòu)建和自定義自己的HTML5視頻播放器。您將學(xué)習(xí)如何自定義用戶(hù)界面、擴(kuò)展功能,并構(gòu)建自己的出色的自定義控件和功能。
您還將學(xué)習(xí)如何僅使用瀏覽器中提供的原生Video API來(lái)構(gòu)建所有這些功能——無(wú)需外部庫(kù)或工具。
(本文內(nèi)容參考:java567.com)
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。