代码拉取完成,页面将自动刷新
<!DOCTYPE html>
<html lang="cmn">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>录屏+麦克风</title>
</head>
<body>
<button id="btn_start">开始录制</button>
<button id="btn_stop">停止录制</button>
<script>
let recoder;
// 监听开始录制按钮
document.getElementById("btn_start").addEventListener("click", async () => {
// 获取视频流和麦克风音频流
let videoStream = await navigator.mediaDevices.getDisplayMedia({ video: true });
let audioStream = await navigator.mediaDevices.getUserMedia({ audio: true });
// 合并视频轨和音频轨,实例化成媒体流
let tracks = [];
videoStream.getVideoTracks().forEach(t => tracks.push(t));
audioStream.getAudioTracks().forEach(t => tracks.push(t));
let stream = new MediaStream(tracks);
// 录制媒体流
recoder = new MediaRecorder(stream);
// 存入媒体流
let data = [];
recoder.ondataavailable = function (e) {
data.push(e.data);
}
// 停止录制的执行事件
recoder.onstop = function () {
// 关闭录制窗口
this.stream.getTracks().forEach(track => track.stop());
// 视频数据转换成Blob对象
let blob = new Blob(data, { type: this.mimeType });
// 创建链接并模拟点击下载
let link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.downloaded = new Date().getTime() + ".webm";
document.body.appendChild(link);
link.click();
// 释放占用内存资源
URL.revokeObjectURL(link.href);
link.remove();
}
// 开始录制
recoder.start();
})
// 监听停止录制按钮
document.getElementById("btn_stop").addEventListener("click", function () {
recoder.stop();
})
</script>
</body>
</html>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。