I'm building an app where the user can connect to the server through a WebRTC (I'm using simple-peer library both server-side and client-side to set the peer-to-peer connection). Once the client and the server are connected, the client app stream the user camera and micro to the server.
Now, I want to save the streamed data to the filesystem server-side as an MP4 video file.
I hear about ffmpeg and fluent-ffmpeg to achieve this but i don't know how to use them.
- Server side code to set up the peer connection
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);
});
- Client-side code
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