録画

概要

Sora Cloud では Sora の録画機能を利用することができます。録画機能を利用するにあたり、追加料金などは不要です。

録画ファイルはご用意いただいた AWS S3 または S3 互換オブジェクトストレージ (以降オブジェクトストレージ) にアップロードします。

録画機能を利用する前に

重要

録画機能を利用するにはプロジェクトにオブジェクトストレージの設定をしてある必要があります。

オブジェクトストレージの設定がされていない場合は Sora の録画開始 API を呼び出しても実行されません。

オブジェクトレージの設定について

Sora Cloud ではオブジェクトのアップロード以外は行いません。 そのため Sora Cloud 側に設定するアクセスキーパーミッションは Put のみを付与してください。

制限

一括と分割録画の制限

Sora Cloud では録画方式は一括または分割のどちらかしか選択できません。

一括録画の時間制限

Sora Cloud では一括録画は最大で 3 時間までしか録画できません。

録画機能(セッション単位)分割録画の有効期限設定の制限

Sora Cloud では録画機能(セッション単位)で分割録画を行う際に有効期限を指定できますが、最大で 3 時間までしか指定できません。

録画機能の有効期限設定

expire_time の値は 10800 秒(3 時間) 以内である必要があります。

セッション録画の場合

  • expire_time に 1 以上、10800 以下の値を設定してください

  • split_only を指定し、セッションの終了まで録画を行う場合は expire_time の設定は不要です

レガシー録画の場合

  • split_only を指定しない場合 expire_time に 1 以上、10800 以下の値を設定してください

  • split_only を指定した場合 expire_time は 0 を設定してください

オブジェクトストレージへのアップロード

プロジェクト設定画面で指定したオブジェクトストレージに録画関連ファイルをアップロードします。

それぞれのファイルのアップロードが終わり次第、アップロード完了のウェブフックリクエストを飛ばします。

対応オブジェクトストレージ

  • AWS S3

  • MinIO

  • GCP GCS

  • Vultr Object Storage

  • Linode Object Storage

  • DigitalOcean Spaces

  • Cloudflare R2

未検証オブジェクトストレージ

  • Wasabi

ウェブフック通知

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>"
}

録画関連ファイルの 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"

{
    "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"

{
    "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>"
    }
}

セッションウェブフックの 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>",
    "session_id": "<String",
    "session_metadata": "<JSON>",
    "timestamp": "<UTC RFC3339 Timestamp>",
    "data": {
        "channel_id": "<String>",
        "session_id": "<String>",
        "recording_id": "<Base32-UUIDv4>",
        "recording_metadata": "<JSON-Object>",
        "split_only": "<Boolean>",
        "split_duration": "<Integer>",
        "created_at": "<UNIX-Time>",
        "expire_time": "<Integer>",
        "expired_at": "<UNIX-Time>",
        "file_path": "<String>",
        "filename": "<String>",
        "file_written": "<Boolean>",
        "start_timestamp": "<UTC RFC3339 Timestamp>",
        "stop_timestamp": "<UTC RFC3339 Timestamp>",
        "archives": [
            {
                "label": "<String>",
                "node_name": "<String>",
                "client_id": "<String | Base32-UUIDv4>",
                "bundle_id": "<String | Base32-UUIDv4>",
                "connection_id": "<Base32-UUIDv4>",
                "file_path": "REDACTED",
                "filename": "<String>",
                "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>"
            },
            {
                "label": "<String>",
                "node_name": "<String>",
                "client_id": "<String | Base32-UUIDv4>",
                "bundle_id": "<String | Base32-UUIDv4>",
                "connection_id": "<Base32-UUIDv4>",
                "file_path": "REDACTED",
                "filename": "<String>",
                "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>"
            }
        ],
        "failed_archives": [
            {
                "label": "<String>",
                "node_name": "<String>",
                "client_id": "<String | Base32-UUIDv4>",
                "bundle_id": "<String | Base32-UUIDv4>",
                "connection_id": "<Base32-UUIDv4>"
            },
            {
                "label": "<String>",
                "node_name": "<String>",
                "client_id": "<String | Base32-UUIDv4>",
                "bundle_id": "<String | Base32-UUIDv4>",
                "connection_id": "<Base32-UUIDv4>"
            }
        ]
    }
}

S3 または S3 互換ストレージのエンドポイント

Google Cloud Storage

endpoint:

storage.googleapi.com

Vultr Object Storage

endpoint:

<region>.vultrobjects.com

region は以下を参考にしてください。

https://www.vultr.com/docs/vultr-object-storage/

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/

© Copyright 2024, Shiguredo Inc. Created using Sphinx 7.2.6