0

首先,我尝试使用 SFU 模型从浏览器到服务器建立 Webrtc 对等连接。

这是使 webrtc 对等连接从浏览器到服务器 (SFU) 的发布请求

app.post("/broadcast", async ({ body }, res) => {
  const peer = new webrtc.RTCPeerConnection({
    iceServers: [
      {
        urls: "stun:stun.stunprotocol.org",
      },
    ],
  });
  peer.ontrack = (e) => handleTrackEvent(e, peer); <-- Important
  const desc = new webrtc.RTCSessionDescription(body.sdp);
  await peer.setRemoteDescription(desc);
  const answer = await peer.createAnswer();
  await peer.setLocalDescription(answer);
  const payload = {
    sdp: peer.localDescription,
  };

  res.json(payload);
});

在handleTrackEvent 函数中,我得到了要开始记录并保存在服务器本地存储中的流。

function handleTrackEvent(e, peer) {
  console.log(e.streams);
  senderStream = e.streams[0];
  var recorder = new MediaStreamRecorder(e.streams);
  recorder.recorderType = MediaRecorderWrapper;
  recorder.mimeType = "video/webm";
  recorder.ondataavailable = (blob) => {
    console.log(blob);
  };
  recorder.start(5 * 1000); <-- Error generator
}

但是当尝试开始录制并以 5 秒的间隔获取 blob 时,它给了我“MediaRecorder Not Found”...

Passing following params over MediaRecorder API. { mimeType: 'video/webm' }
/Users/tecbackup/webrtc-peer/node_modules/msr/MediaStreamRecorder.js:672
            mediaRecorder = new MediaRecorder(mediaStream);
            ^

ReferenceError: MediaRecorder is not defined

我是 webrtc 的新手,我需要一些建议来将实时流从浏览器保存到服务器....将来,如果找到 blob,那么我会将 blob 按顺序保存在服务器中的 mp4 文件中。然后,在运行时,我开始在该 mp4 文件中按 ffmpeg 以获取 240p、360p、720p ts 文件用于 hls 流

4

0 回答 0