Как создать видеофайл без потерь с помощью chrome.tabCapture.capture? - PullRequest
0 голосов
/ 21 февраля 2019

Описание проблемы:

chrome.tabCapture.capture создаст поток, я использую MediaRecorder для работы.Но MediaRecorder поддерживает только видео формат WebM.Формат видео Webm будет сжимать мое записанное видео

Если я записал вкладку, ничего не изменилось в течение 10 секунд (без движения мыши и звука), вся веб-страница остается неподвижной.Тогда конечный видеофайл webm будет иметь только один кадр, а не одну секунду.

Есть ли способ решить эту проблему?Потому что я не хочу сжатое видео

Код ядра:

let mediaRecorder = '';

chrome.tabCapture.capture(captureConfig, stream => {
  if (stream === null) {
    chrome.tabs.sendMessage(id, {
      error: chrome.runtime.lastError
    });
    return false;
  }

  const recordedBlobs: BlobPart[] = [];
  mediaRecorder = new MediaRecorder(stream, {
    videoBitsPerSecond: 2500000,
    mimeType: 'video/webm;codecs=vp9'
  });

  mediaRecorder.ondataavailable = event => {
    if (event.data && event.data.size > 0) {
      recordedBlobs.push(event.data);
    }
  };

  mediaRecorder.onstop = () => {
    const superBuffer = new Blob(recordedBlobs, {
      type: 'video/webm'
    });

    const link = document.createElement('a');
    link.href = URL.createObjectURL(superBuffer);
    link.setAttribute('download', `${filename}.webm`);
    link.click();
  };

  mediaRecorder.start();
});

const stop = () => {
  mediaRecorder.stop();
  mediaRecorder.stream.getTracks().forEach(track => {
    track.stop();
  });
}

Я использую хром, его можно заменить хромом, если он может решить эту проблемупроблема.Я также попробовал ffmpeg, но все еще не могу, эти потерянные кадры не могут быть восстановлены.

1 Ответ

0 голосов
/ 09 июня 2019

У меня была похожая проблема, добавление videoConstraints помогло.Если это решение не будет работать для вас, пожалуйста, просто дайте мне знать, я постараюсь выяснить это.

PS startStream - это функция обратного вызова.

chrome.tabCapture.capture({
            audio: false,
            video: true,
            videoConstraints: {
                mandatory: {
                    chromeMediaSource: 'tab',
                    minWidth: 640,
                    maxWidth: 640,
                    minHeight: 420,
                    maxHeight: 420
                }
            }
        }, startStream )
...