一个任务,四种能力
task_type 是按位组合的,四个独立能力各占一位,想同时要哪几个就相加:
所以
3 = 录像+合流,9 = 录像+直播,15 = 四种全开。
有些任务会自动启动
这是 SMeeting 与底层 SRTC 最不一样的地方:不是所有录制都要你手动调 start。 第一个人进会时,服务端会按会议自身的配置决定要不要起任务:
若部署时开了直播能力,上面每一行都会再加
8(直播流)—— 例如普通会议开了
auto_record 实际起的是 9。这个开关由部署决定,不由接口控制,不确定的话问一下我们。
自动启动用的布局是会议自己的 layout_data,没配就是 auto。
所以:创建会议时把 auto_record 设成 true,就不用在业务里管录制的启停了。
手动调 start 适用于「会议中途才决定要录」这类场景。
同一场会议重复调 start 是更新,不是新建
同一个会议对同一类型只有一个进行中的任务。用不同参数再调一次start,改的是现有任务
(例如换布局),不会多出一个任务,也不会产生第二个录像文件。
录像和直播的关键区别
取回放地址请等
mcu_record_done 回调,不要在任务一结束就取 —— 那时转码往往还没完成。画面怎么排
layout_data.layout 决定画面布局。auto 会按在线人数自动选宫格,绝大多数场景够用;
需要固定画面时才指定具体布局:
注意
grids_N 的 N 不连续(没有 7、10、11),传不支持的值会报错。
不想每次都传布局,就把统一的水印、标签、布局策略配进录制配置。
指定谁出现在哪个格子
layout_data.div_list 用来把特定用户钉到特定格子,不指定就按进会顺序自动填充。
cells[].idx是格子序号,顺序等同 HTML 表格里<td>的排列(从左到右、从上到下)uids留空表示「剩余在线用户轮流出现在这些格子里」(大轮询);填多个则是这几个人在这些格子里轮询(小轮询)polling_dur是轮询间隔秒数,0表示不轮询cells[].bind_share为true时该格子优先绑定会中的共享屏幕流
cells 填主持人
user_id,给小格子的 cells 留空 uids 并设 polling_dur。
无人时的行为
layout_data.nobody_text 决定会议里没人时怎么办:
- 留空 → 暂停录制(推荐,避免录出大段黑屏)
- 填了文本 → 继续录制并显示该文本
水印与成员名标签
watermark.type:0默认、1无、2单排、3多排。watermark.text留空时用会议标题作为水印内容- 成员名标签的位置用字母组合表示:
L左、R右、T上、B下,可组合(LB= 左下)。留空表示不显示标签 - 字号、颜色、轮廓都留默认值即可,只在有明确视觉要求时才指定
完整时序
一次录制会产出多个文件
录像不是”一次录制一个文件”。 两种情况会切出多个文件:- 录制时长超过分片上限(默认 1 小时):任务结束后转码时按时长滚动切段,片间时间连续
- 录制中途底层因 30 秒无音视频流自动停止、随后被重新拉起:另起一段,片间存在时间空洞
- 取地址用
record_id而不是task_id。mcu_record_done回调按文件推送,一次录制推多条, 每条带自己的record_id;task_id是整个任务的,拿它只能定位到任务。 vods-url一次给你整场的全部段,按分片序号排好,每段带record_id/seq/began_at/duration/offset_ms。做连播时按seq顺序播,用offset_ms拼进度轴。reason=2的那一段与上一段之间有时间空洞(录制曾中断),连播会跳变,UI 上值得给个提示。
vods-url 的 url / size / mcu_at / mcu_dur 四个字段语义不变(mcu_at 是本段开始时间、
mcu_dur 是本段时长),此前已按这套字段对接的不必改动。
录像文件是任务结束之后才开始转码上传的。所以停止录制到”能播”之间有一段等待,
长录制会更久。判断”能播了”要靠
mcu_record_done 回调(最后一条的 is_last 为 true),
不要以任务状态变成”已结束”为准。计费提示
录制、录音、直播都是持续产生费用的服务端能力。auto_record 开着就意味着每一场会议都在录 ——
上线前确认这是你要的。手动启动的任务,业务侧最好在会议结束流程里显式调 stop。