Electron录制的视频踩坑

使用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);
}

录制界面:

img

视频播放界面:

img

视频可以正常播放,但是进度条一直是停在0。
可能的原因:编码,解码。或者视频缺少配置。找遍网上资料,尚未获得确切解答。

看下这篇博客,也许你就懂了,链接:Electron踩的那些坑