控制台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
相关产品推荐
相关产品推荐

