Я использую captureStream для записи с холста HTML , и в настоящее время используйте пример кода в https://developer.mozilla.org/en-US/docs/Web/API/MediaStream_Recording_API. Однако это работает только для коротких записей, поскольку каждый большой двоичный объект хранится в памяти.
Я хотел бы иметь возможность записывать в течение длительного периода времени, например. >1 час и позволить пользователю загрузить полученный файл .webm/.mkv. Если это звучит необычно, то это потому, что я использую веб-браузер для научного приложения (с открытым исходным кодом) и мне нужно знать, что отображалось во время эксперимента :).
Достаточно просто адаптировать код MDN для хранения каждого большого двоичного объекта в IndexedDB вместо массива в памяти, но я застрял на том, как сконструировать загрузку, не создавая огромный большой двоичный объект, который исчерпал бы память:
var blob = new Blob([IDBchunk1, IDBchunk2, ...], {
type: "video/webm"
});
Другой подход — создать «потоковую» загрузку, но не уверен, что это возможно.
Одним из работоспособных, но ужасно неэффективных решений является использование WebRTC для отправки потока обратно на сервер nodejs, добавление каждого большого двоичного объекта к видеофайлу на диске на сервере, а затем загрузка видео через http. Мне не нравится это решение, так как оно связано со сложностью настройки webRTC + требует большой пропускной способности туда и обратно.
Дайте мне знать, если у вас есть какие-либо мысли о том, как сделать это только на стороне клиента?