videocalling
录制(Recording)

录制(Recording)

功能

捕获和保存会议中的视频、音频和屏幕内容以供日后播放或存档的能力

什么是录制?

视频会议中的录制是捕获音频、视频、屏幕共享和其他会议内容并将其保存到文件中以供日后查看、共享或存档的能力。录制允许无法参加的参与者补上内容,能够回顾重要讨论,并作为培训、合规或法律目的的文档。

现代视频会议平台提供本地录制(保存到用户设备)和云录制(保存到服务器),具有各种质量选项、转录功能和自动化处理能力。

录制类型

本地录制

直接保存到用户计算机的录制:

  • 客户端处理:使用设备 CPU 和存储
  • 完全控制:用户可以立即访问文件
  • 无上传延迟:无需等待云处理
  • 存储限制:受设备存储容量限制
  • 隐私:数据从不离开用户设备
  • 质量:可以以原始质量录制而无压缩

云录制

在远程服务器上处理和存储的录制:

  • 服务器端处理:不影响客户端设备性能
  • 自动存储:保存到云帐户,可从任何地方访问
  • 转录:自动语音转文本转录
  • 处理:自动修剪、章节、说话人识别
  • 共享:使用链接轻松共享,无需大文件传输
  • 保留政策:基于组织规则的自动删除

录制模式

画廊视图录制

以网格布局录制所有参与者:

  • 平等可见性:所有参与者始终可见
  • 大文件:由于多个视频流,录制文件大小更大
  • 最适合:小型会议、小组讨论、课堂

演讲者视图录制

在主视图中录制活跃演讲者,其他人的缩略图:

  • 动态布局:焦点跟随活跃演讲者
  • 较小文件:强调一个大流,减小文件大小
  • 最适合:演示、讲座、网络研讨会

分离流录制

将每个参与者录制为单独的文件:

  • 后期制作灵活性:在视频编辑软件中编辑和混合
  • 最高质量:每个流都是原始质量
  • 存储密集:多个大文件
  • 最适合:专业制作、播客

使用 MediaRecorder API 实现

本地录制实现

MediaRecorder API 启用基于浏览器的录制:

// 初始化 MediaRecorder
let mediaRecorder;
let recordedChunks = [];

function startRecording(stream) {
  // 创建 MediaRecorder 实例
  const options = {
    mimeType: 'video/webm;codecs=vp9,opus',
    videoBitsPerSecond: 2500000 // 2.5 Mbps
  };
  
  mediaRecorder = new MediaRecorder(stream, options);
  
  // 收集数据块
  mediaRecorder.ondataavailable = (event) => {
    if (event.data.size > 0) {
      recordedChunks.push(event.data);
    }
  };
  
  // 处理录制停止
  mediaRecorder.onstop = () => {
    const blob = new Blob(recordedChunks, { type: 'video/webm' });
    const url = URL.createObjectURL(blob);
    
    // 下载文件
    const a = document.createElement('a');
    a.href = url;
    a.download = `recording-${Date.now()}.webm`;
    a.click();
    
    // 清理
    recordedChunks = [];
  };
  
  // 开始录制
  mediaRecorder.start(1000); // 每 1 秒收集一次数据
  console.log('录制已开始');
}

function stopRecording() {
  if (mediaRecorder && mediaRecorder.state !== 'inactive') {
    mediaRecorder.stop();
    console.log('录制已停止');
  }
}

录制组合流

同时录制摄像头和屏幕共享:

// 组合多个流
function combineStreams(cameraStream, screenStream) {
  const combinedStream = new MediaStream();
  
  // 添加摄像头视频或屏幕视频(以活跃的为准)
  const videoTrack = screenStream?.getVideoTracks()[0] || 
                     cameraStream?.getVideoTracks()[0];
  if (videoTrack) combinedStream.addTrack(videoTrack);
  
  // 从摄像头添加音频
  const audioTrack = cameraStream?.getAudioTracks()[0];
  if (audioTrack) combinedStream.addTrack(audioTrack);
  
  // 从屏幕添加系统音频(如果可用)
  const systemAudio = screenStream?.getAudioTracks()[0];
  if (systemAudio) combinedStream.addTrack(systemAudio);
  
  return combinedStream;
}

const recordStream = combineStreams(cameraStream, screenShareStream);
startRecording(recordStream);

云录制架构

服务器端录制使用媒体服务器捕获流:

// 服务器端:初始化录制会话
function startCloudRecording(meetingId, layout) {
  const recorder = {
    id: generateId(),
    meetingId: meetingId,
    layout: layout, // 'gallery', 'speaker', 'separate'
    startTime: Date.now(),
    status: 'recording',
    outputPath: `/recordings/${meetingId}/${Date.now()}.mp4`
  };
  
  // 创建媒体服务器录制会话
  const mediaServerRecording = mediaServer.startRecording({
    meetingId: meetingId,
    streams: getMeetingStreams(meetingId),
    layout: layout,
    output: recorder.outputPath,
    codec: 'h264',
    resolution: '1920x1080',
    framerate: 30
  });
  
  // 存储录制元数据
  recordings.set(recorder.id, recorder);
  
  return recorder;
}

录制权限和同意

法律要求

许多司法管辖区在录制前需要同意:

  • 单方同意:只有一名参与者(通常是主持人)需要知道正在录制(较少的司法管辖区)
  • 双方同意:所有参与者必须同意录制(加利福尼亚州、佛罗里达州等)
  • GDPR:欧盟需要明确同意和清晰通知
  • 特定行业:HIPAA(医疗保健)、FERPA(教育)有额外要求

同意通知

通知参与者的最佳实践:

  • 会议前:在日历邀请中指出会议将被录制
  • 视觉指示器:在会议期间醒目地显示录制图标/徽章
  • 音频公告:加入时"此会议正在录制"
  • 同意对话框:要求参与者在加入录制会议之前接受
  • 退出选项:如果参与者不同意,允许他们离开
// 显示录制同意对话框
function showRecordingConsent() {
  return new Promise((resolve) => {
    showDialog({
      title: '会议录制',
      message: '此会议将被录制。通过加入,您同意被录制。',
      buttons: [
        {
          label: '我同意',
          action: () => resolve(true)
        },
        {
          label: '离开会议',
          action: () => {
            leaveCall();
            resolve(false);
          }
        }
      ]
    });
  });
}

录制功能(2025)

AI 驱动的增强

现代录制平台提供智能功能:

  • 自动转录:实时语音转文本,带说话人识别
  • 亮点检测:AI 识别关键时刻、行动项目、决定
  • 智能章节:按主题自动分段录制
  • 噪音抑制:在后期处理中去除背景噪音
  • 自动编辑:删除静音停顿,生成摘要片段
  • 可搜索内容:在转录中搜索以查找特定时刻

质量和格式选项

  • 分辨率:720p、1080p 或 4K 录制
  • 帧率:15fps(低带宽),30fps(标准),60fps(流畅运动)
  • 音频质量:64kbps(语音),128kbps(音乐/高保真)
  • 文件格式:MP4(最兼容),WebM,MKV
  • 编解码器:H.264(兼容性),H.265(效率),VP9(开放)

录制后处理

  • 修剪:删除会议前和会议后的聊天
  • 品牌推广:添加带有公司徽标的片头/片尾幻灯片
  • 字幕:嵌入或附加 SRT/VTT 字幕文件
  • 多种格式:生成视频、纯音频和转录版本
  • 压缩:优化文件大小以进行存储/共享

存储和保留

存储选项

  • 平台云存储:由视频会议提供商存储(Zoom、Teams 等)
  • 自定义云存储:上传到 AWS S3、Google Cloud Storage、Azure Blob
  • LMS 集成:自动上传到 Canvas、Moodle、Blackboard
  • 本地存储:保存到用户的设备或网络驱动器

保留政策

录制生命周期的自动化管理:

  • 自动删除:在 N 天后删除录制(30、60、90 天常见)
  • 归档:将旧录制移至更便宜的冷存储
  • 法律保留:为诉讼/合规无限期保留录制
  • 基于权限:根据会议类型或参与者的不同保留规则

访问控制和共享

权限

  • 仅所有者:只有会议主持人可以访问录制
  • 参与者:所有参与者自动获得访问权限
  • 组织:组织中拥有链接的任何人都可以查看
  • 公开:拥有链接的任何人都可以查看(用于网络研讨会、公共活动)
  • 密码保护:需要密码才能查看录制

共享方法

  • 直接链接:共享云托管录制的 URL
  • 电子邮件分发:自动向所有参与者发送带链接的电子邮件
  • 嵌入代码:在网站或 LMS 中嵌入播放器
  • 下载:允许用户下载 MP4/WebM 文件

常见用例

  • 教育:为缺席的学生录制讲座,创建课程内容库
  • 培训:入职视频、合规培训、技能发展
  • 文档:会议记录、决策记录、项目审查
  • 合规:法律取证、财务咨询会议、医疗保健咨询
  • 内容创作:播客、网络研讨会、营销内容
  • 内部沟通:公司全体会议、季度业务审查

最佳实践

录制前

  1. 通知参与者:在开始录制前始终通知
  2. 获得同意:确保符合当地法律
  3. 测试设备:在重要会议前验证录制是否工作
  4. 选择布局:选择适当的视图(演讲者/画廊)

录制期间

  • 视觉指示器:确保录制指示器可见
  • 避免中断:不要多次停止/启动录制
  • 监控存储:确保有足够的磁盘空间(本地)或配额(云)

录制后

  • 审查质量:快速审查以确保音频/视频正确捕获
  • 添加元数据:添加标题、描述、标签以便发现
  • 及时共享:在内容仍相关时发送给参与者
  • 管理存储:定期归档或删除旧录制

平台示例

  • Zoom:本地和云录制,自动转录,每个参与者的单独音频文件
  • Microsoft Teams:云录制到 OneDrive/SharePoint,自动转录,Stream 集成
  • Google Meet:云录制到 Google Drive(Workspace 帐户),自动保存到组织者
  • Webex:本地和云录制,自动亮点,可搜索转录
  • Loom:专门用于快速异步视频录制,即时共享

参考资料