亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JavaScript實現頁面中錄音功能的方法

2024-05-06 16:51:47
字體:
來源:轉載
供稿:網友

前言

頁面中實現錄音需要使用瀏覽器提供的 Media?Recorder API,所以前提是需要瀏覽器支持 MediaStream Recording 相關的功能。

以下代碼默認工作在 Chrome 環境中。

準備頁面

首先準備一個頁面,其中內容很簡單,一個錄音按鈕,一個用于播放的 <audio> 標簽。

<!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>

獲取錄音權限

因為錄音需要使用設備的話筒,所以第一步應該是向用戶索要錄音的權限。這是通過 Media?Devices?.get?User?Media()
來完成的,其用法為:

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

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

其返回是個 Promise,因為用戶何時進行授權是不確定的。通過在 Promise 的回調中進行授權成功或失敗的處理。

在使用前需要判斷瀏覽器是否已經支持相應的 API,此時得到如下的代碼:

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

其中成功回調里得到的入參 stream 為 MediaStream 對象。

此時運行后可看到瀏覽器展示出了讓用戶授權使用麥克風的提示。

JavaScript,頁面,錄音

向用戶索要麥克風使用權限

創建錄音實例

將上一步獲取到的 MediaStream 傳入 Media?Recorder 的構造器創建一個錄音器的實例。

var mediaRecorder = new MediaRecorder(stream);

啟動錄音

通過監聽頁面中錄音按鈕的點擊來啟動錄音。

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

MediaRecorder 實例上有個 state 狀態,可用來判斷錄音器當前的活動狀態,總共有三種值:

  • inactive:處于休息狀態,要么是沒開始,要么是開始后已經停止。
  • recording:錄音中
  • paused:已經開始,但被暫停了,不是停止也沒有被恢復。

所以通過這個狀態,我們可以實現再次點擊按鈕時,結束錄音。

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

音頻數據的獲取

上面按鈕處理來自用戶的交互,只負責啟動或停止錄音。音頻的數據還是從 Media?Recorder 實例上通過監聽其相應的事件來完成的。

當錄音開始時,會觸發其 MediaRecorder.ondataavailable 事件,從該事件回調的入參為 BlobEvent,從它身上取到 event.data 便是我們需要的音頻數據。因為數據是一段一段產生的,所以需要暫存到一個數組中。

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

目前為止完成的代碼應該是這樣的:

 recorder.js

JavaScript,頁面,錄音

錄音狀態的查看

錄音結束及音頻的播放

通過監聽 MediaRecorder.onstop 事件,將收集好的音頻數據創建成Blob 對象,然后 通過 URL.createObjectURL 創建成 HTML 中 <audio> 標簽可使用的資源鏈接。

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

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

目前為止完成的代碼應該是這樣的:

 recorder.js

運行

完成上面步驟后,實現了一個簡單的錄音功能,可通過此地址在線體驗。完整的代碼可在倉庫 wayou/audio-recorder 中獲取到。

相關資源

  • Media?Recorder
  • MediaRecorder.onstop
  • URL.createObjectURL

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲高清福利视频| 欧美日本高清一区| 欧美尤物巨大精品爽| 国产一区二区香蕉| 国产亚洲美女精品久久久| 日韩欧美国产视频| 中文字幕久热精品在线视频| 亚洲香蕉av在线一区二区三区| 深夜精品寂寞黄网站在线观看| 成人美女免费网站视频| 欧美性69xxxx肥| 国产美女扒开尿口久久久| 日韩美女福利视频| 国产在线视频不卡| 91精品国产91久久久久久不卡| 久久精品国产2020观看福利| 国产一区二区黄| 亚洲乱码一区av黑人高潮| 久久精品国产免费观看| 久久深夜福利免费观看| 精品亚洲夜色av98在线观看| 高清欧美一区二区三区| 91精品国产高清| 成人午夜在线影院| 欧美国产激情18| 欧美猛少妇色xxxxx| 国产91精品青草社区| 视频一区视频二区国产精品| 亚洲伊人第一页| 亚洲亚裔videos黑人hd| 亚洲欧洲偷拍精品| 国内精品久久久久久影视8| 97精品视频在线播放| 久久综合伊人77777蜜臀| www.久久久久| 国产精品极品在线| 亚洲男人的天堂在线播放| 国产在线一区二区三区| 久久欧美在线电影| 奇米影视亚洲狠狠色| 久久视频在线播放| 欧美成人黄色小视频| 成人免费观看a| 国产一区二区av| 欧美尤物巨大精品爽| 亚洲免费小视频| 欧美人与性动交a欧美精品| 国产精品久久激情| 国产精品大片wwwwww| 欧美刺激性大交免费视频| 黑丝美女久久久| 欧美性xxxxx极品娇小| 亚洲色图日韩av| 中文字幕亚洲无线码在线一区| 奇米成人av国产一区二区三区| 欧美三级欧美成人高清www| 欧美在线观看网址综合| 亚洲国产美女久久久久| 国产裸体写真av一区二区| 国产一区二区三区在线播放免费观看| 亚洲高清一二三区| 成人久久久久爱| 亚洲福利视频免费观看| 亚洲qvod图片区电影| 97香蕉久久夜色精品国产| 97人人爽人人喊人人模波多| 美女扒开尿口让男人操亚洲视频网站| 精品日韩视频在线观看| 中文字幕av一区中文字幕天堂| 免费不卡在线观看av| 亚洲男女自偷自拍图片另类| 96精品久久久久中文字幕| 亚洲男人的天堂网站| 欧美精品午夜视频| 亚洲视屏在线播放| 青青a在线精品免费观看| 午夜美女久久久久爽久久| 亚洲国产日韩欧美在线99| 精品成人国产在线观看男人呻吟| 久久99精品久久久久久青青91| 国产高清在线不卡| 国产91久久婷婷一区二区| 欧美大尺度激情区在线播放| 9.1国产丝袜在线观看| 久久久999国产精品| 欧美亚洲免费电影| 国产精品久久久久久久久影视| 亚洲毛片在线免费观看| 日韩欧美国产视频| 亚洲精品视频在线观看视频| 欧美国产亚洲精品久久久8v| 国产欧美 在线欧美| 欧美成人激情图片网| 97热在线精品视频在线观看| 成人免费福利视频| 欧美精品在线免费播放| 久久久亚洲福利精品午夜| 国产精品久久久久久av福利| 亚洲天堂色网站| 国产成人精品在线视频| 欧美大全免费观看电视剧大泉洋| 欧美激情视频一区二区三区不卡| 亚洲激情在线视频| 欧美在线视频网| 色噜噜亚洲精品中文字幕| 欧美不卡视频一区发布| 国产亚洲视频在线| 久久中文字幕国产| 国产国产精品人在线视| 最近2019好看的中文字幕免费| 久久免费观看视频| 久久久噜噜噜久噜久久| 欧美精品在线第一页| 亚洲天堂视频在线观看| 国产欧美精品在线播放| 国产日韩精品入口| 亚洲欧洲在线视频| 国产精品色悠悠| 国产亚洲精品久久久久久| 国产不卡一区二区在线播放| 欧美日韩国产二区| 欧美电影免费在线观看| 精品国产精品自拍| 欧美精品在线看| 成人免费视频网址| 在线观看国产精品日韩av| 97超视频免费观看| 日韩电影免费观看在线观看| 日韩av第一页| 国产精品久久久av久久久| 精品国产91久久久久久老师| 高清一区二区三区日本久| 成人免费观看49www在线观看| 欧美性感美女h网站在线观看免费| 国产日韩中文字幕在线| 精品久久国产精品| 亚洲成人激情在线观看| 国产精品视频xxxx| 性色av一区二区三区| 欧美激情a∨在线视频播放| 伊人久久男人天堂| 欧美电影在线观看完整版| 久久久精品2019中文字幕神马| 亚洲综合中文字幕在线观看| 亚洲国产精彩中文乱码av在线播放| 久久亚洲一区二区三区四区五区高| 久久久久久国产| 日韩三级影视基地| 2019av中文字幕| 亚洲图片在区色| 欧美贵妇videos办公室| 亚洲国产精品一区二区久| 亚洲天堂网站在线观看视频| 91九色国产社区在线观看| 欧美视频在线看| 欧美伊久线香蕉线新在线| 精品国产精品自拍| 国产一区二区精品丝袜| 最新中文字幕亚洲| 精品激情国产视频| 色综合视频网站| 国产美女久久久| 国产一区二区久久精品| 欧美又大又硬又粗bbbbb|