Сбой веб-API MediaRecorder при потоковой передаче потока со скоростью 60 кадров в секунду

#javascript #google-chrome-app #getusermedia #web-mediarecorder

#javascript #google-chrome-приложение #getusermedia #web-mediarecorder

Вопрос:

У меня есть следующий код для записи USB-потока с использованием MediaRecord API в приложении Chromebook Package.

 function startVideoRecord()
{
    mIsRecordingStarted = true;

    let options = {mimeType : 'video/webm;codecs=h264'} 

    //Check is h264 supported
    if(! MediaRecorder.isTypeSupported(options.mimeType))
    {
            console.log("h264 mimeType is not supported");
            return;
    }

    //create MediaRecorder Instance
    try
    {
            mMediaRecorder = new MediaRecorder(window.stream, options);
    }catch(error)
    {
            console.log(error);
            return;
    }

    mMediaRecorder.ondataavailable = handleDataAvailable;
    mMediaRecorder.start(10); // collect 10ms of data


    //empyt the temp buffer before start recording
    recordedData = [];

}

function handleDataAvailable(event) {
  if (event.data amp;amp; event.data.size > 0) {
    recordedData.push(event.data);
  }
}

function StopRecording() {
            mIsRecordingStarted = false;
            mMediaRecorder.stop();

            //Write the recorded data to file and save locally
            const blob = new Blob(recordedData, {type: 'video/webm'});
            const url = window.URL.createObjectURL(blob);
            const tempAnchor = document.createElement('a');
            tempAnchor.style.display = 'none';
            tempAnchor.href = url;
            tempAnchor.download = 'video.webm';
            document.body.appendChild(tempAnchor);
            tempAnchor.click();
            setTimeout(() => {
                    document.body.removeChild(tempAnchor);
                    window.URL.revokeObjectURL(url);
            }, 100);
 

}

Примечание: getUserMedia используется для запуска потока. Предварительный просмотр потока работает без каких-либо сбоев.

Когда я установил свои ограничения на запуск потока с разрешением 1920 x 1080 со скоростью 30 кадров в секунду, моя видеозапись заработала и была успешно сохранена в локальном режиме.

Но когда я попробовал использовать 1920 x 1080 при 60 кадрах в секунду, я получил, что фрагменты были помещены в recordedData, и веб-приложение принудительно закрылось.

Это попробовано в Chromebook под управлением версии Chrome OS: 73.0.36 (официальная сборка). Приложение развертывается как приложение пакета Chrome.

Может ли кто-нибудь помочь мне определить причину сбоя?

Комментарии:

1. Звучит как ошибка. См. crbug.com и сообщите об этом, если нет предыдущих отчетов.

2. @wOxxOm Спасибо за ваше предложение. Я задал запрос bugs.chromium.org/p/chromium/issues/detail?id=953626

3. Согласно моему недавнему эксперименту, когда codecs = h264 заменяется codecs = vp8, запись видео, похоже, работает хорошо без каких-либо сбоев.