Задать вопрос
Nikkorfed
@Nikkorfed
Full-Stack JavaScript Developer

Как отправить по сети Media Stream и сохранить в файл на сервере?

Записываю в браузере видео в поток с помощью классов MediaStream и MediaRecorder, после чего через WebSockets отправляю на Node.js сервер. Код выглядит примерно так:

const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: { facingMode: "user" } });
const socket = new WebSocket("ws://127.0.0.1:3000/ws");

mediaRecorder = new MediaRecorder(stream, { mimeType: "video/mp4" });
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(500);

function handleDataAvailable(event) {
  if (event.data.size > 0) socket.send(event.data);
}

setTimeout(() => mediaRecorder.stop(), 5000);

На сервер приходят сообщения с объектами вида <Buffer 00 00 01 ...>. Вопрос в том, как объединить все эти данные и сохранить в единый видеофайл в формате .mp4?

Пытаюсь понять как это сделать, но явно что-то упускаю. Пробовал через fs.writeFile(), но через него не получается объединить и сохранить все буфферы. Также пробовал через fs.createWriteStream(), но итоговый файл не открывается.
  • Вопрос задан
  • 762 просмотра
Подписаться 5 Простой Комментировать
Решения вопроса 1
Nikkorfed
@Nikkorfed Автор вопроса
Full-Stack JavaScript Developer
Всё оказалось не сложно, получилось через fs.createWriteStream(). Сначала на сервере нужно создать стрим для записи, а при каждом получении сообщения по сокету нужно записывать данные в этот стрим:

const express = require("express");
const fs = require("fs");
const app = express();

require("express-ws")(app);

app.ws("/ws", (ws, req) => {
  ws.on("message", (msg) => {
    const stream = fs.createWriteStream(`video.mp4`);
    stream.write(msg);
  });
});

app.listen(3000);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы