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

Chrome环境下视频静音时MediaRecorder录制输出0字节问题求助

问题根因

你遇到的是Chrome浏览器MediaRecorder的典型行为:当你指定的录制MIME类型同时包含音视频编码,但捕获的流中音频轨道长期处于无有效音频输出的静音状态时,MediaRecorder会判定没有可编码的有效数据,最终输出的切片大小为0。


解决方案

根据你的需求可选择以下两种方案:

方案1:无需录制音频时直接调整MIME类型

如果录制不需要包含音频,直接修改MediaRecorder的MIME类型,仅指定视频编码即可,不需要声明音频编码,改动最小:

function startRecording() {
  var stream = document.getElementById('videoPlayer').captureStream();
  // 仅声明视频编码,去掉音频相关声明
  recorder = new MediaRecorder(stream, {mimeType : 'video/webm; codecs=avc1'});
  recorder.ondataavailable = e => {
    console.log(e.data.size);
    chunks.push(e.data);
  };
  recorder.start();
}

该方案无需修改其他逻辑,视频元素依然可以保持muted状态满足自动播放要求。

方案2:需要保留音频轨道时补充静音音频输入

如果录制需求必须包含音频轨道(哪怕是静音的),可以手动给捕获的流补充一路持续输出的静音音频轨,保证MediaRecorder能拿到稳定的音频输入:

function startRecording() {
  var videoStream = document.getElementById('videoPlayer').captureStream();
  // 创建静音音频轨道
  const audioCtx = new AudioContext();
  const dest = audioCtx.createMediaStreamDestination();
  const osc = audioCtx.createOscillator();
  osc.connect(dest);
  osc.start();
  // 合并视频流和静音音频流
  const combinedStream = new MediaStream([
    ...videoStream.getVideoTracks(),
    ...dest.stream.getAudioTracks()
  ]);
  recorder = new MediaRecorder(combinedStream, {mimeType : 'video/webm; codecs="avc1, opus"'});
  recorder.ondataavailable = e => {
    console.log(e.data.size);
    chunks.push(e.data);
  };
  recorder.start();
}

补充说明

你原代码中的MIME类型写法不符合规范,缺少codecs=声明,部分浏览器可能无法识别正确的编码格式,建议按照上述示例的规范写法调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 18:45:04