トラック録画では、1 本のコンポジット録画ではなく、参加者の音声を個別の 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以降
トラック録画は、録画した参加者ごとに 1 ファイルを作成します。
トラック録画には、次の要件と制限があります。
| 制限 | 説明 |
|---|---|
| アクティブなミーティング | ミーティングにアクティブなライブセッションがある必要があります。 |
| メディアの種類 | audio レイヤーのみ録画されます。 |
| 参加者の選択 | user_ids には最大 100 件まで渡せます。 |
| ストレージ | ファイルは RealtimeKit が管理する R2 バケットへアップロードされ、egress 料金はかかりません。 |
| ファイルの保持 | RealtimeKit バケットのダウンロード URL は 7 日で期限切れになります。 |
特定の参加者の音声トラックを個別に録画するには、ミーティング 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 は、録画した参加者ごとに 1 つの 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"
}'レスポンスには recording 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 タイムスタンプ(ミリ秒)です。