轨道录制(Track recording)允许您将参与者音频录制为单独的 WebM 文件,而不是单个混合会议录制。当您需要对存储、处理或查看的内容进行发言者级别的控制时,请使用此功能。
使用轨道录制,您可以通过传递 user_ids 来录制特定参与者的轨道,这对于敏感内容或受监管的工作流非常有用,因为这些工作流中无需录制每个参与者。如果您不提供 user_ids,RealtimeKit 默认会将所有参与者的音频轨道录制为单独的 WebM 文件。
要为特定参与者轨道录制传递 user_ids,请使用以下最低 SDK 版本:
- Web Core:
@cloudflare/realtimekit版本1.4.0或更高版本 - Web UI Kit:
@cloudflare/realtimekit-ui、@cloudflare/realtimekit-react-ui或@cloudflare/realtimekit-angular-ui版本1.1.2或更高版本 - Android Core 或 iOS Core:版本
2.0.0或更高版本 - Android UI Kit 或 iOS UI Kit:版本
1.1.0或更高版本
轨道录制会为每个录制的参与者创建一个文件。
轨道录制具有以下要求和限制:
| 限制 | 说明 |
|---|---|
| 活动会议 | 会议必须有一个处于活动状态的实时会话。 |
| 媒体类型 | 仅录制 audio 图层。 |
| 参与者选择 | 在 user_ids 中最多传递 100 个值。 |
| 存储 | 文件被上传到 RealtimeKit 托管的 R2 存储桶,零流出费用。 |
| 文件保留 | RealtimeKit 存储桶的下载 URL 将在七天后过期。 |
要为特定参与者录制单独的音频轨道,请使用会议 ID 和参与者的 user_ids 调用 POST /recordings/track。
curl --request POST \
--url https://api.cloudflare.com/client/v4/accounts/<account_id>/realtime/kit/<app_id>/recordings/track \
--header 'Authorization: Bearer <api_token>' \
--header 'Content-Type: application/json' \
--data '{
"meeting_id": "97440c6a-140b-40a9-9499-b23fd7a3868a",
"user_ids": ["user-123", "user-456"]
}'RealtimeKit 会录制 user_id 与允许列表匹配的当前及未来的参与者。未列出 user_id 的参与者将不会被录制。
省略 user_ids 以便为实时会议中的所有参与者录制单独的音频轨道。RealtimeKit 会为每个录制的参与者创建一个 WebM 文件。
curl --request POST \
--url https://api.cloudflare.com/client/v4/accounts/<account_id>/realtime/kit/<app_id>/recordings/track \
--header 'Authorization: Bearer <api_token>' \
--header 'Content-Type: application/json' \
--data '{
"meeting_id": "97440c6a-140b-40a9-9499-b23fd7a3868a"
}'响应包含一个录制 ID。使用此 ID 来停止或获取录制。
{
"success": true,
"data": {
"recording": {
"id": "fff40c6a-140b-40a9-9499-b23fd7a3868a",
"meeting_id": "97440c6a-140b-40a9-9499-b23fd7a3868a",
"status": "INVOKED",
"type": "TRACK",
"output_file_name": "{{file_name_prefix}}_{{user_id}}_{{peer_id}}_{{stream_kind}}_{{media_kind}}_{{date_time}}.webm"
}
}
}使用 layers.default.file_name_prefix 为每个生成的轨道录制文件添加前缀。
{
"meeting_id": "97440c6a-140b-40a9-9499-b23fd7a3868a",
"layers": {
"default": {
"media_kind": "audio",
"file_name_prefix": "speaker"
}
}
}如果您省略 layers,RealtimeKit 将使用 default 作为文件名缀。
使用录制更新端点停止轨道录制。
curl --request PUT \
--url https://api.cloudflare.com/client/v4/accounts/<account_id>/realtime/kit/<app_id>/recordings/<recording_id> \
--header 'Authorization: Bearer <api_token>' \
--header 'Content-Type: application/json' \
--data '{
"action": "stop"
}'当会议会话结束时,轨道录制也会停止。
轨道录制停止后,RealtimeKit 会上传每个参与者的 WebM 文件,并将录制移动到 UPLOADED。
轨道录制使用与混合录制相同的录制状态生命周期。要监控状态,请参阅监控录制状态。
当录制达到 UPLOADED 状态时,获取录制详情或监听 recording.statusUpdate Webhook。对于轨道录制,download_url 包含按图层分组的每个参与者的 WebM 文件 URL。
{
"download_url": [
{
"layer_name": "default",
"download_urls": {
"speaker_user-123_peer-456_peer_audio_1760000000000.webm": {
"download_url": "https://example.com/presigned-url"
}
}
}
]
}文件名使用以下格式:
{{file_name_prefix}}_{{user_id}}_{{peer_id}}_{{stream_kind}}_{{media_kind}}_{{date_time}}.webmdate_time 值是生成文件时的 Unix 时间戳(以毫秒为单位)。