HTML代码
<!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>网页录音</title>
</head>
<style>
.btn {
display: inline-block;
line-height: 1;
white-space: nowrap;
background: #fff;
border: 1px solid #dcdfe6;
text-align: center;
box-sizing: border-box;
outline: none;
margin: 0;
font-weight: 500;
padding: 12px 20px;
color: #fff;
}
.record-start-btn {
background-color: #409eff;
border-color: #409eff;
}
.record-finish-btn {
background-color: #f56c6c;
border-color: #f56c6c;
}
</style>
<body>
<div class="app">
<button class="record-start-btn btn">开始录音</button>
<button class="record-finish-btn btn">结束录音</button>
<audio controls class="audio-player"></audio>
</div>
</body>
</html>
JavaScript代码
<script>
if (navigator.mediaDevices.getUserMedia) {
const constraints = { audio: true };
navigator.mediaDevices.getUserMedia(constraints).then(
(stream) => {
const recordStartBtn = document.querySelector(".record-start-btn");
const recordFinishBtn =
document.querySelector(".record-finish-btn");
const mediaRecorder = new MediaRecorder(stream);
var chunks = [];
recordStartBtn.onclick = () => {
console.log(mediaRecorder.state);
if (mediaRecorder.state === "inactive") {
mediaRecorder.start();
mediaRecorder.ondataavailable = function (e) {
chunks.push(e.data);
};
console.log(chunks);
} else {
alert('开启录音中')
}
};
recordFinishBtn.onclick = () => {
if (mediaRecorder.state == "recording") {
mediaRecorder.stop();
mediaRecorder.onstop = (e) => {
var blob = new Blob(chunks, {
type: "audio/ogg; codecs=opus",
});
chunks = [];
var audioURL = window.URL.createObjectURL(blob);
const audioSrc = document.querySelector(".audio-player");
audioSrc.src = audioURL;
};
}else{
alert('没有开启录音')
}
};
},
() => {
alert("授权失败!");
}
);
} else {
console.error("浏览器不支持 getUserMedia");
}
</script>
全部代码
<!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>实现在网页上录音</title>
</head>
<style>
.btn {
display: inline-block;
line-height: 1;
white-space: nowrap;
background: #fff;
border: 1px solid #dcdfe6;
text-align: center;
box-sizing: border-box;
outline: none;
margin: 0;
font-weight: 500;
padding: 12px 20px;
color: #fff;
}
.record-start-btn {
background-color: #409eff;
border-color: #409eff;
}
.record-finish-btn {
background-color: #f56c6c;
border-color: #f56c6c;
}
</style>
<body>
<div class="app">
<button class="record-start-btn btn">开始录音</button>
<button class="record-finish-btn btn">结束录音</button>
<audio controls class="audio-player"></audio>
</div>
<script>
if (navigator.mediaDevices.getUserMedia) {
const constraints = { audio: true };
navigator.mediaDevices.getUserMedia(constraints).then(
(stream) => {
const recordStartBtn = document.querySelector(".record-start-btn");
const recordFinishBtn =
document.querySelector(".record-finish-btn");
const mediaRecorder = new MediaRecorder(stream);
var chunks = [];
recordStartBtn.onclick = () => {
console.log(mediaRecorder.state);
if (mediaRecorder.state === "inactive") {
mediaRecorder.start();
mediaRecorder.ondataavailable = function (e) {
chunks.push(e.data);
};
console.log(chunks);
} else {
alert('开启录音中')
}
};
recordFinishBtn.onclick = () => {
if (mediaRecorder.state == "recording") {
mediaRecorder.stop();
mediaRecorder.onstop = (e) => {
var blob = new Blob(chunks, {
type: "audio/ogg; codecs=opus",
});
chunks = [];
var audioURL = window.URL.createObjectURL(blob);
const audioSrc = document.querySelector(".audio-player");
audioSrc.src = audioURL;
};
}else{
alert('没有开启录音')
}
};
},
() => {
alert("授权失败!");
}
);
} else {
console.error("浏览器不支持 getUserMedia");
}
</script>
</body>
</html>