MediaRecorder 没有 requestData 方法,W3C 规范仅支持 start()、dataavailable 事件和 stop();可通过 timeslice 参数实现定时分片,底层帧处理需用 Canvas.captureStream 或 AudioWorklet 等替代方案。

MediaRecorder 没有 requestData 方法,这是常见误解。HTML5 标准中 MediaRecorder API 并未定义该方法,也不存在“手动提取录制缓冲区”的公开接口。
为什么找不到 requestData 方法
早期部分浏览器(如旧版 Chrome 实验性实现)曾短暂暴露过类似 requestData() 的非标准方法,但已被移除。当前 W3C 规范(MediaStream Recording API)只支持以下核心流程:
- 调用
start()开始录制 - 监听
dataavailable事件获取 Blob 片段 - 调用
stop()结束录制并触发最后一次dataavailable - 无法主动读取或清空内部缓冲区
替代方案:按需获取录制数据
若需“手动控制数据产出时机”,可借助 timeslice 参数实现近似效果:
- 创建时传入
{ timeslice: ms },例如new MediaRecorder(stream, { timeslice: 1000 }) - 每过 1 秒自动触发一次
dataavailable,获得对应时长的 Blob - 在事件回调中调用
URL.createObjectURL(blob)或直接处理二进制数据 - 注意:实际分片时长受编码器、系统负载影响,可能略有偏差
更精细控制:结合 Worker + WebAssembly(进阶)
若必须实时访问原始音频/视频帧(如做滤镜、分析),MediaRecorder 不适用。应改用:
立即学习“前端免费学习笔记(深入)”;
-
Canvas.captureStream()+requestVideoFrameCallback(视频帧) -
AudioContext+ScriptProcessorNode(已废弃)或AudioWorklet(音频采样) - 将帧/样本送入 Worker 处理,再通过
MediaRecorder录制加工后流
不复杂但容易忽略:标准 MediaRecorder 是黑盒编码器,设计目标是简单可靠录制,而非低层缓冲区交互。需要底层控制时,就得绕过它,用更基础的 API 组合实现。



















