前段時間作一個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/…