将 Node 中的 WebRTC MediaStream 视频保存到磁盘

SAG*_*imé 7 ffmpeg node.js webrtc

我正在构建一个应用程序,用户可以通过 WebRTC 连接到服务器(我在服务器端和客户端都使用简单对等库来设置对等连接)。一旦客户端和服务器连接起来,客户端应用程序就会将用户摄像头和微控制器流式传输到服务器。

现在,我想将流数据作为 MP4 视频文件保存到文件系统服务器端。

我听说ffmpegFluent-ffmpeg可以实现此目的,但我不知道如何使用它们。

  • 用于设置对等连接的服务器端代码
const Peer = require("simple-peer");
const wrtc = require("wrtc");

const peer = new Peer({ initiator: false, wrtc: wrtc, trickle: false });

peer.on("error", (err: any) => console.log("error", err));

  peer.on("signal", (data: any) => {
    if (data.type === "offer" || data.type === "answer")
      dispatchMessage(JSON.stringify(data));
    // if (data.renegotiate || data.transceiverRequest) return;
  });

  peer.on("connect", () => {
    console.log("CONNECTED");
    peer.send(JSON.stringify("HELLO DEER PEER FROM SERVER"));
  });

  peer.on("data", (data: any) => {
    console.log("data: ", data);
  });

  peer.on("stream", (stream: MediaStream) => {
    console.log("-------Stream received", stream);
  });

  peer.on("track", (track: MediaStreamTrack) => {
    console.log("-------trackEvent:", track);
  });
Run Code Online (Sandbox Code Playgroud)
  • 客户端代码
const stream = await window.navigator.mediaDevices.getUserMedia({
    video: { width: { ideal: 4096 }, height: { ideal: 2160 }},
    audio: true,
});

const p = new SimplePeer({
    initiator: isInitiator,  
    trickle: false  
});

stream.getTracks().forEach(track => p.addTrack(
    track,  
    stream  
));

// Here I set up the listeners for the peer connection
Run Code Online (Sandbox Code Playgroud)