前段时间作一个windows的桌面应用,vue + electron,涉及到录屏和摄像功能,网上相关的文档蛮少的给须要的人一些参考vue
若是文章描写有误或者还有更好的方法,请留言告诉我,笔芯 (´▽`ʃ♡ƪ)node
** 涉及技术:vue、electron、ffmpeg、node **linux
关于录屏和摄像对比了两种方法git
使用HTML5的api实现github
摄像:mediaDevices(获取设备)+ getUserMedia(获取流) + MediaRecorder(存储)chrome
录屏:getDisplayMedia(获取流) + MediaRecorder(存储)windows
ffmpeg + node:FFmpeg是一套很是强大的音视频处理的开源工具,很少介绍,而Electron基于node和chromium,它容许使用node的API以及几乎全部的node模块,这意味这着咱们能够调用cmd命令来操做ffmpeg实现录屏和摄像录制,固然ffmpeg功能毫不止这点api
用于收集系统上可用的多媒体输入和输出设备的信息promise
该方法调用成功返回设备列表,并传入带有devceID的MediaStreamConstraints对象能够指定设备获取流媒体来源浏览器
navigator.mediaDevices.enumerateDevices().then(devicelist => {
// audiooutput 扬声器
// audioinput 麦克风
// audiooutput 摄像
console.log(devicelist)
}).catch(err => console.log(err))
复制代码
用户提供访问硬件设备媒体(摄像头、视频、音频、地理位置等)的接口,基于该接口,开发者能够在不依赖任何浏览器插件的条件下访问硬件媒体设备。
该方法返回视频流,将获取到的流赋给video标签可实现边录边看
navigator.mediaDevices.getUserMedia(MediaStreamConstraints).then(stream => {
videoElement.srcObject = stream; //
}, error => console.log(error));
复制代码
将用户的显示或其部分用做媒体流的来源,它容许以视频流的形式获取用户的显示器或其一部分
录屏主要依靠该方法,和getUserMedia同样返回一个promise对象,调用成功返回流,将这个流赋给video 元素实现边录边看
** 须要注意的是** 若是你作的是网页端在谷歌上使用这个元素,须要在chrome://flags/开启Experimental Web Platform features功能
而Electron基于node + chromium构建,在electron须要引入desktopCapturer模块,并在基于该模块使用这个方法
navigator.mediaDevices.getDisplayMedia({ video: true })
.then(stream => {
videoElement.srcObject = stream;
}, error => console.log(error));
复制代码
记录和捕获媒体,也就是视频和音频
getDisplayMedia 和 getUserMedia 获取到的流都须要使用MediaRecorder存储起来,而且能够保存成文件
let herf
this.recorder = new MediaRecorder(stream);
this.recorder.ondataavailable = e => {
herf = e.data;
download.href = URL.createObjectURL(herf);
};
this.recorder.start();
复制代码
官网安装包下载 ffmpeg.zeranoe.com/builds/
一些基本参数
列出可用的设备包括音频和摄像等等
ffmpeg -list_devices true -f dshow -i dummy
录屏,你也能够加入关于视频的一些基本参数来得到你想要的文件
ffmpeg -f gdigrab -i desktop captrue.mkv -y
复制代码
cd进入bin文件夹后执行录屏相关命令
关于中止录制,虽然ffmpeg按 Q 能够中止录制,可是咱们经过代码调用是看不到cmd命令行的并且他在录制过程当中是一直占用这个进程什么命令也没法输入 因此这个地方我只想到一个办法就是强制中止该进程
参考文章
MDN developer.mozilla.org/zh-CN/docs/… developer.mozilla.org/en-US/docs/… developer.mozilla.org/zh-CN/docs/…