如何在Jitsi Meet Flutter中录制并保存文件至Node.js服务器
Jitsi Meet 录制功能使用及Node.js服务器存储配置
一、基础录制功能使用
- 会议内开启/停止录制:
- 进入会议后,点击底部工具栏的摄像机图标(「录制」按钮)。
- 首次操作会弹出权限确认框,点击「允许」即可启动录制。
- 再次点击该按钮停止录制,系统会自动完成文件处理。
- 权限配置(可选):
默认仅主持人能发起录制,若要开放给所有参会者,需修改Jitsi服务器的配置文件(通常为/etc/jitsi/jicofo/sip-communicator.properties),将ENABLE_RECORDING和ALLOW_ALL_RECORDING参数设为true。
二、配置录制文件存储到Node.js服务器
Jitsi默认将录制文件存在本地服务器,要转存到Node.js服务器,需通过Jitsi的录制回调接口配合Node.js服务实现:
1. 配置Jitsi服务器的录制回调
在Jitsi的jicofo配置文件中添加以下内容:
org.jitsi.jicofo.recording.RECORDING_STATUS_URL=http://你的Node.js服务器地址/api/recording-status # 可选:添加基础认证信息 org.jitsi.jicofo.recording.RECORDING_STATUS_AUTH_USER=your-auth-user org.jitsi.jicofo.recording.RECORDING_STATUS_AUTH_PASS=your-auth-pass
该配置会让Jitsi在录制开始、结束时向你的Node.js服务器发送通知,包含文件路径、会议ID等关键信息。
2. 编写Node.js接收与转存接口
以Express框架为例:
const express = require('express'); const fs = require('fs'); const path = require('path'); const axios = require('axios'); const app = express(); app.use(express.json()); // 接收Jitsi录制状态回调 app.post('/api/recording-status', async (req, res) => { const { status, filePath, meetingId } = req.body; // 仅处理录制完成的通知 if (status === 'completed') { // 构造Jitsi服务器上的文件访问地址 const jitsiFileUrl = `http://你的Jitsi服务器IP/recordings/${path.basename(filePath)}`; // 流式下载文件 const fileStream = await axios.get(jitsiFileUrl, { responseType: 'stream' }); // 定义Node.js服务器上的存储路径 const saveDir = path.join(__dirname, 'recordings'); if (!fs.existsSync(saveDir)) fs.mkdirSync(saveDir); const savePath = path.join(saveDir, `${meetingId}-${Date.now()}.mp4`); // 流式写入文件 const writer = fs.createWriteStream(savePath); fileStream.data.pipe(writer); writer.on('finish', () => { console.log(`录制文件已保存:${savePath}`); // 可选:删除Jitsi服务器上的原文件 // axios.delete(jitsiFileUrl); }); } res.sendStatus(200); }); app.listen(3000, () => { console.log('录制文件转存服务已启动在端口3000'); });
3. 关键注意事项
- 确保Jitsi服务器能访问到你的Node.js服务器,开放对应端口的防火墙权限。
- 提前规划Node.js服务器的存储空间,录制文件通常为MP4/WebM格式,体积较大。
- 建议给回调接口添加身份验证逻辑,避免非法请求。
- 若Jitsi采用Docker部署,需调整容器内的录制文件存储路径,确保外部可访问。
内容的提问来源于stack exchange,提问作者alaa
相关产品推荐
相关产品推荐

