---

title: MediaRecorder API 实战:录制音视频流与编码输出

keywords:

  • MediaRecorder
  • getUserMedia
  • webm
  • codecs
  • dataavailable

description: 介绍 MediaRecorder 的音视频录制流程、编码类型与分片事件处理,结合 getUserMedia 与保存/上传策略,提供示例与兼容建议。

categories:

  • 文章资讯
  • 技术教程

---

概述

MediaRecorder 允许将媒体流(摄像头/麦克风/屏幕)录制为可保存的片段(如 WebM)。通过 dataavailable 事件读取分片并合并为 Blob,实现本地保存或上传。需关注编码支持与权限。

示例

const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true })
const rec = new MediaRecorder(stream, { mimeType: 'video/webm;codecs=vp8,opus' })
const chunks = []

rec.addEventListener('dataavailable', e => { if (e.data.size) chunks.push(e.data) })
rec.addEventListener('stop', () => {
  const blob = new Blob(chunks, { type: 'video/webm' })
  const url = URL.createObjectURL(blob)
  const a = document.createElement('a'); a.href = url; a.download = 'record.webm'; a.click()
  URL.revokeObjectURL(url)
})

rec.start(1000) // 每秒一个分片
// 停止录制
setTimeout(() => rec.stop(), 5000)

工程建议

  • 编码支持:查询 MediaRecorder.isTypeSupported();根据平台使用不同编码(如 H.264)。
  • 权限与 UX:在用户手势下启动;清晰指示录制状态与时长;处理取消。
  • 大文件与上传:分片上传与断点续传;记录失败与重试策略。
  • 兼容:不支持时回退到 canvas.captureStream() 与 WebM 编码方案或原生应用。

参考与验证

  • MDN MediaRecorder 文档:https://developer.mozilla.org/docs/Web/API/MediaRecorder
  • web.dev 捕获与录制指南:https://web.dev/articles/media-recording
  • Chrome 平台文档:https://developer.chrome.com/docs/web-platform/mediarecorder/

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部