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

如何使用MediaRecorder()在桌面端录制移动端分辨率的视频

解决桌面端与移动端录制相同竖屏分辨率视频的问题

要让桌面端和移动端录制相同分辨率的竖屏视频,核心是通过getUserMedia的视频约束强制指定竖屏分辨率和比例,同时配置MediaRecorder确保输出格式一致。以下是具体实现方案:

1. 明确目标竖屏分辨率

先确定你需要的移动端竖屏分辨率(比如常见的720×1280、1080×1920),然后在getUserMedia的视频参数中添加精确约束,强制浏览器采用该竖屏规格。

2. 修改getUserMedia的视频约束

将原代码中video: true替换为带具体分辨率、比例的约束对象,确保桌面端摄像头输出竖屏画面:

navigator.mediaDevices.getUserMedia({
  audio: true,
  video: {
    // 指定目标竖屏分辨率(以720×1280为例)
    width: { exact: 720 },
    height: { exact: 1280 },
    // 强制竖屏比例,避免浏览器自动调整为横屏
    aspectRatio: { exact: 9/16 },
    // 可选:指定前置摄像头,移动端和桌面端通用
    facingMode: 'user'
  }
})
.then((mediaStreamObj) => {
  // ... 后续录制逻辑
});

兼容性处理

如果部分桌面摄像头不支持精确的竖屏分辨率,可以将exact改为ideal,并设置最小分辨率兜底,让浏览器优先匹配理想值:

video: {
  width: { ideal: 720, min: 480 },
  height: { ideal: 1280, min: 854 },
  aspectRatio: { exact: 9/16 },
  facingMode: 'user'
}

3. 配置MediaRecorder确保输出一致

初始化MediaRecorder时指定明确的MIME类型和视频比特率,避免浏览器自动调整编码参数导致分辨率变化:

const medRec = new MediaRecorder(mediaStreamObj, {
  mimeType: 'video/mp4;codecs=h264',
  // 根据分辨率设置合适的比特率(720p建议2.5Mbps,1080p建议5Mbps)
  videoBitsPerSecond: 2500000
});

完整修改后的代码

// 全局变量提前声明
let chunksArr = [];
let startBtn, endBtn;

navigator.mediaDevices.getUserMedia({
  audio: true,
  video: {
    width: { exact: 720 },
    height: { exact: 1280 },
    aspectRatio: { exact: 9/16 },
    facingMode: 'user'
  }
})
.then((mediaStreamObj) => {
  // 配置MediaRecorder
  const medRec = new MediaRecorder(mediaStreamObj, {
    mimeType: 'video/mp4;codecs=h264',
    videoBitsPerSecond: 2500000
  });
  window.mediaStream = mediaStreamObj;
  window.mediaRecorder = medRec;
  medRec.start();

  medRec.ondataavailable = (e) => {
    chunksArr.push(e.data);
  };

  medRec.onstop = () => {
    window.blobFile = new Blob(chunksArr, { type: "video/mp4;codecs=h264" });
    chunksArr = [];

    const recMediaFile = document.createElement("video");
    recMediaFile.setAttribute("id", "vid-recorder2");
    recMediaFile.controls = true;
    // 强制视频元素以竖屏比例显示
    recMediaFile.style.aspectRatio = "9/16";
    const RecUrl = URL.createObjectURL(window.blobFile);
    recMediaFile.src = RecUrl;
    document.getElementById(`vid-recorder`).replaceWith(recMediaFile);
  };

  startTimer();
  startBtn.disabled = true;
  endBtn.disabled = false;
})
.catch(err => {
  console.error("获取媒体设备失败:", err);
});

关键说明

  • aspectRatio约束:强制16:9的竖屏比例,确保桌面端摄像头不会输出横屏画面。
  • 分辨率约束:通过exact或ideal指定目标分辨率,让浏览器优先匹配移动端常用的竖屏规格。
  • MediaRecorder配置:明确MIME类型和比特率,避免不同浏览器对编码参数的自动调整导致输出不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:42:44