You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

控制台Node.js P2P应用使用recordrtc时遇MediaStream构造函数错误

问题分析与解决

问题原因

RecordRTC是为浏览器环境开发的库,依赖浏览器原生的MediaStream接口,但Node.js控制台环境没有这个全局构造函数,所以调用RecordRTCPromisesHandler时会触发TypeError: MediaStream is not a constructor错误。另外,代码里的invokeSaveAsDialog也是浏览器专属API,Node.js环境同样不支持。

解决方案

1. 替换为Node.js兼容的流录制库

放弃RecordRTC,改用适合Node.js环境的工具,比如fluent-ffmpeg,直接处理流并生成MP4文件,示例代码:

const ffmpeg = require('fluent-ffmpeg');
const fs = require('fs');

// 假设你的stream是Node.js可读流
const outputFile = 'output.mp4';

ffmpeg(stream)
  .format('mp4')
  .on('error', (err) => {
    console.error('录制出错:', err);
  })
  .on('end', () => {
    console.log(`录制完成,文件已保存为${outputFile}`);
  })
  .save(outputFile);

2. 若坚持使用RecordRTC(不推荐)

先安装第三方包模拟浏览器的MediaStream:

npm install mediastream

然后在代码顶部添加全局模拟:

global.MediaStream = require('mediastream');
// 同时模拟Blob和文件保存
global.Blob = require('blob');
const fs = require('fs');
function invokeSaveAsDialog(blob) {
  blob.arrayBuffer().then(buffer => {
    fs.writeFileSync('output.mp4', Buffer.from(buffer));
  });
}

但这种方法会面临更多浏览器API缺失的问题,后续可能出现其他报错,仅作为临时方案。

内容的提问来源于stack exchange,提问作者Qadeer amin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:15:44