JavaScript工具:用JavaScript调用浏览器api,实现web应用录屏功能
·
已封装为工具函数,选定元素绑定该函数,就可以添加录屏功能
/**
* @description 用法:对dom元素添加监听事件绑定为getRecorderVideo(),即可调用
* @param playVideoIdName 可选参数,用于绑定在哪个节点预览录屏的视屏,不传则不预览
*/
export const getRecorderVideo = async (playVideoIdName) => {
let stream = await navigator.mediaDevices.getDisplayMedia({
video: true,
});
const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
? "video/webm; codecs=vp9"
: "video/webm";
// 浏览器录屏对象
let mediaRecorder = new MediaRecorder(stream, {
mimeType: mime,
});
let chunks = [];
// 记录屏幕渲染数据
mediaRecorder.addEventListener("dataavailable", function (e) {
chunks.push(e.data);
});
// 保存录屏数据
mediaRecorder.addEventListener("stop", function () {
let blob = new Blob(chunks, {
type: chunks[0].type,
});
let videoUrl = URL.createObjectURL(blob);
// 绑定播放视频Dom对象,
const playVideo = (name) => {
if (name != undefined && typeof name == "string") {
const videoBox = document.getElementById(`${name}`);
// 创建Video节点对象
const newVideo = document.createElement("video");
newVideo.src = videoUrl;
newVideo.style.height = "200px";
newVideo.style.width = "200px";
newVideo.setAttribute("class", "playRecorderVideoDom");
const oldVideo = videoBox
.getElementsByClassName("playRecorderVideoDom")
.item(0);
// 非第一次操作,替换节点即可
if (!oldVideo) {
videoBox.appendChild(newVideo);
} else {
videoBox.replaceChild(newVideo, oldVideo);
}
} else {
console.log("不播放视频");
}
};
// 下载录屏视频文件
const downloadVideo = (url, videoName) => {
let a = document.createElement("a");
a.href = url;
a.download = `${videoName}.webm`;
a.click();
};
downloadVideo(videoUrl, "录屏文件");
playVideo(playVideoIdName);
});
// 手动启动 录屏
mediaRecorder.start();
};
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)