前端使用html5、ffmpeg实现录屏摄像等功能

2018-11-12  本文已影响0人  没事儿啊

转自博客原文连接:https://tong-h.github.io/2018/11/06/streamcapture/

前段时间做一个windows的桌面应用,vue + electron,涉及到录屏和摄像功能,网上相关的文档蛮少的给需要的人一些参考

如果文章描写有误或者还有更好的方法,请留言告诉我,笔芯 (´▽`ʃ♡ƪ)

背景介绍

** 涉及技术:vue、electron、ffmpeg、node **

关于录屏和摄像对比了两种方法

HTML5实现

mediaDevices

  navigator.mediaDevices.enumerateDevices().then(devicelist => {
    // audiooutput 扬声器
    // audioinput  麦克风
    // audiooutput 摄像
    console.log(devicelist)
  }).catch(err => console.log(err))

getUserMedia

navigator.mediaDevices.getUserMedia(MediaStreamConstraints).then(stream => {
    videoElement.srcObject = stream; // 
  }, error => console.log(error));

getDisplayMedia

    而Electron基于node + chromium构建,在electron需要引入desktopCapturer模块,并在基于该模块使用这个方法

navigator.mediaDevices.getDisplayMedia({ video: true })
  .then(stream => {
    videoElement.srcObject = stream;
  }, error => console.log(error));

MediaRecorder

let herf
this.recorder = new MediaRecorder(stream);
this.recorder.ondataavailable = e => { 
  herf = e.data;
  download.href = URL.createObjectURL(herf);
};
this.recorder.start();

第二种使用ffmpeg

官网安装包下载 https://ffmpeg.zeranoe.com/builds/

一些基本参数

录屏相关命令

列出可用的设备包括音频和摄像等等
ffmpeg -list_devices true -f dshow -i dummy

录屏,你也可以加入关于视频的一些基本参数来获得你想要的文件
ffmpeg -f gdigrab -i desktop captrue.mkv -y

node调用

cd进入bin文件夹后执行录屏相关命令

关于停止录制,虽然ffmpeg按 Q 可以停止录制,但是我们通过代码调用是看不到cmd命令行的而且他在录制过程中是一直占用这个进程什么命令也无法输入
所以这个地方我只想到一个办法就是强制停止该进程

参考文章

MDN https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices/getUserMedia
https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder
https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices/enumerateDevices

W3C https://w3c.github.io/mediacapture-screen-share/

上一篇下一篇

猜你喜欢

热点阅读