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

这篇具有很好参考价值的文章主要介绍了用JS实现简单的屏幕录像机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、录制准备

创建一个按钮

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

书写JavaScript

var RECORDING_ONGOING = false;
var recordingToggle = document.getElementById("recording-toggle"); // 按钮

recordingToggle.addEventListener("click", function(){
     RECORDING_ONGOING = !RECORDING_ONGOING; // 开始 / 停止 录制
     if(RECORDING_ONGOING){
         recordingToggle.innerHTML = "Stop Recording";
         startRecording(); // 开始录制
     } else {
         recordingToggle.innerHTML = "Start Recording";
         stopRecording(); // 停止录制
 }
});

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

二、开始录制

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

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

现在,开始屏幕录制

async function startRecording(){
     var stream = await navigator.mediaDevices.getDisplayMedia(
         {video: {mediaSource: "screen"}, audio: true}
     );

     deviceRecorder = new deviceRecorder(stream, {mimeType: "video/webm"});
}

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

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

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

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

向该函数添加几行startRecording

 deviceRecorder.ondataavailable = (e) => {
     if(e.data.size > 0){
         chunks.push(e.data);
     }
 }
 deviceRecorder.onstop = () => {
     chunks = [];
 }
 deviceRecorder.start(250)

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

三、停止录制

function stopRecording(){
     var filename = window.prompt("File name", "video"); // Ask the file name

     deviceRecorder.stop(); // 停止录制
     blob = new Blob(chunks, {type: "video/webm"})
     chunks = [] // 重置数据块
     var dataDownloadUrl = URL.createObjectURL(blob);

     // 将其下载到用户的设备上
     let a = document.createElement('a')
     a.href = dataDownloadUrl;
     a.download = `${filename}.webm`
     a.click()
 
     URL.revokeObjectURL(dataDownloadUrl)
}

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

浏览器会通知是否正在共享屏幕

作者:京东保险 张洁

来源:京东云开发者社区 转载请注明来源文章来源地址https://www.toymoban.com/news/detail-760456.html

到了这里,关于用JS实现简单的屏幕录像机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 海康硬盘录像机接入RTSP/onvif协议安防视频平台EasyNVR的注意事项

    EasyNVR安防视频云服务平台可支持设备通过RTSP/Onvif协议接入平台,能提供视频监控直播、录像、云存储、检索与回看、国标级联等视频能力,可支持分发RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等格式的视频流。 有用户咨询,将海康硬盘录像机接入EasyNVR平台后显示离线,不知道什

    2024年02月05日
    浏览(82)
  • 海康、大华、tplink监控摄像头和硬盘录像机接入GB28181平台配置细节

    海康、大华、tplink等各种型号监控摄像头或硬盘录像机(NVR/HVR)接入GB28181平台,配置过程都非常简单明了,但有些细节需要注意,避免走弯路踩泥坑。 首先要说明一点的是,只要监控设备和GB28181平台的网络是连通的,都可以顺畅的接入,不需要为监控设备配置外网地址,更不

    2024年02月07日
    浏览(69)
  • EasyNTS穿透内网后,海康硬盘录像机拉取不到RTSP流是什么原因?

    EasyNTS上云网关具备内网穿透、组网运维、多协议视频流拉转推、设备/业务上云等功能,它可以解决异地视频共享/组网/上云的需求。其中,EasyNTS上云网关硬件(EasyNTD)可以放置在项目现场,它也同样具备EasyNTS软件平台的功能。 有用户反馈,在项目现场利用EasyNTD配合EasyNT

    2024年02月11日
    浏览(104)
  • 254、跟你一起学习两招:一台录像机如何添加两个不同网段的摄像头

    录像主机怎样添加不同网段ip的摄像头?这个在实际项目有可能会遇到,也有不少的朋友在问起,之前发布的内容中我们有一个大概的介绍,本期我们来详细总结下具体如何实现录像机添加不同网段ip的摄像头?常用的有两种方法。 方法一、使用双网口录像机添加不同网段的

    2024年02月09日
    浏览(86)
  • vue中web端播放rtsp视频流(摄像头监控视频)(海康威视录像机)

    ffmpeg下载 https://ffmpeg.org/download.html 找ffmpeg-release-essentials.zip点击下载,下载完解压 ffmpeg.exe 程序运行 添加成功后验证是否生效任意地方打开cmd窗口输入 ffmpeg 打印如下表示成功 新建一个app.js文件,同级目录下npm安装 node-rtsp-stream 我是直接写在项目里了,你们可以单独写在外

    2024年04月25日
    浏览(55)
  • vue对接海康摄像头,使用hk3.3(硬盘录像机)开发摄像头分屏翻页操作。

    默认展示4*4规格,分屏之后自己写翻页方法,对摄像头一一展示(1x1, 2x2, 3x3, 4x4),有俩个场景。 1、刚开始默认展示的时候进行分页。 2、点击分屏操作之后进行分页。 思路: 1、拿到所有的通道号,比如有[1, 2, 3…, 100]; 2、 点击分屏之后就会把这个数组变为 1*1[[1], [

    2024年02月13日
    浏览(72)
  • Unity实现摄像机向屏幕中间发射射线射击物体

    外部找个PNG透明图,拖到Unity文件夹,右上角改成精灵sprite2d 2.添加到UI画布   3.写脚本 首先,我们需要引入一些 \\\"工具\\\",就像我们在玩游戏时要先下载游戏客户端一样。这里的 \\\"工具\\\" 就是一些命名空间,让我们可以方便地使用 System 和 UnityEngine 类。 🔧 接下来,我们创建了

    2024年02月08日
    浏览(43)
  • Android4.4实现简单的录像功能

    一、前言 在Android中实现录像功能,高版本Android和低版本Android的API使用方式不同。本文以Android4.4系统为基础,简单的列举一下实现过程。 二、步骤 要在 Android 4.4 中实现录像功能,可按照以下步骤进行操作: 在布局文件中添加一个 SurfaceView 控件,作为预览画面的容器。 获

    2024年02月10日
    浏览(40)
  • unity实现简单的摄像机震动效果(包括普通摄像机和虚拟摄像机)

    用代码实现摄像机简单的震动效果

    2024年02月12日
    浏览(44)
  • 「更新」Macos屏幕录像工具:ScreenFlow

    mac电脑屏幕截图工具哪个好?ScreenFlow是Mac上的一款优秀的屏幕录像软件,它不仅具有屏幕录制功能,还具有视频编辑功能。以下是对ScreenFlow的一些详细介绍: 首先,ScreenFlow可以捕获摄像机、麦克风和计算机音频,同时支持同时捕获多个屏幕或特定区域。在录制过程中,Sc

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包