Показать веб-камеру / камеру потока с задержкой - webrtc - PullRequest
1 голос
/ 19 апреля 2019

Я выполнил простую настройку, получая поток с веб-камеры / телефона и передавая его, рисуя на холсте html 2d.

Но у меня возникли проблемы с выяснением, как показать поток сзадержка в несколько секунд.Вроде как зеркало с задержкой.

Я попытался поиграть с ctx.globalAlpha = 0.005;, но это дает мне побочный эффект, а не «задерживает» поток.

Есть идеи, как этого достичь?

  • Фрагмент, приведенный ниже, здесь не работает, вероятно, из-за проблем безопасности, но вот ручка:

https://codepen.io/farisk/pen/LvmGGQ

  var width = 0, height = 0;
  
  var canvas = document.createElement('canvas'),
      ctx = canvas.getContext('2d');
  document.body.appendChild(canvas);
  
  var video = document.createElement('video'),
      track;
  video.setAttribute('autoplay',true);
  
  window.vid = video;
  
  function getWebcam(){ 
  
    navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) {
 

      var videoTracks = stream.getVideoTracks();
      var newStream = new MediaStream(stream.getVideoTracks());

      video.srcObject = newStream;
      video.play();
      track = stream.getTracks()[0];

    }, function(e) {
      console.error('Rejected!', e);
    });
  }
  
  getWebcam();
  
  var rotation = 0,
      loopFrame,
      centerX,
      centerY,
      twoPI = Math.PI * 2;
  
  function loop(){
    
    loopFrame = requestAnimationFrame(loop);
        
    // ctx.globalAlpha = 0.005;
    ctx.drawImage(video, 0, 0, width, height);
    ctx.restore();

  }
  
  function startLoop(){ 
    loopFrame = requestAnimationFrame(loop);
  }
  
  video.addEventListener('loadedmetadata',function(){
    width = canvas.width = video.videoWidth;
    height = canvas.height = video.videoHeight;
    centerX = width / 2;
    centerY = height / 2;
    startLoop();
  });
  
  canvas.addEventListener('click',function(){
    if ( track ) {
      if ( track.stop ) { track.stop(); }
      track = null;
    } else {
      getWebcam();
    }
  });
  
video,
canvas {
  max-width: 100%;
  height: auto;
}
  • Фрагмент, приведенный ниже, здесь не работает, вероятно, из-за проблем безопасности, но вот ручка:

https://codepen.io/farisk/pen/LvmGGQ

1 Ответ

0 голосов
/ 19 апреля 2019

Возможно, вы захотите сохранить видеоданные, которые вы получаете, в виде массива.Это может означать задержку воспроизведения на п секунд.

В основном в кадре 1 вы сохраняете видеопоток в массиве и ничего не рисуете.Это происходило до кадра 1000 (1 секунда).С этого момента начинайте рисовать, основываясь на первом элементе массива.

Как только вы нарисуете этот кадр, удалите его из массива и добавьте новый кадр.

...