Я пытался создать базовый c медиа-рекордер с MediaRecorder API , который довольно прост: получить поток из getDisplayMedia, а затем записать его.
Проблема: При этом записывается только максимальный размер экрана, но не более. Поэтому, если у меня экран 1280/720, он не будет записывать 1920/1080.
Это может показаться вполне очевидным, но я намереваюсь записать меньшее разрешение внутри большего. Например:
с красным прямоугольником, представляющим то, что записывает мой фактический экран, и окружающий черный прямоугольник - просто черное пространство, но у всего видео теперь более высокое разрешение, 1920/1080, что полезно для youtube, поскольку youtube уменьшает все, что имеет разрешение от 720 до 1080, что является проблемой.
В любом случае я попытался просто добавить поток из getDisplayMedia в видеоэлемент видео vid.srcObject = stream
, затем сделал новый холст с разрешением 1920/1080, и в анимации l oop просто сделал ctx.drawImage(vid, offsetX, offsetY)
, а за пределами l oop, где был сделан MediaRecorder, просто сделал newStream = myCanvas.captureStream()
как согласно документации API и передал ее в MediaRecorder; однако проблема в том, что из-за огромных накладных расходов на холсте все происходит очень медленно, а частота кадров абсолютно ужасна (не приводите пример видео, а просто протестируйте его самостоятельно).
Так что есть какой-то способ оптимизировать холст так, чтобы он не влиял на частоту кадров (попытался изучить OffscreenCanvas , но я не смог найти способ получить из него сам поток для использования с MediaRecorder, так что это не очень помогло), или Есть ли лучший способ для захвата и записи холста, или есть лучший способ для записи экрана в большем разрешении, с размером клиента JavaScript? Если не с размером клиента JavaScript, существует ли какой-нибудь видеокодер в реальном времени (ffmpeg слишком медленный), который можно запустить на сервере, и каждый кадр холста можно отправить на сервер и сохранить там? Есть ли лучший способ сделать видеорегистратор с любым типом JavaScript - клиент или сервер или оба?