HTML部分
标签部分
- audio标签,实现录制完毕播放音频
- button按钮,分别实现开始录制、开始播放、开始下载
特别说明
- controls音频进度条
- disabled按钮不激活状态
<audio controls id="audioPlay"></audio>
<button id="btnRecord">开始录制</button>
<button disabled id="btnPlay">开始播放</button>
<button disabled id="btnDownload">开始下载</button>
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();
}
项目效果
特别推荐
- 李超老师的《WebRTC实时互动直播技术入门与实战 5G时代必备技能》
- 李老师厉害,拥有10多年的软件开发经历,8年多的音视频直播行业相关经验,有很多值得我们学习的技能,他的课通俗易懂,只要是老师的课程,我都会购买,因为课程一直很好。从ffmpeg到WebRTC,每门课程都是那么用心。学习ffmpeg不懂c语言,老师讲C,学习WebRTC,不懂JS,老师讲JS。听完老师的课,总会茅塞洞开,很难理解的知识点,在老师那里讲的通俗易懂,所以你从来不会担心学不会。
- 最后,走过路过,千万别错过!
點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫(xiě)下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得
100積分直接送
付費(fèi)專(zhuān)欄免費(fèi)學(xué)
大額優(yōu)惠券免費(fèi)領(lǐng)