整合營銷服務(wù)商

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

          免費(fèi)咨詢熱線:

          高質(zhì)量 HTML5 開源視頻播放器DPlayer

          天給大家推薦一個超強(qiáng)大的html5含彈幕視頻播放器插件DPlayer。

          dplayer 一款開源的高質(zhì)量H5視頻播放器,Star高達(dá)9.5K+。作者是一名大四95后小鮮肉。支持發(fā)布彈幕、Bilibili視頻及實時視頻(HLS M3U8 FLV)等格式。

          安裝

          $ npm install dplayer --save

          也可以使用cdn引入,dplayer目前最新版本1.26.0

          https://www.bootcdn.cn/dplayer/

          我們先嘗試初始化一個最簡單的 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ù)可以自定義你的播放器實例,詳細(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è)置不同清晰度的視頻鏈接和類型,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 實例

          提供豐富的文檔支持及示例演示

          附上項目文檔及地址

          # 文檔地址
          http://dplayer.js.org/zh/
          
          # 倉庫地址
          https://github.com/MoePlayer/DPlayer

          另外,DPlayer系列播放器還包含Vue和React版本。

          • Vue-DPlayer
          https://dplayer.netlify.app/
          • React-DPlayer
          https://github.com/MoePlayer/react-dplayer

          好了,就分享到這里。感興趣的同學(xué)可以去看下哈!如果小伙伴們有其它優(yōu)秀的H5播放器,歡迎一起交流討論。

          靴們上網(wǎng)的話都知道,現(xiàn)在很多網(wǎng)站都提供視頻展示。我們在上一篇關(guān)于HTML5文章中提到了HTML5支持視頻和音頻,現(xiàn)在小編帶大家學(xué)習(xí)一下吧!

          創(chuàng)建簡單的HTML5文件

          HTML5文件名同樣后綴'.html',我們在sublime中可以使用輸入英文嘆號(!),然后按tab鍵就能創(chuàng)建一個簡單的HTML5文件:

          一個簡單的html5文檔:

          video 視頻

          <video>標(biāo)簽定義視頻。如下:

          control 屬性供添加播放、暫停和音量控件。

          瀏覽器中顯示:

          <video> 與 </video> 之間插入的內(nèi)容是供不支持 video 元素的瀏覽器顯示的:

          我們在IE7中打開看一下效果:

          <video> 標(biāo)簽的其他屬性

          1.autoplay屬性

          Autoplay屬性用于設(shè)置視頻是否自動播放,是一個布爾屬性。當(dāng)出現(xiàn)時,表示自動播放,去掉是表示不自動播放。

          <video src="video/Disney.mp4" controls="controls" autoplay="autoplay">你的瀏覽器版本不支持視頻</video>

          2.loop屬性

          loop屬性用于指定視頻是否循環(huán)播放,同樣是一個布爾屬性。

          <video src="video/Disney.mp4" controls="controls" autoplay="autoplay" loop="loop">你的瀏覽器版本不支持視頻</video>

          3.preload屬性

          此屬性用于定義視頻是否預(yù)加載。屬性有三個可選擇的值:none、metadata、auto。如果不使用此屬性,默認(rèn)為auto。

          如果使用 "autoplay",則忽略該屬性。

          <video src="video/Disney.mp4" controls="controls" preload="none">你的瀏覽器版本不支持視頻</video>

          None:不進(jìn)行預(yù)加載。使用此屬性值,可能是頁面制作者認(rèn)為用戶不期望此視頻,或者減少HTTP請求。

          Metadata:部分預(yù)加載。使用此屬性值,代表頁面制作者認(rèn)為用戶不期望此視頻,但為用戶提供一些元數(shù)據(jù)(包括尺寸,第一幀,曲目列表,持續(xù)時間等等)。

          Auto:全部預(yù)加載。

          你必須非常努力,才能看起來毫不費(fèi)力!

          關(guān)注小白前端,持續(xù)收到文章推送!

          HTML5 中提供的文件API在前端中有著豐富的應(yīng)用,上傳、下載、讀取內(nèi)容等在日常的交互中很常見。而且在各個瀏覽器的兼容也比較好,包括移動端,除了 IE 只支持 IE10 以上的版本。想要更好地掌握好操作文件的功能,先要熟悉每個API。

          FileList 對象和 file 對象

          HTML 中的 input[type="file"] 標(biāo)簽有個 multiple 屬性,允許用戶選擇多個文件,F(xiàn)ileList對象則就是表示用戶選擇的文件列表。這個列表中的每一個文件,就是一個 file 對象。

          file 對象的屬性:

          • name : 文件名,不包含路徑。
          • type : 文件類型。圖片類型的文件都會以 image/ 開頭,可以由此來限制只允許上傳圖片。
          • size : 文件大小。可以根據(jù)文件大小來進(jìn)行其他操作。
          • lastModified : 文件最后修改的時間。
          <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++) {
           // 文件類型為 image 并且文件大小小于 200kb
           if(files[i].type.indexOf('image/') !== -1 && files[i].size < 204800){
           console.log(files[i].name);
           }
           }
           }
          </script>
          

          input 中有個 accept 屬性,可以用來規(guī)定能夠通過文件上傳進(jìn)行提交的文件類型。

          accept="image/*" 可以用來限制只允許上傳圖像格式。但是在 Webkit 瀏覽器下卻出現(xiàn)了響應(yīng)滯慢的問題,要等上好幾秒才彈出文件選擇框。

          解決方法就是將 * 通配符改為指定的 MIME 類型。

          <input type="file" accept="image/gif,image/jpeg,image/jpg,image/png">
          

          Blob 對象

          Blob 對象相當(dāng)于一個容器,可以用于存放二進(jìn)制數(shù)據(jù)。它有兩個屬性,size 屬性表示字節(jié)長度,type 屬性表示 MIME 類型。

          如何創(chuàng)建

          Blob 對象可以使用 Blob() 構(gòu)造函數(shù)來創(chuàng)建。

          var blob = new Blob(['hello'], {type:"text/plain"});
          

          Blob 構(gòu)造函數(shù)中的第一個參數(shù)是一個數(shù)組,可以存放 ArrayBuffer對象、ArrayBufferView 對象、Blob對象和字符串。

          Blob 對象可以通過 slice() 方法來返回一個新的 Blob 對象。

          var newblob = blob.slice(0,5, {type:"text/plain"});
          

          slice() 方法使用三個參數(shù),均為可選。第一個參數(shù)代表要從Blob對象中的二進(jìn)制數(shù)據(jù)的起始位置開始復(fù)制,第二個參數(shù)代表復(fù)制的結(jié)束位置,第三個參數(shù)為 Blob 對象的 MIME 類型。

          canvas.toBlob() 也可以創(chuàng)建 Blob 對象。toBlob() 使用三個參數(shù),第一個為回調(diào)函數(shù),第二個為圖片類型,默認(rèn)為 image/png,第三個為圖片質(zhì)量,值在0到1之間。

          var canvas = document.getElementById('canvas');
          canvas.toBlob(function(blob){ console.log(blob); }, "image/jpeg", 0.5);
          

          下載文件

          Blod 對象可以通過 window.URL 對象生成一個網(wǎng)絡(luò)地址,結(jié)合 a 標(biāo)簽的 download 屬性來實現(xiàn)下載文件功能。

          比如把 canvas 下載為一個圖片文件。

          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();
           // 下載后告訴瀏覽器不再需要保持這個文件的引用了
           URL.revokeObjectURL(url);
          });
          

          也可以將字符串保存為一個文本文件,方法類似。

          FileReader 對象

          FileReader 對象主要用來把文件讀入內(nèi)存,并且讀取文件中的數(shù)據(jù)。通過構(gòu)造函數(shù)創(chuàng)建一個 FileReader 對象

          var reader = new FileReader();
          

          該對象有以下方法:

          • abort:中斷讀取操作。
          • readAsArrayBuffer:讀取文件內(nèi)容到ArrayBuffer對象中。
          • readAsBinaryString:將文件讀取為二進(jìn)制數(shù)據(jù)。
          • readAsDataURL:將文件讀取為data: URL格式的字符串。
          • readAsText:將文件讀取為文本。

          上傳圖片預(yù)覽

          在常見的應(yīng)用就是在客戶端上傳圖片之后通過 readAsDataURL() 來顯示圖片。

          <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ī)上豎著拍照上傳照片時會有bug,會發(fā)現(xiàn)照片倒了,包括三星和iPhone。。。解決方案這里不做講解,有興趣可以查看:移動端圖片上傳旋轉(zhuǎn)、壓縮的解決方案

          數(shù)據(jù)備份與恢復(fù)

          FileReader 對象的 readAsText() 可以讀取文件的文本,結(jié)合 Blob 對象下載文件的功能,那就可以實現(xiàn)將數(shù)據(jù)導(dǎo)出文件備份到本地,當(dāng)數(shù)據(jù)要恢復(fù)時,通過 input 把備份文件上傳,使用 readAsText() 讀取文本,恢復(fù)數(shù)據(jù)。

          代碼跟上面功能類似,這里不重復(fù),具體的應(yīng)用可以參考:notepad

          Base64 編碼

          在 HTML5 中新增了 atob 和 btoa 方法來支持 Base64 編碼。它們的命名也很簡單,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 方法對字符串 a 進(jìn)行編碼,不會改變 a 的值,返回一個編碼后的值。atob 方法對編碼后的字符串進(jìn)行解碼。

          但是參數(shù)中帶中文,已經(jīng)超出了8位ASCII編碼的字符范圍,瀏覽器就會報錯。所以需要先對中文進(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


          主站蜘蛛池模板: 国产伦精品一区二区三区免费下载| 福利一区二区在线| 欧洲精品码一区二区三区免费看 | 黑巨人与欧美精品一区| 国产福利电影一区二区三区久久久久成人精品综合 | 91午夜精品亚洲一区二区三区| 人妻夜夜爽天天爽一区| 国产情侣一区二区| 国产精品无码一区二区三区在| 亚洲AV无码一区二区乱子仑| 久久国产精品视频一区| 一区二区三区精品| 亚洲一区二区三区首页| 怡红院美国分院一区二区| AV天堂午夜精品一区二区三区| 国产成人精品无码一区二区| 国产成人一区在线不卡| 国产精品日韩一区二区三区| 国产一区玩具在线观看| 日韩电影在线观看第一区| 亚洲午夜电影一区二区三区 | 久久人妻av一区二区软件| 成人精品一区二区三区校园激情 | 夜色阁亚洲一区二区三区| 亚洲福利电影一区二区?| 大伊香蕉精品一区视频在线 | 亚洲日本一区二区| 秋霞无码一区二区| 国产亚洲综合精品一区二区三区| 丰满人妻一区二区三区视频| 国产在线观看一区二区三区四区| 无码日韩精品一区二区免费| 夜夜嗨AV一区二区三区| 日韩三级一区二区三区| 亚洲制服丝袜一区二区三区| 日本一区二区在线| 亚洲日本一区二区三区在线| 精品国产一区二区三区AV性色| 国产一区二区女内射| 无码视频一区二区三区在线观看| 久久国产高清一区二区三区|