Skip to main content

概述

本地合成录制适合在浏览器端录制「当前用户看到的会议视角」:例如 3 宫格、9 宫格、翻页后的当前页、共享屏幕优先布局等。SDK 负责把传入的视频轨道绘制到内部 canvas,并把音频轨道混入同一条录制流,最终通过 MediaRecorder 输出一个 webm 文件;业务层负责决定当前要录哪些画面、每个画面放在录制画布的什么位置。 LocalCompositeRecorder 只处理媒体合成与录制生命周期,不内置会议布局算法——布局由应用层根据当前 UI 视角传入。

基本用法

得到 blob 后即可下载或上传:

启动参数

start(options)LocalCompositeRecorderStartOptions LocalCompositeRecorderVideoItem(单个视频项):

输入轨道

videoItems[].trackaudioTracks[] 均可传入 SDK Track 或浏览器原生 MediaStreamTrack
  • LocalVideoTrack
  • RemoteVideoTrack
  • LocalAudioTrack
  • RemoteAudioTrack
  • MediaStreamTrack
如果传入 SDK Track,录制器会监听内部媒体轨替换事件,并在重连或重新订阅导致底层 MediaStreamTrack 变化时自动切换到新轨道,无需业务层介入。

布局职责

LocalCompositeRecorder 不内置会议布局算法。应用层应根据当前 UI 视角生成 videoItems
  • 当前只显示 3 个用户,就只传这 3 个视频项。
  • 当前是 9 宫格,就按 9 个槽位计算 rect
  • 用户左右翻页后,调用 updateVideoItems(...) 切换到新一页。
  • 共享屏幕、主讲人模式等特殊布局,也由业务层计算 rect
这样录制结果会跟随应用层传入的当前视角,而不是固定录制全部远端流。

音频建议

会议录制通常建议把本地麦克风轨道和远端混音轨道同时传入:
如果只录远端声音,可以只传 remoteAudioMixTrack;如果只录本地麦克风,可以只传 localMicTrack

边录边上传

传入 timesliceonDataAvailable,即可按分片实时拿到数据,用于边录边上传或落盘,避免长时间录制占用大量内存:
注意:webm 分片为流式容器,单个分片通常不可独立播放,需服务端按顺序拼接为完整文件。

状态与释放


注意事项

  • 需在 HTTPS(或 localhost)环境运行;AudioContext 可能需用户手势后才能启动。
  • 输出格式为 webm;不同浏览器支持的编码(vp9/vp8/opus)不同,SDK 会自动回退到可用格式。
  • pause / resume 作用于同一个最终文件,不会产生多个文件。
  • 录制分辨率与帧率越高,CPU 占用越大,建议按场景选择合适的 width/height/fps