NodeJS 流视频没有持续时间exif

ryevplcw  于 2023-02-08  发布在  Node.js
关注(0)|答案(1)|浏览(149)

我做了一个网站,以记录在我的服务器上实时摄像头。
要做到这一点,我使用Web Socket发送我的网络摄像头的数据到我的Node.js服务器.
记录工作正常,但我的视频没有持续时间。换句话说,我无法在视频中导航。我只能一秒一秒地读取文件,无法跳过片段或在计时器中返回。(见下面的GIF)

我的服务器代码来保存视频:

server.on("connection", (socket) => {
  console.log("Client connected");

  let writeStream = null;
  let id = Date.now();
  let filename = `${folderStream}/video-${id}.${extensionFile}`; // example : ./video/video-1620000000000.mp4

  socket.on("message", (message) => {
    if (!writeStream) {
      console.log("Stream started");
      writeStream = fs.createWriteStream(filename);
    }

    writeStream.write(message);
  });

  socket.on("close", () => {
    console.log("Stream closed");

    writeStream.end();
  });
});

我尝试使用ffmpeg,但我的视频已经在一个文件中,没有分段。(可能是我使用不当)

vxqlmq5t

vxqlmq5t1#

对于希望执行相同操作的未来用户,请执行以下操作:
创建获取所有原始数据的临时文件:

server.on("connection", (socket) => {
  console.log("Client connected");

  let tempFile = null;

  let id = Date.now();
  let filename = `video-${id}`; // exemple : video-1620000000000

  socket.on("message", (message) => {
    if (!tempFile) {
      console.log("Stream started");
      tempFile = fs.createWriteStream(`${folderStream}/${filename}.tmp`);
    }
    tempFile.write(message);
  });

并与库"fluent-ffmpeg";
x一个一个一个一个x一个一个二个x

您可以在结束流之后创建转码文件。

socket.on("close", () => {
    console.log("Fin d'un stream");

    tempFile.end();

    ffmpeg()
      .input(`${folderStream}/${filename}.tmp`)
      .format(extensionFile) // const extensionFile = "mp4"
      .output(`${folderTranscode}/${filename}.${extensionFile}`)
      .on("end", () => {
        console.log("Conversion complete");
      })
      .run();
  });
});

相关问题