用JS实现简单的屏幕录像机

作者:京东保险 张洁

本文将介绍如何用JS实现简单的屏幕录像机。

一、录制准备

创建一个按钮

<button id="recording-toggle">Start recording</button>

书写JavaScript

1var RECORDING_ONGOING = false; 2var recordingToggle = document.getElementById("recording-toggle"); // 按钮 3 4recordingToggle.addEventListener("click", function(){ 5 RECORDING_ONGOING = !RECORDING_ONGOING; // 开始 / 停止 录制 6 if(RECORDING_ONGOING){ 7 recordingToggle.innerHTML = "Stop Recording"; 8 startRecording(); // 开始录制 9 } else { 10 recordingToggle.innerHTML = "Start Recording"; 11 stopRecording(); // 停止录制 12 } 13});

看起来内容很多,但实际上,只是向按钮添加一个事件侦听器来开始和停止记录并相应地更改文本。

二、开始录制

在写功能函数之前,声明 3 个全局变量(在函数之外)。

1var blob, mediaRecorder = null; 2var chunks = [];

现在,开始屏幕录制

1async function startRecording(){ 2 var stream = await navigator.mediaDevices.getDisplayMedia( 3 {video: {mediaSource: "screen"}, audio: true} 4 ); 5 6 deviceRecorder = new deviceRecorder(stream, {mimeType: "video/webm"}); 7}

在用户屏幕之外创建媒体流。媒体记录器有一个mimeType. 这是你想要的输出文件类型。

可以mimeTypes 在此处阅读更多相关信息。

Edge 支持video/webmmime 类型。这是文件扩展名.webm。可以通过以下方式检查浏览器是否支持mimeType:

1console.log(MediaRecorder.isTypeSupported("video/webm")) 2console.log(MediaRecorder.isTypeSupported("video/mp4")) 3console.log(MediaRecorder.isTypeSupported("video/mp4;codecs=avc1"))

向该函数添加几行startRecording

1 deviceRecorder.ondataavailable = (e) => { 2 if(e.data.size > 0){ 3 chunks.push(e.data); 4 } 5 } 6 deviceRecorder.onstop = () => { 7 chunks = []; 8 } 9 deviceRecorder.start(250)

每当有数据时,都会将其添加到块数组(之前定义)中。当停止录制时,将调用该stopRecording() 函数。

三、停止录制
1function stopRecording(){ 2 var filename = window.prompt("File name", "video"); // Ask the file name 3 4 deviceRecorder.stop(); // 停止录制 5 blob = new Blob(chunks, {type: "video/webm"}) 6 chunks = [] // 重置数据块 7 var dataDownloadUrl = URL.createObjectURL(blob); 8 9 // 将其下载到用户的设备上 10 let a = document.createElement('a') 11 a.href = dataDownloadUrl; 12 a.download = `${filename}.webm` 13 a.click() 14 15 URL.revokeObjectURL(dataDownloadUrl) 16}

用JS做录屏就是这么简单。如果你想要 mp4 或其他格式,则必须使用 API 进行转换或自己进行转换。



9d20192035774469bfcf06b5d3425df6~tplv-73owjymdk6-jj-mark-v1_0_0_0_0_5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5Lqs5Lic5LqR5byA5Y-R6ICF_q75  浏览器会通知是否正在共享屏幕

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

Android webview 与 js(Vue) 交互

js与原生交互分为两种情况:js调用原生方法,原生调用js方法。本文将对这两种情况分别讲解,H5端用vue实现。一、前期准备(Vue项目准备)本文的H5端用Vue实现,所以在正式开始前先把Vue项目环境准备好。项目写好后,执行npmrunserve命令启动项目,启动成功后会在命令

Three.js

随着人们对用户体验越来越重视,Web开发已经不满足于2D效果的实现,而把目标放到了更加炫酷的3D效果上。Three.js是用于实现web端3D效果的JS库,它的出现让3D应用开发更简单,本文将通过Three.js的介绍及示例带我们走进3D的奇妙世界。一、Three.js相关概念1.1Three.JSThree.JS是基于

MySQL数据库InnoDB存储引擎Log漫游(1)

作者:宋利兵来源:MySQL代码研究(mysqlcode)0、导读本文介绍了InnoDB引擎如何利用UndoLog和RedoLog来保证事务的原子性、持久性原理,以及InnoDB引擎实现UndoLog和RedoLog的基本思路。00–UndoLogUndoLog是为了实现事务的原子性,

00:Java简单了解

浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。

Macos 屏幕录像软件:ScreenFlow 「Mac」支持M1

是一款强大的屏幕录制和视频编辑软件,可以帮助用户轻松创建高质量的视频教程、演示和培训材料。以下是ScreenFlow的一些主要特点和功能:高清屏幕录制:ScreenFlow可以录制高清屏幕内容,包括计算机屏幕、摄像头、麦克风等。用户可以选择录制的区域和分辨