整合營銷服務商

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

          免費咨詢熱線:

          html5的面試中,大概率會問到的音頻和視頻的那些知識點

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

          學習深入理解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;修改音量的值。

          添加慢進和快進功能

          多站點都會使用到視頻. HTML5 提供了展示視頻的標準。

          檢測您的瀏覽器是否支持 HTML5 視頻:

          檢測

          Web站點上的視頻

          直到現在,仍然不存在一項旨在網頁上顯示視頻的標準。

          今天,大多數視頻是通過插件(比如 Flash)來顯示的。然而,并非所有瀏覽器都擁有同樣的插件。

          HTML5 規定了一種通過 video 元素來包含視頻的標準方法。

          瀏覽器支持

          Internet Explorer 9+, Firefox, Opera, Chrome, 和 Safari 支持 <video> 元素.

          注意: Internet Explorer 8 或者更早的IE版本不支持 <video> 元素。

          HTML5 (視頻)- 如何工作

          如需在 HTML5 中顯示視頻,您所有需要的是:

          實例

          <video width="320" height="240" controls>

          <source src="movie.mp4" type="video/mp4">

          <source src="movie.ogg" type="video/ogg">

          您的瀏覽器不支持Video標簽。

          </video>

          <video> 元素提供了 播放、暫停和音量控件來控制視頻。

          同時<video> 元素元素也提供了 width 和 height 屬性控制視頻的尺寸.如果設置的高度和寬度,所需的視頻空間會在頁面加載時保留。。如果沒有設置這些屬性,瀏覽器不知道大小的視頻,瀏覽器就不能再加載時保留特定的空間,頁面就會根據原始視頻的大小而改變。

          <video> 與</video> 標簽之間插入的內容是提供給不支持 video 元素的瀏覽器顯示的。

          <video> 元素支持多個 <source> 元素. <source> 元素可以鏈接不同的視頻文件。瀏覽器將使用第一個可識別的格式:

          視頻格式與瀏覽器的支持

          當前, <video> 元素支持三種視頻格式: MP4, WebM, 和 Ogg:

          瀏覽器MP4WebMOgg
          Internet ExplorerYESNONO
          ChromeYESYESYES
          FirefoxYESYESYES
          SafariYESNONO
          OperaYES (從 Opera 25 起)YESYES
          • MP4 = 帶有 H.264 視頻編碼和 AAC 音頻編碼的 MPEG 4 文件

          • WebM = 帶有 VP8 視頻編碼和 Vorbis 音頻編碼的 WebM 文件

          • Ogg = 帶有 Theora 視頻編碼和 Vorbis 音頻編碼的 Ogg 文件

          視頻格式

          格式MIME-type
          MP4video/mp4
          WebMvideo/webm
          Oggvideo/ogg

          HTML5 <video> - 使用 DOM 進行控制

          HTML5 <video> 和 <audio> 元素同樣擁有方法、屬性和事件。

          <video> 和 <audio>元素的方法、屬性和事件可以使用JavaScript進行控制.

          其中的方法有用于播放、暫停以及加載等。其中的屬性(比如時長、音量等)可以被讀取或設置。其中的 DOM 事件能夠通知您,比方說,<video> 元素開始播放、已暫停,已停止,等等。

          例中簡單的方法,向我們演示了如何使用 <video> 元素,讀取并設置屬性,以及如何調用方法。

          實例 1

          為視頻創建簡單的播放/暫停以及調整尺寸控件:

          播放/暫停 放大 縮小 普通

          上面的例子調用了兩個方法:play() 和 pause()。它同時使用了兩個屬性:paused 和 width。

          HTML5 Video 標簽

          標簽描述
          <video>定義一個視頻
          <source>定義多種媒體資源,比如 <video> 和<audio>
          <track>定義在媒體播放器文本軌跡

          5 讓我們的 Web 交互更加生動有趣,但瀏覽器的多樣性以及揮之不去的兼容問題,卻阻礙了技術發展。這并不是我們拒絕的理由,恰恰相反,它應該成為動力。

          一、語音場景

          文章標題為了嚴謹,所以叫音頻合成。如果用大白話來解釋,那就是「文字轉語音」。語音的場景就太多了:

          • 點讀機:哪里不會點哪里
          • 有聲小說:看著太累,聽起來不錯
          • Web 頁面警示用戶的操作
          • 鬧鐘,提醒,小秘書
          • 殘疾人支持

          這些都是隨處可見的例子,但真正燃起我激情的是這個場景,簡直酷炫到爆。

          原來動畫和語音結合起來才是最佳的用戶體驗。

          二、技術核心

          看完上面的動畫,按捺不住內心的好奇,隨手就翻起了源碼。Oh~原來如此,把你揪出來:

          let sayhello = new window.SpeechSynthesisUtterance('你好,歡迎來到 Jartto 的博客!');
          window.speechSynthesis.speak(sayhello);
          

          事情的真相就是簡單如此,短短兩行,就實現了語音播報。

          三、兼容性

          如此有趣的 API,突然想到了一萬個應用場景。別忙,先來看看 SpeechSynthesis 的兼容性吧:

          看起來各大瀏覽器支持的還不錯,那就試試唄!

          四、API 文檔

          SpeechSynthesis 接口是語音服務的控制接口,屬于網頁語音 API,它可以用于獲取設備上關于可用的合成聲音的信息,開始、暫停語音,或除此之外的其他命令。

          既然瀏覽器已經普遍支持了,那么我們不妨打印出來看看。

          下面我們來適當的解釋一下:

          • SpeechSynthesis.paused: 當 SpeechSynthesis 處于暫停狀態時, Boolean 值返回 true 。
          • SpeechSynthesis.pending: 當語音播放隊列到目前為止保持沒有說完的語音時, Boolean值返回 true 。
          • SpeechSynthesis.speaking: 當語音談話正在進行的時候,即使 SpeechSynthesis 處于暫停狀態, Boolean 返回 true 。
          • SpeechSynthesis.onvoiceschanged: 當由 SpeechSynthesis.getVoices() 方法返回的SpeechSynthesisVoice 列表改變時觸發。

          此外,還有幾個非常實用的方法:

          • SpeechSynthesis.cancel(): 移除所有語音談話隊列中的談話。
          • SpeechSynthesis.getVoices(): 返回當前設備所有可用聲音的 SpeechSynthesisVoice 列表。
          • SpeechSynthesis.pause(): 把 SpeechSynthesis 對象置為暫停狀態。
          • SpeechSynthesis.resume(): 把 SpeechSynthesis 對象置為一個非暫停狀態:如果已經暫停了則繼續。
          • SpeechSynthesis.speak(): 添加一個 utterance 到語音談話隊列;它將會在其他語音談話播放完之后播放。

          API 很簡單,這里就不贅述了,來個例子嘗嘗鮮。

          五、代碼演示

          MDN Web Docs上面有個很形象的例子,我們拿過來學習學習:

          注意:這里為了演示,只列出了核心代碼,完整代碼請看下面「完整示例」。

          六、補充:SpeechRecognition

          既然提到了文字轉語音,那么不得不提到語音識別。

          SpeechRecognition 顧名思義,語音識別,屬于網頁語音 API。需要麥克風等音頻輸入設備的支持,可以識別用戶的語音輸入,并且轉化成文字。

          SpeechRecognition API 需要硬件支持,所以兼容性并不好,大致如下:

          七、未來暢想

          相信不久的未來,瀏覽器會逐步統一,兼容問題將會化為烏有。你看,微軟不也低下了高貴的頭顱,投入了谷歌的懷抱。

          我們將會用更多的時間去探索技術,而不是去兼容老破舊的網站或者機器。當然,Web 技術會大行其道,用戶將會擁有到更加有趣的體驗。


          主站蜘蛛池模板: 99久久国产精品免费一区二区| 国产一区在线电影| 国产成人久久精品区一区二区| 欧洲精品无码一区二区三区在线播放| 久久精品国产一区二区| 黑人大战亚洲人精品一区| 亚洲欧美成人一区二区三区| 精品一区中文字幕| 日韩免费无码视频一区二区三区| 理论亚洲区美一区二区三区| 精品一区二区无码AV| 久久久久人妻一区二区三区| 国产乱码精品一区二区三区麻豆 | 麻豆国产在线不卡一区二区| 国产成人无码一区二区三区在线| 在线精品亚洲一区二区| 精品少妇一区二区三区视频| 无码夜色一区二区三区| 3d动漫精品啪啪一区二区免费| 亚洲日本中文字幕一区二区三区 | 一区五十路在线中出| 国产一区二区好的精华液 | 91精品国产一区| 日韩人妻无码一区二区三区99| 国产一区麻豆剧传媒果冻精品| 八戒久久精品一区二区三区| 国产精品无码一区二区三区在 | 无码一区二区三区在线| 在线精品亚洲一区二区| 午夜AV内射一区二区三区红桃视| 久久无码AV一区二区三区| 亚洲一区中文字幕在线观看| 狠狠做深爱婷婷综合一区 | 精品国产一区二区三区麻豆 | 91video国产一区| 无码中文字幕人妻在线一区二区三区| 亚洲一区中文字幕| 精品日韩一区二区| 亚洲免费视频一区二区三区| 秋霞午夜一区二区| 国产一区二区三区播放|