整合營(yíng)銷(xiāo)服務(wù)商

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

          免費(fèi)咨詢(xún)熱線(xiàn):

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

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

          天給大家推薦一個(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版本。

          • Vue-DPlayer
          https://dplayer.netlify.app/
          • React-DPlayer
          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ì)象的屬性:

          • name : 文件名,不包含路徑。
          • type : 文件類(lèi)型。圖片類(lèi)型的文件都會(huì)以 image/ 開(kāi)頭,可以由此來(lái)限制只允許上傳圖片。
          • size : 文件大小。可以根據(jù)文件大小來(lái)進(jìn)行其他操作。
          • lastModified : 文件最后修改的時(shí)間。
          <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ì)象有以下方法:

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

          上傳圖片預(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)


          主站蜘蛛池模板: 久久久久人妻一区二区三区 | 精品无码一区二区三区爱欲 | 国产人妖在线观看一区二区 | 亚洲综合无码精品一区二区三区| 亚洲国产成人久久一区WWW| 理论亚洲区美一区二区三区| 搜日本一区二区三区免费高清视频 | 日韩一区二区三区视频| 国产婷婷色一区二区三区| 无码人妻精品一区二区三区久久| 亚洲愉拍一区二区三区| 亚洲高清成人一区二区三区| 久久免费区一区二区三波多野| 一区二区亚洲精品精华液| 性色AV 一区二区三区| 日韩人妻一区二区三区蜜桃视频| 国产SUV精品一区二区88| 亚洲一区二区三区无码中文字幕 | 在线欧美精品一区二区三区| 日本一区二区三区爆乳| 精品国产一区二区三区在线观看| 成人精品视频一区二区三区不卡| 亚洲av日韩综合一区在线观看| 日韩成人无码一区二区三区| 久久一区二区三区免费| 亚洲AV无码一区二区三区人| 国产MD视频一区二区三区| 精品一区二区久久久久久久网站| 深田咏美AV一区二区三区| 国产色情一区二区三区在线播放 | 国产成人精品视频一区| 久久精品一区二区东京热| 日本一区中文字幕日本一二三区视频 | 台湾无码一区二区| 色系一区二区三区四区五区| 中文字幕一区视频| 国模无码一区二区三区不卡| 国精产品一区一区三区MBA下载 | 99偷拍视频精品一区二区| 日本一区精品久久久久影院| 国产福利一区视频|