博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebRTC录音功能 | 掘金技术征文
阅读量:6238 次
发布时间:2019-06-22

本文共 1957 字,大约阅读时间需要 6 分钟。

HTML部分

标签部分

  • audio标签,实现录制完毕播放音频
  • button按钮,分别实现开始录制、开始播放、开始下载

特别说明

  • controls音频进度条
  • disabled按钮不激活状态
复制代码

JavaScript部分

获取标签id

  • querySelector可以获取每个标签下的id
var audioPlay = document.querySelector('audio#audioPlay');var btnRecord = document.querySelector('button#btnRecord');var btnPlay = document.querySelector('button#btnPlay');var btnDownload = document.querySelector('button#btnDownload');复制代码

异步获取音频流

  • stream参数为获取到的音频流
  • window.stream实现全局流
navigator.mediaDevices.getUserMedia({audio:true}).then(gotMediaStream);function gotMediaStream(stream){    window.stream = stream; }复制代码

实现录制效果

btnRecord.onclick = () => {    if(btnRecord.textContent === '开始录制'){        startRecord();        btnRecord.textContent = '停止录制';        btnPlay.disabled = true;        btnDownload.disabled = true;    }else{        stopRecord();        btnRecord.textContent = '开始录制';        btnPlay.disabled = false;        btnDownload.disabled = false;    }}复制代码

实现开始录制功能

  • var mediaRecorder = new MediaRecorder(stream[,options]);
  • stream为获取到的音频流
  • options是一个可以带布尔类型的字典,可以获取多媒体设备
  • ondataavailable函数用于存储音频流
function startRecord(){    buffer = [];    mediaRecorder = new MediaRecorder(window.stream,{audio:true});    mediaRecorder.ondataavailable = handleDataAvailable;    mediaRecorder.start(10) //每隔10毫秒存储一块数据}var buffer;function handleDataAvailable(e) {    buffer.push(e.data);}复制代码

实现停止录制功能

function stopRecord() {    mediaRecorder.stop();}复制代码

实现开始播放功能

btnPlay.onclick = () => {    //使用Blob对象    var blob = new Blob(buffer, { type: 'audio/ogg' });    //获取资源    audioPlay.src = window.URL.createObjectURL(blob);    //控制标签    audioPlay.controls = true;    //开始播放    audioPlay.play();}复制代码

实现开始下载功能

btnDownload.onclick = () => {    var blob = new Blob(buffer, { type: 'audio/ogg' });    url = window.URL.createObjectURL(blob);    var a = document.createElement('a');    a.href = url;    a.download = 'juejin.ogg';    a.click();}复制代码

项目效果

转载于:https://juejin.im/post/5cb5d7bdf265da034c701ed3

你可能感兴趣的文章
《简明Python教程》Swaroop, C. H. 著 第1章 介绍
查看>>
Chapter 4. Working with Key/Value Pairs
查看>>
Python基础:Python可变对象和不可变对象
查看>>
[css3]文字过多以省略号显示
查看>>
vim显示行号、语法高亮、自动缩进的设置
查看>>
shell中的if语句
查看>>
WCf客户端测试
查看>>
Java线程面试题 Top 50
查看>>
java内存模型
查看>>
python继承关系及DVD案例
查看>>
木其工作室代写程序 [原]使用Filter过滤ip禁止访问系统
查看>>
2.6 The Object Model -- Bindings
查看>>
2.4 The Object Model -- Computed Properties and Aggregate Data with @each(计算的属性和使用@each聚合数据)...
查看>>
二叉树问题(区间DP好题)
查看>>
PHP基础
查看>>
PHP奇淫技巧
查看>>
Centos中配置环境变量
查看>>
mysql中判断记录是否存在方法比较【转】
查看>>
HBase 列族的概念
查看>>
hdu2036
查看>>