Я пытаюсь записать видео с холста, даже когда пользователь переходит с вкладки (либо щелкнув другую вкладку, либо свернув окно). Я использую таймер, который запускается даже тогда, когда у пользователя размыта вкладка для рендеринга холста (я знаю, что этот таймер срабатывает, когда вкладка размыта, потому что я тестировал его). Но когда я присоединяю MediaStream
из canvas.captureStream()
к объекту MediaRecorder
, BlobEvent
из обратного вызова ondataavailable
имеет длину 0.
Ниже приведен пример того, что я пытаюсь сделать.
let canvas = document.getElementById('canvas');
// ...Assume that I'm rendering some kind of video/animation to the canvas here...
let stream = canvas.captureStream();
let mediaRecorder = new MediaRecorder(stream, { mimeType: 'video/webm; codecs="opus,vp8"' });
mediaRecorder.start();
mediaRecorder.ondataavailable = (event) => {
// This event's data is length 0 when the tab is blurred
console.log(event);
}
Я понимаю, что ondataavailable
обычно не срабатывает, когда вкладка находится в фоновом режиме, я получил это с помощью функции requestData
на MediaRecorder
, предположим, что это так.
requestAnimationFrame
и рендеринга. Я пытаюсь записать медиапоток сcaptureCanvas
. - person Jacob Greenway   schedule 30.06.2019getImageData
, разве это не специально для рендеринга части холста в другую часть? Редактировать: если вы используете закадровый холст, вы можете использовать функциюtransferToImageBitmap
и получить полное растровое изображение с холста. - person Jacob Greenway   schedule 30.06.2019