首先,我尝试使用 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 流