<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        JavaScript實(shí)現(xiàn)頁面中錄音功能的方法

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:55:50
        文檔

        JavaScript實(shí)現(xiàn)頁面中錄音功能的方法

        JavaScript實(shí)現(xiàn)頁面中錄音功能的方法:前言 頁面中實(shí)現(xiàn)錄音需要使用瀏覽器提供的 Media​Recorder API,所以前提是需要瀏覽器支持 MediaStream Recording 相關(guān)的功能。 以下代碼默認(rèn)工作在 Chrome 環(huán)境中。 準(zhǔn)備頁面 首先準(zhǔn)備一個(gè)頁面,其中內(nèi)容很簡(jiǎn)單,一個(gè)錄音按鈕,一個(gè)用于播放的 &l
        推薦度:
        導(dǎo)讀JavaScript實(shí)現(xiàn)頁面中錄音功能的方法:前言 頁面中實(shí)現(xiàn)錄音需要使用瀏覽器提供的 Media​Recorder API,所以前提是需要瀏覽器支持 MediaStream Recording 相關(guān)的功能。 以下代碼默認(rèn)工作在 Chrome 環(huán)境中。 準(zhǔn)備頁面 首先準(zhǔn)備一個(gè)頁面,其中內(nèi)容很簡(jiǎn)單,一個(gè)錄音按鈕,一個(gè)用于播放的 &l

        前言

        頁面中實(shí)現(xiàn)錄音需要使用瀏覽器提供的 Media​Recorder API,所以前提是需要瀏覽器支持 MediaStream Recording 相關(guān)的功能。

        以下代碼默認(rèn)工作在 Chrome 環(huán)境中。

        準(zhǔn)備頁面

        首先準(zhǔn)備一個(gè)頁面,其中內(nèi)容很簡(jiǎn)單,一個(gè)錄音按鈕,一個(gè)用于播放的 <audio> 標(biāo)簽。

        <!DOCTYPE html>
        <html lang="en">
        <head>
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <meta http-equiv="X-UA-Compatible" content="ie=edge">
         <title>audio record</title>
        </head>
        <body>
         <div class="app">
         <button class="record-btn">record</button>
         <audio controls class="audio-player"></audio>
         </div>
         <script src="./recorder.js"></script>
        </body>
        </html>

        獲取錄音權(quán)限

        因?yàn)殇浺粜枰褂迷O(shè)備的話筒,所以第一步應(yīng)該是向用戶索要錄音的權(quán)限。這是通過 Media​Devices​.get​User​Media()
        來完成的,其用法為:

        var promise = navigator.mediaDevices.getUserMedia(constraints);

        其中 constraints 為需要獲取的權(quán)限列表,這里只需要指定音頻 audio 即可。

        其返回是個(gè) Promise,因?yàn)橛脩艉螘r(shí)進(jìn)行授權(quán)是不確定的。通過在 Promise 的回調(diào)中進(jìn)行授權(quán)成功或失敗的處理。

        在使用前需要判斷瀏覽器是否已經(jīng)支持相應(yīng)的 API,此時(shí)得到如下的代碼:

        if (navigator.mediaDevices.getUserMedia) {
         const constraints = { audio: true };
         navigator.mediaDevices.getUserMedia(constraints).then(
         stream => {
         console.log("授權(quán)成功!");
         },
         () => {
         console.error("授權(quán)失敗!");
         }
         );
        } else {
         console.error("瀏覽器不支持 getUserMedia");
        }

        其中成功回調(diào)里得到的入?yún)?stream 為 MediaStream 對(duì)象。

        此時(shí)運(yùn)行后可看到瀏覽器展示出了讓用戶授權(quán)使用麥克風(fēng)的提示。

        向用戶索要麥克風(fēng)使用權(quán)限

        創(chuàng)建錄音實(shí)例

        將上一步獲取到的 MediaStream 傳入 Media​Recorder 的構(gòu)造器創(chuàng)建一個(gè)錄音器的實(shí)例。

        var mediaRecorder = new MediaRecorder(stream);

        啟動(dòng)錄音

        通過監(jiān)聽頁面中錄音按鈕的點(diǎn)擊來啟動(dòng)錄音。

        const recordBtn = document.querySelector(".record-btn");
        const mediaRecorder = new MediaRecorder(stream);
        recordBtn.onclick = () => {
         mediaRecorder.start();
         console.log("錄音中...");
        };

        MediaRecorder 實(shí)例上有個(gè) state 狀態(tài),可用來判斷錄音器當(dāng)前的活動(dòng)狀態(tài),總共有三種值:

      1. inactive:處于休息狀態(tài),要么是沒開始,要么是開始后已經(jīng)停止。
      2. recording:錄音中
      3. paused:已經(jīng)開始,但被暫停了,不是停止也沒有被恢復(fù)。
      4. 所以通過這個(gè)狀態(tài),我們可以實(shí)現(xiàn)再次點(diǎn)擊按鈕時(shí),結(jié)束錄音。

        recordBtn.onclick = () => {
         if (mediaRecorder.state === "recording") {
         mediaRecorder.stop();
         recordBtn.textContent = "record";
         console.log("錄音結(jié)束");
         } else {
         mediaRecorder.start();
         console.log("錄音中...");
         recordBtn.textContent = "stop";
         }
         console.log("錄音器狀態(tài):", mediaRecorder.state);
        };

        音頻數(shù)據(jù)的獲取

        上面按鈕處理來自用戶的交互,只負(fù)責(zé)啟動(dòng)或停止錄音。音頻的數(shù)據(jù)還是從 Media​Recorder 實(shí)例上通過監(jiān)聽其相應(yīng)的事件來完成的。

        當(dāng)錄音開始時(shí),會(huì)觸發(fā)其 MediaRecorder.ondataavailable 事件,從該事件回調(diào)的入?yún)?BlobEvent,從它身上取到 event.data 便是我們需要的音頻數(shù)據(jù)。因?yàn)閿?shù)據(jù)是一段一段產(chǎn)生的,所以需要暫存到一個(gè)數(shù)組中。

        const chunks = [];
        mediaRecorder.ondataavailable = function(e) {
         chunks.push(e.data);
        };

        目前為止完成的代碼應(yīng)該是這樣的:

         recorder.js

        錄音狀態(tài)的查看

        錄音結(jié)束及音頻的播放

        通過監(jiān)聽 MediaRecorder.onstop 事件,將收集好的音頻數(shù)據(jù)創(chuàng)建成Blob 對(duì)象,然后 通過 URL.createObjectURL 創(chuàng)建成 HTML 中 <audio> 標(biāo)簽可使用的資源鏈接。

        mediaRecorder.onstop = e => {
         var blob = new Blob(chunks, { type: "audio/ogg; codecs=opus" });
         chunks = [];
         var audioURL = window.URL.createObjectURL(blob);
         audio.src = audioURL;
        };

        其中,在使用完收到到的音頻數(shù)據(jù)后,將 chunks 置空方便下次錄音時(shí)使用。

        目前為止完成的代碼應(yīng)該是這樣的:

         recorder.js

        運(yùn)行

        完成上面步驟后,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的錄音功能,可通過此地址在線體驗(yàn)。完整的代碼可在倉庫 wayou/audio-recorder 中獲取到。

        相關(guān)資源

      5. Media​Recorder
      6. MediaRecorder.onstop
      7. URL.createObjectURL
      8. 總結(jié)

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JavaScript實(shí)現(xiàn)頁面中錄音功能的方法

        JavaScript實(shí)現(xiàn)頁面中錄音功能的方法:前言 頁面中實(shí)現(xiàn)錄音需要使用瀏覽器提供的 Media​Recorder API,所以前提是需要瀏覽器支持 MediaStream Recording 相關(guān)的功能。 以下代碼默認(rèn)工作在 Chrome 環(huán)境中。 準(zhǔn)備頁面 首先準(zhǔn)備一個(gè)頁面,其中內(nèi)容很簡(jiǎn)單,一個(gè)錄音按鈕,一個(gè)用于播放的 &l
        推薦度:
        標(biāo)簽: 功能 錄音 錄音功能
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 中国人xxxxx69免费视频| 中文字幕久无码免费久久| 国产成人无码免费看视频软件| 色播亚洲视频在线观看| 久9这里精品免费视频| 亚洲精品视频在线| 69影院毛片免费观看视频在线| 亚洲天堂一区二区三区| 亚洲精品视频免费在线观看| 亚洲人成777在线播放| 成人au免费视频影院| 久久无码av亚洲精品色午夜| 波多野结衣免费视频观看| 一区二区三区AV高清免费波多| 久久乐国产精品亚洲综合| 中文字幕免费不卡二区| 亚洲人成网www| 日韩欧美一区二区三区免费观看| 亚洲一区AV无码少妇电影| 国产在线98福利播放视频免费| 一级毛片成人免费看a| 亚洲日本一区二区三区在线不卡| 丝袜捆绑调教视频免费区| 亚洲伊人tv综合网色| 成人黄动漫画免费网站视频 | 久久免费看黄a级毛片| 激情综合亚洲色婷婷五月APP| 黄网址在线永久免费观看 | 你是我的城池营垒免费观看完整版| 亚洲人成网站在线播放vr| 99精品热线在线观看免费视频 | 国产成人麻豆亚洲综合无码精品| 99视频在线观看免费| 亚洲精品中文字幕乱码影院| 在线观看91精品国产不卡免费| 国产精品hd免费观看| 久久亚洲美女精品国产精品 | 亚洲精品综合久久| 91高清免费国产自产| 免费人妻精品一区二区三区| 久久久久亚洲av无码专区喷水 |