RecordRTC录制时获取文件大小及达到上限自动停止方法问询
实现录制过程中监控文件大小并自动停止
当然有办法实现这个需求!目前RecordRTC确实没有直接提供实时获取录制文件大小的API,但我们可以通过两种可靠的方式来监控文件大小,当达到你设定的上限时自动停止录制。下面是具体的方案和代码示例:
方法1:监听底层录制器的dataavailable事件(推荐)
如果你的RecordRTC实例基于浏览器原生的MediaRecorder(这是现代浏览器的主流实现),可以通过获取内部录制器实例,监听它的dataavailable事件来累加每次生成的Blob数据大小,从而实时监控总文件大小。
function successCallback(stream) { const options = { mimeType: 'audio/mp3', // 这里可以添加你的其他配置,比如比特率等 }; const recorder = RecordRTC(stream, options); recorder.startRecording(); // 设定允许的最大文件大小(示例为10MB,单位:字节) const MAX_FILE_SIZE = 10 * 1024 * 1024; let totalRecordedSize = 0; // 获取RecordRTC内部的原生MediaRecorder实例 const internalRecorder = recorder.getInternalRecorder(); if (internalRecorder instanceof MediaRecorder) { // 监听数据片段生成事件 internalRecorder.addEventListener('dataavailable', (event) => { if (event.data.size > 0) { totalRecordedSize += event.data.size; // 检查是否达到大小上限 if (totalRecordedSize >= MAX_FILE_SIZE) { recorder.stopRecording(() => { console.log('录制已因文件大小达到上限自动停止'); // 在这里处理录制完成的Blob文件 const finalBlob = recorder.getBlob(); }); } } }); } }
方法2:定时检查已录制Blob的大小
如果你的环境中RecordRTC没有使用原生MediaRecorder(比如一些旧版实现或特殊配置),可以通过定时调用getBlob()方法获取当前已录制的文件,检查其大小是否达到上限。这种方式会有轻微延迟,但兼容性更好。
function successCallback(stream) { const options = { mimeType: 'audio/mp3', // 你的其他配置项 }; const recorder = RecordRTC(stream, options); recorder.startRecording(); const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB上限 const sizeCheckInterval = setInterval(() => { const currentBlob = recorder.getBlob(); // 检查Blob存在且大小达标 if (currentBlob && currentBlob.size >= MAX_FILE_SIZE) { clearInterval(sizeCheckInterval); // 清理定时器 recorder.stopRecording(() => { console.log('录制已因文件大小达到上限自动停止'); const finalBlob = recorder.getBlob(); // 处理最终文件 }); } }, 1000); // 每秒检查一次,可根据需求调整间隔 }
关键注意事项
- 单位转换:记得
MAX_FILE_SIZE的单位是字节,比如1MB = 1024*1024字节,按需调整。 - 内存清理:如果使用了定时检查的方式,停止录制后一定要调用
clearInterval清理定时器,避免内存泄漏。 - 兼容性:
MediaRecorder在现代浏览器中支持良好,但如果需要兼容旧浏览器,优先使用定时检查的方式。
内容的提问来源于stack exchange,提问作者user3392555
相关产品推荐
相关产品推荐

