js实现屏幕录制并保存视频

逻辑棱镜
• 阅读 7297

用到的相关API

  1. revokeObjectURL()、URL.createObjectURL()
  2. avigator.mediaDevices.getDisplayMedia()
  3. new MediaRecorder()

    页面布局

  4. video和三个按钮(start,stop,download)
  5. 分别点击对应三个事件,startCapture(),stopCapture(),mydownload()

    实现

  6. 保存录制生成的视频可以借助Blob转换成二进制,然后,作为a元素的href属性,配合download属性,实现下载。

    代码如下

    https://gitee.com/liu_qiao_xu...

const video = document.getElementById('video');
const start = document.getElementById('start');
const stop = document.getElementById('stop');
const download = document.getElementById('download');


const displayMediaOptions = {
    video: {
        cursor: "never"
    },
    audio: true
}

start.addEventListener('click',function(evt){
    startCapture();
},false)

stop.addEventListener('click',function(evt){
    stopCapture();
},false)

download.addEventListener('click',function(evt){
    mydownload();
},false)


let captureStream;
let recorder;
async function startCapture() {
    log = "";
    try {
        captureStream = await navigator.mediaDevices.getDisplayMedia(displayMediaOptions);
    } catch (err) {
        console.log('Error: ' + err);
        return alert('capture is error or cancel!');
    }
    // 删除原来的blob
    window.URL.revokeObjectURL(video.src);
    video.srcObject = captureStream;
    recorder = new MediaRecorder(captureStream);
    recorder.start();

}

function stopCapture() {
    let tracks = video.srcObject.getTracks();
    tracks.forEach(track => {
        track.stop();
    });
    recorder.stop();
    recorder.addEventListener('dataavailable',(event)=>{
        let videoUrl = URL.createObjectURL(event.data,{type:'video/mp4'});
        video.srcObject = null;
        video.src = videoUrl;
    })

}

function mydownload(){
    const name = new Date().toISOString().slice(0,19).replace('T',' ').replace(' ','_').replace(/:/g,'-');
    const a = document.createElement('a');
    a.href = video.src;
    a.download = `${name}.mp4`;
    document.body.appendChild(a);
    a.click();

}

结果

js实现屏幕录制并保存视频

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Javascript判断Video视频播放、暂停、结束完成及获取长度事件监听处理
在日常应用场景中,可能会遇到这么一个情况,需要判断用户是否完整的观看完了一部视频,在这个场景中,和视频相关的事件大体涉及到几个部分,获取视频长度,视频开始播放,暂停播放和播放结束,下面来看下如何通过JavaScript来监听获取视频的这几种状态。html页面视频标签大体如下:<video id\"video" controls\"controls
Stella981 Stella981
3年前
Flask实战第52天:cms添加轮播图前端代码逻辑完成
首页我们在模态框中的保存按钮加一个id,这样方便我们选取这个按钮<buttontype"button"class"btnbtnprimary"id"savebannerbtn"保存</button在static/cms/js/下新建banners.js$(function(){$("
公孙晃 公孙晃
1年前
「最新」Snagit for mac v2024.0.1中文破解版 支持M1
是一款非常实用的屏幕截图和视频录制工具,适用于Mac用户。它具有强大的编辑功能,可以帮助您轻松地创建高质量的截图和视频,并且还支持录制屏幕上的操作。使用Snagit,您可以轻松地截取整个屏幕、窗口、选定的区域或滚动页面,并将其保存为图像或视频文件。此外,该
铁扇公主 铁扇公主
1年前
Mac平台优秀屏幕录屏软件:ScreenFlow 汉化介绍+安装教程
ScreenFlow是一款功能强大的屏幕录制和视频编辑软件,专为Mac用户设计。它可以帮助用户轻松录制Mac电脑屏幕、麦克风声音、摄像头视频等,并进行高质量的视频编辑和导出。ScreenFlow的核心功能包括屏幕录制和视频编辑。在屏幕录制方面,Screen
燕青 燕青
1年前
Macos 屏幕录像软件:ScreenFlow 「Mac」支持M1
是一款强大的屏幕录制和视频编辑软件,可以帮助用户轻松创建高质量的视频教程、演示和培训材料。以下是ScreenFlow的一些主要特点和功能:高清屏幕录制:ScreenFlow可以录制高清屏幕内容,包括计算机屏幕、摄像头、麦克风等。用户可以选择录制的区域和分辨
用JS实现简单的屏幕录像机 | 京东云技术团队
本文将介绍如何用JS实现简单的屏幕录像机。一、录制准备创建一个按钮Startrecording书写JavaScriptvarRECORDINGONGOINGfalse;varrecordingToggledocument.getElementById("r
京东云开发者 京东云开发者
9个月前
用JS实现简单的屏幕录像机
作者:京东保险张洁本文将介绍如何用JS实现简单的屏幕录像机。一、录制准备创建一个按钮Startrecording书写JavaScriptvarRECORDINGONGOINGfalse;varrecordingToggledocument.getEleme
铁扇公主 铁扇公主
2年前
Parallels Toolbox for mac Parallels Toolbox
ParallelsToolbox一款功能丰富的应用程序集合,可以帮助用户更轻松地完成各种任务,提高工作效率和生产力。该软件提供了超过30个工具,包括:屏幕录制器:可以轻松录制屏幕的视频和音频,并保存为常见的视频格式。文件压缩器:可以将文件和文件夹压缩成ZI
逻辑棱镜
逻辑棱镜
Lv1
看雪在手中融化,城市变白。
文章
8
粉丝
0
获赞
0