整合營銷服務商

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

          免費咨詢熱線:

          如何使用TailwindCSS和JavaScript構建自定義的HTML5視頻播放器

          TML5自帶了一個原生視頻播放器。它在瀏覽器中配備了簡單的用戶界面、功能和一些基本的控件。盡管通過瀏覽器的默認視頻播放器的功能完美運行,但用戶界面并不那么美觀和時尚,總體上并不令人滿意。

          因此,大多數現代Web應用程序和平臺,如Udemy、Netflix、YouTube和Amazon Prime,不會將默認內置的HTML5視頻播放器提供給他們的用戶。相反,他們會構建自己定制的版本,具有時尚的用戶界面,使其平臺更具吸引力和用戶友好性。

          如果你曾經好奇這些公司和Web平臺是如何完成這樣的壯舉的,那么本文就是為你而寫的。

          在按照逐步指南進行操作時,您將獲得一些實踐經驗,該指南將教您如何構建和自定義自己的HTML5視頻播放器。您將學習如何自定義用戶界面、擴展功能,并構建自己的出色的自定義控件和功能。

          您還將學習如何僅使用瀏覽器中提供的原生Video API來構建所有這些功能——無需外部庫或工具。

          (本文內容參考:java567.com)

          希望可以通過這篇文章,能夠給你得到幫助。(感謝一鍵三連)

          學習深入理解HTML5audiovideo

          HTML5視頻概述

          HTML5播放一個視頻,很簡單,只需要一行代碼:

          <video src="resources/dadaqianduan.mp4" autoplay></video>

          了解多媒體術語

          了解視頻文件格式:

          Audio Video InterLeaved .avi
          
          Flash Video .flv
          
          MPEG-4 .mp4
          
          Matroska .mkv
          
          Ogg .ogv

          音頻和視頻編解碼器

          編解碼器可以理解為一些算法代碼,用于處理視頻,音頻或者其元數據的編碼格式。對音頻或視頻文件進行編碼,可使得文件大大縮小,便于在因特網上傳輸。

          音頻編解碼器:

          MP3,使用ACC音頻

          Wav,使用Wav音頻

          Ogg,使用OggVorbis音頻

          視頻編解碼器:

          MP4,使用H.264視頻,AAC音頻

          WebM,使用VP8視頻,OggVorbis音頻

          Ogg,使用Theora視頻,OggVorbis音頻

          多媒體文件格式

          audio元素支持的音頻格式MP3,Wav,Oggvideo元素支持的格式MP4,WebM,Ogg

          • audio元素是專門用于在網頁中播放網絡音頻的
          • video元素是專門用于在網頁中播放視頻的

          HTML5audiovideo元素提供的接口包含了一系列的屬性,方法和事件,這些接口可以幫助開發完成對音頻和視頻的操作。

          那么如何在頁面中添加音頻和視頻呢?

          音頻

          <audio src="resources/audio.mp3">
          </audio>

          視頻

          <video src="resources/video.mp4" width="600" height="200">
          </video>

          使用source元素

          因為各種瀏覽器對音頻和視頻的編解碼器的支持不一樣,為了能夠在各種瀏覽器中正常使用,可以提供多個源文件。

          <audio src="resources/audio.mp3">
           <source src="song.ogg" type="audio/ogg">
           <source src="song.mp3" type="audio/mpeg">
          </audio>
          <video src="resources/video.mp4" width="600" height="200" controls>
           <source src="movie.ogg" type="video/ogg codes=`theora,vorbis` ">
           <source src="movie.mp4" type="video/mp4">
          </video>

          使用source元素替代了audiovideo的標簽屬性src

          1. src屬性用于指定媒體文件的url地址
          2. type屬性用于指定媒體文件的類型,屬性值為媒體文件的MIME類型,該屬性值還可以通過codes參數指定編碼格式

          audiovideo特性和屬性

          元素的標簽特性

          1. src,源文件特性,用于指定媒體文件的url地址
          2. autoplay,自動播放特性,表示媒體文件加載后自動播放。
          <video src="resources/video.mp4" autoplay></video>
          1. controls,控制條特性,表示為視頻或音頻添加自帶的播放控制條。
          <video src="resources/video.mp4" controls></video>
          1. loop,循環特性,表示音頻或視頻循環播放。
          <video src="resources/video.mp4" controls loop></video>
          1. preload,預加載特性,表示頁面加載完成后如何加載視頻數據。
          • none表示不進行預加載
          • metadata表示只加載媒體文件的元數據
          • auto表示加載全部視頻或音頻,默認值為auto
          <video src="resources/video.mp4" controls preload="auto"></video>
          1. postervideo元素獨有的特性,替代內容屬性,用于指定一副替代圖片的url地址,當視頻不可以用時,會顯示該替代圖片。
          <video src="resources/video.mp4" controls poster="images/none.jpg"</video>
          1. widthheightvideo元素獨有的特性,用于指定視頻的寬度和高度
          <video src="resources/video.mp4" width="600" height="200" controls></video>

          接口屬性

          1. currentSrc,只讀,獲取當前正在播放或已加載的媒體文件的url地址
          2. videoWidth,只讀,video元素特有屬性,獲取視頻原始的寬度
          3. videoHeight,只讀,video元素特有屬性,獲取視頻原始的高度
          4. currentTime,獲取或設置當前媒體播放位置的時間點
          5. startTime,只讀,獲取當前媒體播放的開始時間
          6. duration,只讀,獲取整個媒體文件的播放時長
          7. volume,獲取或設置媒體文件播放時的音量,取值范圍在0.00.1之間
          8. muted,獲取或設置媒體文件播放時是否靜音。true表示靜音,false表示消除靜音
          9. ended,只讀,如果媒體文件已經播放完畢則返回true,否則返回false
          10. error,只讀,讀取媒體文件的錯誤代碼
          11. played,只讀,獲取已播放媒體的TimesRanges對象,該對象內容包括已播放部分的開始時間和結束時間。
          12. paused,只讀,如果媒體文件當前是暫停或未播放則返回true,否則返回false
          13. seeking,只讀,獲取瀏覽器是否正在請求媒體數據
          14. seekable,只讀,獲取媒體資源已請求的TimesRanges對象,該對象內容包括已請求部分的開始時間和結束時間
          15. networkState,只讀,獲取媒體資源的加載狀態
          16. buffered,只讀,獲取本地緩存的媒體數據的TimesRanges對象
          17. readyState,只讀,獲取當前媒體播放的就緒狀態
          18. playbackRate,獲取或設置媒體當前的播放速率
          19. defaultPlaybackRate,獲取或設置媒體默認的播放速率

          視頻播放的快進

          <!DOCTYPEHTML>
          <html>
          <head>
          <meta charset="utf-8">
          <title>視頻播放時的快進</title>
          <script type="text/javascript">
          function Forward() {
           var el = document.getElementById("myPlayer");
           var time = el.currentTime;
           el.currentTime = time+300;
          }
          </script>
          </head>
          <body>
          <video id="myPlayer" src="resources/video.mp4" width="600" height="200" controls>
          </video>
          <br/>
          <input type="button" value="快進" onclick="Forward()"/>
          </body>
          </html>

          audiovideo接口方法

          接口方法

          1. load(),加載媒體文件,為播放做準備。
          2. play(),播放媒體文件。
          3. pause(),暫停播放媒體文件。
          4. canPlayType(),測試瀏覽器是否支持指定的媒體類型。

          代碼示例使用接口:

          <!DOCTYPEHTML>
          <html>
          <head>
          <meta charset="utf-8">
          <title>播放與暫停</title>
          <script type="text/javascript">
          var videoEl = null;
          function Play() {
           videoEl.play();
          }
          function Pause() {
           videoEl.pause();
          }
          window.onload = function(){
           videoEl = document..getElementById("myPlayer");
          }
          </script>
          </head>
          <body>
          <video id="myPlayer" width="600">
           <source src="resources/video.mp4" type="video/mp4">
          </video><br>
          <input type="button" value="播放" onclick="Play()"/>
          <input type="button" value="暫停" onclick="Pause()"/>
          </body>
          </html>

          audiovideo事件

          捕獲事件的方式

          捕獲事件有兩種方法:一種是添加事件句柄,一種是監聽。

          <video id="myPlayer" src="resources/video.mp4" width="500" onplay="video_playing()">
          </video>
          
          // 監聽方式
          var videoEl = document.getElementById("myPlayer");
          videoEl.addEventListener("play",video_playing);

          接口事件

          1. play,當執行方法play()時觸發
          2. playing,正在播放時觸發
          3. pause,當執行了方法pause()時觸發
          4. timeupdate,當播放位置被改變時觸發
          5. ended,當播放結束后停止播放時觸發
          6. waiting,在等待加載下一幀時觸發
          7. ratechange,在當前播放速率改變時觸發
          8. volumechange,在音量改變時觸發
          9. canplay,以當前播放速率需要緩沖時觸發
          10. canplaythrough,以當前播放速率不需要緩沖時觸發
          11. durationchange,當播放時長改變時觸發
          12. loadstart,當瀏覽器開始在網上尋找數據時觸發
          13. progress,當瀏覽器正在獲取媒體文件時觸發
          14. suspend,當瀏覽器暫停獲取媒體文件,且文件獲取并不是正常結束時觸發
          15. abort,當終止獲取媒體數據時觸發
          16. error,在獲取媒體過程中出錯時觸發
          17. emptied,當所在網絡變為初始化狀態時觸發
          18. stalled,在瀏覽器嘗試獲取媒體數據失敗時觸發
          19. seeking,在瀏覽器正在請求數據時觸發
          20. seeded,在瀏覽器停止請求數據時觸發

          定義全局的視頻對象

          代碼如下:

          <script type="text/javascript">
          // 定義全局視頻對象
          var videoEl = null;
          // 網頁加載完畢后,讀取視頻對象
          window.addEventListener("load", function() {
           videoEl = document.getElementById("myPlayer")
          });
          </script>

          添加進度顯示功能

          代碼如下:

          <script type="text/javascript">
          function Progress() {
           var el = document.getElementById("progress");
           el.style.width = (videoEl.currentTime/videoEl.duration)*720 + "px"
           document.getElementById("info").innerHTML = s2time(videoEl.currentTime) + "/" + s2time(videoEl.duration);
          }
          
          function s2time(s) {
           var m = parseFloat(s/60).toFixed(0);
           s = parseFloat(s%60).toFixed(0);
           return (m<10?"0"+m:m)+":"+(s<10?"0"+s:s);
          }
          window.addEventListener("load",function(){videoEl.addEventListener("timeupdate",Progress)});
          window.addEventListener("load",Progress)

          添加靜音和調節音量的功能

          消除靜音videoEl.muted=false;靜音效果videoEl.muted=truevideoEl.volume=e.value;修改音量的值。

          添加慢進和快進功能

          近的一個前端外包的項目中,寫的頁面在chrome中打開時,video標簽都不能自動播放(奇怪的是相同的視頻,兩個月前在chrome下播放還是正常的;但現在,mac下一直無法播放,只有在controls的模式下點擊播放按鈕才可以播放;而windows下按F5刷新后可以播放,但是右鍵刷新頁面無法播放),Firefox卻是正常播放。

          最后找到了一篇博客說是要在video標簽中添加muted屬性,親測有效,代碼如下:

          1. <video controls=“controls” muted=“muted” autoplay=“autoplay”>
          2. <source src=“vedio/qietu.mp4” type=“audio/mp4”></source>
          3. </video>

          原理就是大多數瀏覽器在都支持靜音的視頻播放,如果你的視頻需要有聲音,或者要用音頻,這個還是不能解決問題。

          問題2

          視頻太大導致的不能自動播放問題(原因往往在于,視頻要播放的時候,視頻本身還沒加載完。。。)基于這個思路,我寫了這個代碼,就是反復的去執行播放操作,成功以后停止,親測有用。

          var play = setInterval(function(){

          console.log(1);

          var myVideo = $(‘#video’)[0]; //獲取視頻video

          if (myVideo.paused){

          myVideo.play();

          }else{

          clearInterval(play);

          //myVideo.pause();

          }

          },100)

          以上為切圖網 qietu.com原創,轉載請注明來源。


          主站蜘蛛池模板: 欧洲精品码一区二区三区免费看| 精品视频午夜一区二区| 香蕉在线精品一区二区| 精品永久久福利一区二区| 国产一区二区三区精品久久呦| 久久人妻内射无码一区三区| 视频一区二区三区免费观看| 国产日韩精品视频一区二区三区 | 国产凹凸在线一区二区| 韩国一区二区视频| 无码国产伦一区二区三区视频| 精品一区中文字幕| 精品国产一区二区三区久| 精品视频一区二区三区四区 | 国产成人精品第一区二区| 亚洲国产精品乱码一区二区 | 91成人爽a毛片一区二区| 色婷婷AV一区二区三区浪潮| 精品一区二区三区中文| 国产精品久久久久一区二区 | 国产激情无码一区二区app| 日韩一区二区三区免费播放| 久久久久人妻精品一区三寸| 人妻体内射精一区二区三区| 人妻少妇一区二区三区| 日本韩国一区二区三区| 国精品无码一区二区三区在线蜜臀| 中文字幕无码不卡一区二区三区| 动漫精品第一区二区三区| 久久免费区一区二区三波多野| 国偷自产Av一区二区三区吞精| 麻豆视频一区二区三区| 国产精品一区二区久久乐下载| 亚洲av乱码一区二区三区香蕉| 国99精品无码一区二区三区| 老熟妇仑乱一区二区视頻| 无码少妇一区二区三区| 色狠狠色狠狠综合一区| 日本夜爽爽一区二区三区| 亚洲狠狠久久综合一区77777| 国产在线无码视频一区|