録画¶
概要¶
Sora Cloud では Sora の録画機能を利用することができます。
録画ファイルはご用意いただいた AWS S3 または S3 互換オブジェクトストレージ (以降オブジェクトストレージ) にアップロードします。
録画機能を利用する前に¶
重要
録画機能を利用するにはプロジェクトにオブジェクトストレージの設定をしてある必要があります。
オブジェクトストレージの設定がされていない場合は Sora の録画開始 API を呼び出しても実行されません。
オブジェクトレージの設定について¶
Sora Cloud ではオブジェクトのアップロード以外は行いません。 そのため Sora Cloud 側に設定するアクセスキーパーミッションは Put のみを付与してください。
制限¶
一括と分割録画の制限¶
Sora Cloud では録画方式は一括または分割のどちらかしか選択できません。
一括録画の時間制限¶
Sora Cloud では一括録画は最大で 3 時間までしか録画できません。
オブジェクトストレージへのアップロード¶
プロジェクト設定画面で指定したオブジェクトストレージに録画関連ファイルをアップロードします。
それぞれのファイルのアップロードが終わり次第、アップロード完了のウェブフックリクエストを飛ばします。
対応オブジェクトストレージ¶
AWS S3
MinIO
GCP GCS
Vultr Object Storage
Linode Object Storage
DigitalOcean Spaces
Cloudflare R2
ウェブフック通知¶
Sora Cloud では録画ファイルのアップロードが完了するとウェブフックで通知を行います。
Sora Cloud ウェブフック recording-report.uploaded¶
- sora-cloud-webhook-type:
recording-report.uploaded
s3_uri
s3://<bucket-name>/<file-path>
{
"id": "<Base32-UUIDv4>",
"type": "recording-report.uplaoded",
"timestamp": "<RFC3339>",
"org_id": "<UUID>"
"project_id": "<String>"
"recording_id": "<Base32-UUIDv4>",
"channel_id": "<String>",
"filename": "<Recording-ID>/report-<Connection-ID>.json",
"s3_uri": "s3://<Bucket-Name>/<File-Path>"
}
Sora Cloud ウェブフック archive.uploaded¶
- sora-cloud-webhook-type:
archive.uploaded
s3_uri
s3://<bucket-name>/<file-path>
metadata_s3_uri
s3://<bucket-name>/<file-path>
{
"id": "<Base32-UUIDv4>",
"type": "archive.uploaded",
"timestamp": "<RFC3339>",
"recording_id": "<Base32-UUIDv4>",
"org_id": "<UUID>"
"project_id": "<String>"
"channel_id": "<String>",
"session_id": "<Base32-UUIDv4>",
"client_id": "<String | Base32-UUIDv4>",
"connection_id": "<Base32-UUIDv4>",
"s3_uri": "s3://<Bucket-Name>/<File-Path>",
"metadata_s3_uri": "s3://<Bucket-Name>/<File-Path>"
}
Sora Cloud ウェブフック split-archive.uploaded¶
- sora-cloud-webhook-type:
split-archive.uploaded
{
"id": "<Base32-UUIDv4>",
"type": "archive.uploaded",
"timestamp": "<RFC3339>",
"recording_id": "<Base32-UUIDv4>",
"org_id": "<UUID>"
"project_id": "<String>"
"channel_id": "<String>",
"session_id": "<Base32-UUIDv4>",
"client_id": "<String | Base32-UUIDv4>",
"connection_id": "<Base32-UUIDv4>",
"s3_uri": "s3://<Bucket-Name>/<File-Path>",
"metadata_s3_uri": "s3://<Bucket-Name>/<File-Path>"
}
Sora Cloud ウェブフック split-archive-end.uploaded¶
- sora-cloud-webhook-type:
split-archive-end.uploaded
{
"id": "<Base32-UUIDv4>",
"type": "split-archive-end.uploaded",
"timestamp": "<RFC3339>",
"recording_id": "<Base32-UUIDv4>",
"org_id": "<UUID>"
"project_id": "<String>"
"channel_id": "<String>",
"session_id": "<Base32-UUIDv4>",
"client_id": "<String | Base32-UUIDv4>",
"connection_id": "<Base32-UUIDv4>",
"s3_uri": "s3://<Bucket-Name>/<File-Path>"
}
制限¶
split_only を利用しない場合の単一録画の有効期限¶
重要
expire_time
の値は 10800 秒(3 時間) 以内である必要があります。
split_only
を利用しない場合は必ず exprire_time
に 0 以上、10800 以下の値を設定してください。
録画関連ファイルの Sora との差分¶
*_path
系の値がすべて"REDACTED"
という文字列に置き換わりますevent_metadata
の値がすべて"REDACTED"
という文字列に置き換わります
イベントウェブフックの Sora との差分¶
イベントウェブフック recording.report¶
Sora Cloud の録画ウェブフック recording.report
は Sora と仕様が一部が異なります。
Sora では録画終了時のウェブフックにレポートと録画とメタデータのファイルローカルパスを通知しますが、
Sora Cloud ではローカルパスは REDACTED
という文字列に置き換わって通知されます。
"file_path": "REDACTED"
"metadata_file_path": "REDACTED"
{
"type": "recording.report",
"id": "<Base32-UUIDv4>",
"version": "<String>",
"label": "<String>",
"node_name": "<String>",
"channel_id": "<String>",
"timestamp": "<UTC RFC3339 Timestamp>",
"log_written": "<Boolean>",
"data": {
"channel_id": "<String>",
"recording_id": "<Base32-UUIDv4>",
"metadata": "<JSON-Object>",
"split_only": "<Boolean>",
"file_written": "<Boolean>",
"created_at": "<UNIX-Time>",
"expire_time": "<Integer>",
"expired_at": "<UNIX-Time>",
"start_timestamp": "<UTC RFC3339 Timestamp>",
"stop_timestamp": "<UTC RFC3339 Timestamp>",
"file_path": "REDACTED",
"filename": "<String>",
"failed_archives": [],
"archives": [
{
"client_id": "<String or Base32-UUIDv4>",
"bundle_id": "<String or Base32-UUIDv4>",
"connection_id": "<Base32-UUIDv4>",
"label": "<String>",
"node_name": "<String>",
"filename": "<String>",
"file_path": "REDACTED",
"metadata_file_path": "REDACTED",
"metadata_filename": "<String>",
"start_time_offset": "<Integer>",
"start_timestamp": "<UTC RFC3339 Timestamp>",
"stop_time_offset": "<Integer>",
"stop_timestamp": "<UTC RFC3339 Timestamp>",
"size": "<Integer>"
},
{
"client_id": "<String or Base32-UUIDv4>",
"bundle_id": "<String or Base32-UUIDv4>",
"connection_id": "<Base32-UUIDv4>",
"label": "<String>",
"node_name": "<String>",
"filename": "<String>",
"file_path": "REDACTED",
"metadata_file_path": "REDACTED",
"metadata_filename": "<String>",
"start_time_offset": "<Integer>",
"start_timestamp": "<UTC RFC3339 Timestamp>",
"stop_time_offset": "<Integer>",
"stop_timestamp": "<UTC RFC3339 Timestamp>",
"size": "<Integer>"
}
]
}
}
イベントウェブフック archive.available¶
Sora Cloud の録画ウェブフック archive.available
は Sora と仕様が一部が異なります。
Sora では録画ファイルが利用可能になった際のウェブフックに、録画ファイルとメタデータのローカルパスを通知しますが、
Sora Cloud ではローカルパスは REDACTED
という文字列に置き換わって通知されます。
"file_path": "REDACTED"
"metadata_file_path": "REDACTED"
audio と video がフラット化した JSON 構造になっています。
{
"type": "archive.available",
"id": "<Base32-UUIDv4>",
"version": "<String>",
"label": "<String>",
"node_name": "<String>",
"channel_id": "<String>",
"session_id": "<Base32-UUIDv4>",
"client_id": "<String or Base32-UUIDv4>",
"bundle_id": "<String or Base32-UUIDv4>",
"connection_id": "<Base32-UUIDv4>",
"timestamp": "<UTC RFC3339 Timestamp>",
"event_metadata": "<JSON>",
"log_written": "<Boolean>",
"data": {
"channel_id": "<String>",
"recording_id": "<Base32-UUIDv4>",
"session_id": "<String or Base32-UUIDv4>",
"client_id": "<String or Base32-UUIDv4>",
"bundle_id": "<String or Base32-UUIDv4>",
"connection_id": "<Base32-UUIDv4>",
"created_at": "<UNIX-Time>",
"filename": "<String>",
"file_path": "REDACTED",
"metadata_filename": "<String>",
"metadata_file_path": "REDACTED",
"size": "<Integer>",
"audio": "<Boolean>",
"audio_codec_type": "<String>",
"video": "<Boolean>",
"video_codec_type": "<String>",
"video_bit_rate": "<Integer>",
"video_height": "<Integer>",
"video_width": "<Integer>"
"stats": {},
"start_time": "<UNIX-Time>",
"start_time_offset": "<Integer>",
"start_timestamp": "<UTC RFC3339 Timestamp>",
"stop_time": "<UNIX-Time>",
"stop_time_offset": "<Integer>",
"stop_timestamp": "<UTC RFC3339 Timestamp>"
}
}
イベントウェブフック split-archive.available¶
Sora Cloud の録画ウェブフック split-archive.available
は Sora と仕様が一部が異なります。
Sora では録画ファイルが利用可能になった際のウェブフックに、録画ファイルとメタデータのローカルパスを通知しますが、
Sora Cloud ではローカルパスは REDACTED
という文字列に置き換わって通知されます。
"file_path": "REDACTED"
"metadata_file_path": "REDACTED"
audio と video がフラット化した JSON 構造になっています。
{
"type": "split-archive.available",
"id": "<Base32-UUIDv4>",
"version": "<String>",
"label": "<String>",
"node_name": "<String>",
"channel_id": "<String>",
"session_id": "<Base32-UUIDv4>",
"client_id": "<String or Base32-UUIDv4>",
"bundle_id": "<String or Base32-UUIDv4>",
"connection_id": "<Base32-UUIDv4>",
"timestamp": "<UTC RFC3339 Timestamp>",
"event_metadata": "<JSON>",
"log_written": "<Boolean>",
"data": {
"channel_id": "<String>",
"recording_id": "<Base32-UUIDv4>",
"split_index": "<String>",
"session_id": "<String or Base32-UUIDv4>",
"client_id": "<String or Base32-UUIDv4>",
"bundle_id": "<String or Base32-UUIDv4>",
"connection_id": "<Base32-UUIDv4>",
"created_at": "<UNIX-Time>",
"filename": "<String>",
"file_path": "REDACTED",
"metadata_filename": "<String>",
"metadata_file_path": "REDACTED",
"size": "<Integer>",
"audio": "<Boolean>",
"audio_codec_type": "<String>",
"video": "<Boolean>",
"video_codec_type": "<String>",
"video_bit_rate": "<Integer>",
"video_height": "<Integer>",
"video_width": "<Integer>"
"stats": {},
"start_time": "<UNIX-Time>",
"start_time_offset": "<Integer>",
"start_timestamp": "<UTC RFC3339 Timestamp>",
"stop_time": "<UNIX-Time>",
"stop_time_offset": "<Integer>",
"stop_timestamp": "<UTC RFC3339 Timestamp>"
}
}
イベントウェブフック split-archive.end¶
Sora Cloud の録画ウェブフック split-archive.end
は Sora と仕様が一部が異なります。
Sora では録画ファイルが利用可能になった際のウェブフックに、録画ファイルとメタデータのローカルパスを通知しますが、
Sora Cloud ではローカルパスは REDACTED
という文字列に置き換わって通知されます。
"file_path": "REDACTED"
"metadata_file_path": "REDACTED"
{
"type": "split-archive.end",
"id": "<Base32-UUIDv4>",
"version": "<String>",
"label": "<String>",
"node_name": "<String>",
"channel_id": "<String>",
"session_id": "<Base32-UUIDv4>",
"client_id": "<String or Base32-UUIDv4>",
"bundle_id": "<String or Base32-UUIDv4>",
"connection_id": "<Base32-UUIDv4>",
"timestamp": "<UTC RFC3339 Timestamp>",
"event_metadata": "<JSON>",
"log_written": "<Boolean>",
"data": {
"channel_id": "<String>",
"recording_id": "<Base32-UUIDv4>",
"split_last_index": "<String>",
"session_id": "<String or Base32-UUIDv4>",
"client_id": "<String or Base32-UUIDv4>",
"bundle_id": "<String or Base32-UUIDv4>",
"connection_id": "<Base32-UUIDv4>",
"filename": "<String>",
"file_path": "REDACTED",
"audio": "<Boolean>",
"audio_codec_type": "<String>",
"video": "<Boolean>",
"video_codec_type": "<String>",
"video_bit_rate": "<Integer>",
"stats": {},
"start_time": "<UNIX-Time>",
"start_time_offset": "<Integer>",
"start_timestamp": "<UTC RFC3339 Timestamp>",
"stop_time": "<UNIX-Time>",
"stop_time_offset": "<Integer>",
"stop_timestamp": "<UTC RFC3339 Timestamp>"
}
}
S3 または S3 互換ストレージのエンドポイント¶
Google Cloud Storage¶
- endpoint:
storage.googleapi.com
Vultr Object Storage¶
- endpoint:
<region>.vultrobjects.com
region は以下を参考にしてください。
Cloudflare R2¶
- endpoint:
<account-id>.r2.cloudflare.storage.com
account-id は以下を参考にしてください。
https://developers.cloudflare.com/fundamentals/get-started/basic-tasks/find-account-and-zone-ids/