Я использую API MediaRecorder вместе с методом Canvas captureStream для кодирования видеопотока VP8 холста в браузере. Эти данные отправляются в FFmpeg через двоичный веб-сокет.MediaRecorder изменяет размер без провокации
var outputCaptureStream = $('canvas')[0].captureStream(30);
var mediaRecoder = new MediaRecoder(outputCaptureStream, {
mimeType: 'video/webm'
});
mediaRecorder.ondataavailable = function (e) {
ffmpegStdin.write(e.data);
}
mediaRecoder.start(1000);
По какой-то причине поток, по-видимому, случайно переключается на средний поток с более низким разрешением. FFmpeg не устраивает по этому поводу:
Входной поток # 0: 0 кадр изменен с размером: 1280x720 FMT: yuv420p по размеру: 1024x576 FMT: yuv420p
[vp8 @ 0x2a02c00] Upscaling не реализован. Обновите версию FFmpeg до последней из Git. Если проблема все еще возникает, это означает, что в вашем файле есть функция, которая не была реализована. [vp8 @ 0x2a02c00] Если вы хотите помочь, загрузите образец этого файла в ftp://upload.ffmpeg.org/incoming/ и обратитесь в список рассылки ffmpeg-devel. ([email protected])
Я подозреваю, что это имеет какое-то отношение к чрезмерному использованию ЦП и что Firefox пытается помочь, уменьшив видео. Мои вопросы:
- Включает ли Firefox масштабирование видео на лету?
- Если да, то какие условия вызывают это? (Загрузка процессора? Сброс противодавления?)
- Возможно ли предотвратить использование Firefox?
- Есть ли другое объяснение поведению, которое мне не хватает?
Размер холста фиксированный? вы передаете поток камеры в холст? – mido
@mido Размер холста полностью фиксирован. Я рисую рамки на requestAnimationFrame, ограниченный 30FPS через «более совершенный подход» здесь: http://codetheory.in/controlling-the-frame-rate-with-requestanimationframe/ – Brad
вы можете поделиться кодом, я мог бы дать это попытка и посмотреть, могу ли я обнаружить проблему. – mido