Node.js 将MediaRecorder输出发送到express server的工作流和数据格式

Node.js 将MediaRecorder输出发送到express server的工作流和数据格式,node.js,express,ffmpeg,binary,Node.js,Express,Ffmpeg,Binary,我已经试着弄明白这一点有一段时间了,但是在不同的文件发送方式和不同的数据格式之间迷失了方向 我正在用MediaRecorder录制画布动画流。据我所知,这将返回一个二进制格式的视频blob。现在我想将此数据发送到我的express服务器,并将其转换为h264编码的mp4文件。我的第一个冲动是在服务器上使用ffmpeg。不幸的是,我正在为实现的细节而挣扎。我不确定如何最好地传输数据,以何种格式以及如何将数据馈送到ffmpeg 这就是我在客户端的内容: // Get stream from elem

我已经试着弄明白这一点有一段时间了,但是在不同的文件发送方式和不同的数据格式之间迷失了方向

我正在用MediaRecorder录制画布动画流。据我所知,这将返回一个二进制格式的视频blob。现在我想将此数据发送到我的express服务器,并将其转换为h264编码的mp4文件。我的第一个冲动是在服务器上使用ffmpeg。不幸的是,我正在为实现的细节而挣扎。我不确定如何最好地传输数据,以何种格式以及如何将数据馈送到ffmpeg

这就是我在客户端的内容:

// Get stream from element
stream = element.captureStream(30)

// Create media recorder with stream
const recorder = new MediaRecorder(stream)

// Save to file
recorder.ondataavailable = ({ data }) => {
                
    const formData = new FormData()
    formData.append("file", data)

    const options = {
        method: "POST",
        body: formData,
    }

    fetch("http://localhost:3001/api/blob_to_mp4", options).then(
        (res) => {
            console.log(res)
        }
    )
}
这就是我在服务器端所做的:

"use strict";

const express = require("express");
const cors = require("cors");
const ffmpeg = require("fluent-ffmpeg");
const fs = require("fs");

const port = process.env.PORT || 3001;
const app = express();
var command = ffmpeg();

app.use(cors());
app.use(express.urlencoded({ extended: true }));
app.use(express.json());

app.post("/api/blob_to_mp4", function (req, res) {
  var data = Buffer.from("");

  // Add data
  req.on("data", function (chunk) {
    data = Buffer.concat([data, chunk]);
  });

  // Full data available
  req.on("end", () => {
    req.rawBody = data;
  });

  res.send("hello world");
});

app.listen(port);
console.log(`Server running on port ${port}`);