使用Electron录制的视频可以正常播放,但是时间不走。
渲染进程录屏代码:
{desktopCapturer} = require('@electron/remote');
var mediaStream;
var {desktopCapturer} = require('@electron/remote');
const { fileURLToPath } = require('url');
let btnStart=toArry($$('.btn-start'))[0];
var video=document.querySelector('video');
btnStart.addEventListener('click',async function(){
let txt='';
if(btnStart.innerHTML==txt){
btnStart.innerHTML='';
getNewTime()
//使用screen录制整个屏幕,window录制单个程序界面
var sources=await desktopCapturer.getSources({types:['window','screen']});
let sourcesName=getSourceName();
for(let i=0;ilength;i++){
if (sources[i].name===sourcesName) {
mediaStream=await navigator.mediaDevices.getUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: sources[i].id,
minWidth: 1920,
maxWidth: 1920,
minHeight: 1080,
maxHeight: 1080
}
}
})
}
}
video.srcObject=mediaStream
video.onloadedmetadata=function(e){
video.play();
}
createRecorder()
}else{
btnStart.innerHTML=txt;
stopRecord()
}
})
var newval;
function getNewTime(){
let time=0;
newval=setInterval(() => {
time+=1;
let houer=Math.floor(time/3600)
let secon=Math.floor((time-3600*houer)/60)
let mimu=time-3600*houer-60*secon
if(houer<10 && secon <10 && mimu<10){
toArry($$('#time-recoder'))[0].innerHTML='0'+houer+":0"+secon+":0"+mimu
}else if(houer<10 && secon <10 && mimu>10){
toArry($$('#time-recoder'))[0].innerHTML='0'+houer+":0"+secon+":"+mimu
}else if(houer<10 && secon >10 && mimu<10){
toArry($$('#time-recoder'))[0].innerHTML='0'+houer+":"+secon+":0"+mimu
}else if(houer<10 && secon >10 && mimu>10){
toArry($$('#time-recoder'))[0].innerHTML='0'+houer+":"+secon+":"+mimu
}
}, 1000);
}
let recoder=null;
function createRecorder(){
recoder=new MediaRecorder(mediaStream);
recoder.start();
recoder.ondataavailable=e=>{
let blob=new Blob([e.data],{type:'video/mp4'})
saveMedia(blob);
}
recoder.onerror=err=> console.error(err)
}
function stopRecord(){
recoder.stop();
clearInterval(newval);
alert('保存成功')
}
function saveMedia(blob){
let fs=require('fs')
let reader=new FileReader();
reader.onload=()=>{
let buffer=new Buffer(reader.result)
fs.writeFile(path+'/test.mp4',buffer,{encoding:'latin1'},(err,res)=>{
if (err) return console.error(err);
})
}
reader.onerror = err => console.error(err);
reader.readAsArrayBuffer(blob);
}
录制界面:
视频播放界面:
视频可以正常播放,但是进度条一直是停在0。
可能的原因:编码,解码。或者视频缺少配置。找遍网上资料,尚未获得确切解答。