# Sora Cloud ドキュメント サービスのお問い合わせなどは sora-cloud at shiguredo.jp までお願いいたします。 (このメールアドレスへの特定電子メールの送信を拒否いたします) Sora Cloud に関する情報は [時雨堂 Discord サーバー](https://discord.gg/shiguredo) の `#sora-cloud-announce` で共有しています。 障害情報などもこちらで共有しておりますので、ご利用の際はご参加ください。 # LLM 向け LLM が読み込みやすい形式でドキュメントを提供しています。 - 目次は [llms.txt](/llms.txt) にあります - 全文は [llms-full.txt](/llms-full.txt) にあります # お知らせ ## Sora DevTools の URL について - Sora Cloud Console の画面からアクセストークンを発行した際に表示される Sora DevTools の URL は、2025 年 6 月以降、URL が変更されています。- 変更前: `https://sora-devtools.shiguredo.app/devtools.html` - 変更後: `https://sora-devtools.shiguredo.app/` - 変更前の URL でブックマーク登録されている場合は、新しい URL での登録をお願いいたします - URL に含まれるクエリパラメーターは、変更前後で互換性が保たれています # 廃止機能情報 ## 2026 年 12 月廃止予定 - 指定した視聴者が受信する RTP ストリームの rid をリセットする `ResetRtpStream` API- 代わりに `RequestSimulcastRid` API を利用してください - 詳細は [RequestSimulcastRid API ドキュメント](https://sora-doc.shiguredo.jp/API_SIMULCAST#7d26ab) をご確認ください ## 2027 年 12 月廃止予定 - サイマルキャストの rid を指定する `RequestRtpStream` API- 代わりに `RequestSimulcastRid` API を利用してください - 詳細は [RequestSimulcastRid API ドキュメント](https://sora-doc.shiguredo.jp/API_SIMULCAST#7d26ab) をご確認ください - シグナリング接続時の `simulcast_rid`- 代わりに `simulcast_request_rid` を利用してください - 認証ウェブフック払い出しパラメーターの `simulcast_rid`- 代わりに `simulcast_request_rid` を利用してください # 過去の廃止情報 ## 2025 年 12 月 18 日廃止 - 認証成功時とセッション生成時の払い出しでの forwarding_filter の指定- 代わりに forwarding_filters を利用してください - シグナリング接続時に forwarding_filter の指定- 代わりに forwarding_filters を利用してください - セッション生成時の払い出しでの trial_max_connections の指定- 代わりに max_connections を利用してください ## 2025 年 12 月 1 日廃止 - レガシー録画機能- 代わりに録画機能(セッション単位)を利用してください - 移行方法は [レガシー録画機能から新しい録画機能 (セッション単位) への移行](https://sora-doc.shiguredo.jp/LEGACY_RECORDING_TO_RECORDING) を確認してください - RTP ストリーム停止/再開 API- 代わりに転送フィルター機能を利用してください ## 2025 年 6 月 1 日廃止 - ユーザーエージェント統計機能- 以下の機能が廃止となります - 認証ウェブフックの `user_agent_stats` 払い出し- 代わりに `rtc_stats` を利用してください - 詳細は [rtc_stats の払い出し](https://sora-doc.shiguredo.jp/AUTH_WEBHOOK_RETURN#9e5912) を確認してください - `ListChannelUserAgentStats` API- 代わりに [ListChannelRtcStats](https://sora-doc.shiguredo.jp/API_RTC_STATS#listchannelrtcstats) API を利用してください - `GetUserAgentStats` API- 代わりに [20211215.GetRtcStats](https://sora-doc.shiguredo.jp/API_RTC_STATS#getrtcstats) API を利用してください # 開発ログ **Sora Cloud の開発ログを公開しています** [時雨堂 Sora Cloud 開発ログ](https://gist.github.com/voluntas/ef9b064e5832a784e0b5e654fee832a8) # このドキュメントについて - [概要](overview.html) - [チュートリアル](tutorial.html) - [変更履歴](changes.html) - [FAQ](faq.html) - [料金](pricing.html) - [制限](limits.html) - [サポート](support.html) - [Sora 開発ツール](devtools.html) - [メンバー](member.html) - [認証](auth.html) - [ウェブフック](webhook.html) - [録画](recording.html) - [Hisui Cloud](hisui_cloud.html) - [固定 IP アドレス接続機能(オプション)](static_ip.html) - [エラーメッセージ](error_message.html) - [WebRTC SFU Sora](sora.html) - [Sora Cloud API](sora_cloud_api.html) - [Sora API](sora_api.html) - [組織 ステータス API](org_api_status.html) - [組織 トラフィック API](org_api_traffic.html) - [組織 セッション API](org_api_session.html) - [組織 ログ API](org_api_log.html) - [組織 録画ログ API](org_api_log_recording.html) - [プロジェクト アクセストークン API](project_api_access_token.html) - [プロジェクト トラフィック API](project_api_traffic.html) - [プロジェクト セッション API](project_api_session.html) - [プロジェクト ログ API](project_api_log.html) - [プロジェクト 録画ログ API](project_api_log_recording.html) - [プロジェクト Hisui Cloud API](project_api_hisui_cloud.html) - [過去の変更履歴](old_changes.html) # 概要 **Sora Cloud** は [WebRTC SFU Sora](https://sora.shiguredo.jp/) のクラウド版です。 ## 特長 ### サーバーの構築や運用が不要 Sora をパッケージとして利用する場合と異なり、 サーバーの構築や運用を行うことなく、最新版の Sora を手軽に利用できます。 ### 最大帯域と最大同時接続数での課金 利用時間や転送量による課金ではなく、帯域と同時接続数によって料金が決定します。 ## Sora の仕様について Sora の仕様については Sora ドキュメントをご確認ください。 もし不明点がある場合はサポートまたはメールにてお問い合わせください。 ## 利用しているバージョン **Sora のバージョン**: 2026.1.0 **Hisui のバージョン**: 2025.3.2 # チュートリアル ## 概要 Sora Cloud は WebRTC SFU Sora のクラウド版です。 ## 用語 **組織 (Org)** : Sora Cloud を契約する法人または団体に割り当てられる Sora Cloud を利用する際の単位です **メンバー** : 組織の中でアカウントを登録する個人です **アカウント** : メンバーのメールアドレス 1 つに対して 1 つのアカウントが作成されます : 1 つの組織で最大 5 つのアカウントが登録できます **API キー** : Sora に接続する際に利用する JWT を作成するために必要なキーです **プロジェクト (Project)** : 複数の異なるサービスや検証環境など、利用状況を分けて管理する際の単位です : 1 つの組織で最大 5 つのプロジェクトを作成できます **プロジェクト ID** : Sora に接続する際に利用するプロジェクト単位のユニークな ID です **HTTP クライアント** : [curl](https://curl.se/) などの CLI から利用可能なツールです : このドキュメントでは API を実行する例で HTTP クライアントの [curl](https://curl.se/) を利用しています : また、 curl の JSON レスポンスを整形するために、コマンドラインツール [jq](https://github.com/jqlang/jq) を利用しています **Sora 開発ツール** ## Sora Cloud を利用する準備をする ### プロジェクトを作成する 管理コンソールから Projects タブをクリックし、 Create project ボタンを押し、プロジェクトを作成してください。 ![image](https://i.gyazo.com/06a5f0458669ea2509080f55c87c2716.png) プロジェクト名に好きな文字列を入力してください。ここでは HamHamHam としています。 ![image](https://i.gyazo.com/97daee51bc80b761dfc1ba088880087a.png) ## Sora へ接続する ### 前提 ブラウザは最新のブラウザを利用してください。 Chrome や Edge をおすすめします。 ### Sora 開発ツールを使った動作確認 プロジェクトの ... をクリックして Create Access Token をクリックしてください。 ![image](https://i.gyazo.com/f98ab2e1baba285bdae6b9e4663a9909.png) チャネル名に好きな文字列を入力してください。ここでは sora-devtools としています。 ![image](https://i.gyazo.com/896bdfcb147e168ac8686ee5e7fc8839.png) 文字列を入力したら Create Access Token をクリックしてください。 ![image](https://i.gyazo.com/ae346c5f841f8ec5d18dd487365aba14.png) Sora DevTools の URL をクリップボードにコピーしたら、ブラウザに貼り付けてください。 ![image](https://i.gyazo.com/a832740c092f2a173c0129740e43caa8.png) あとは、connect を押すことで接続されます。もう一つタブを開いて同じように connect を押してください。 それぞれの音声や映像が配信されたら成功です。 > **注意** > > Sora 開発ツールの録画開始・停止やサイマルキャストの rid 切り替えなど、Sora API を利用する一部の機能は使用できません。 ## 同時接続数を確認する 3 つの接続を維持したまま Sora Cloud の API で今どのくらいの同時接続数があるか確認してみます。 API キーはプロジェクトから ... をクリックして Edit Project をクリックしてください。 ![image](https://i.gyazo.com/76acd683ffc648815b04454dc2f17bce.png) Security の API キー (Primary API Key) からクリップボードにコピーして利用してください。 ![image](https://i.gyazo.com/edc43949da40807a5291e676539dec9c.png) ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-total-live-concurrent-connections \ -H "Authorization: Bearer " \ | jq . 3 ``` Sora Cloud で利用できる様々な API は [Sora Cloud API](sora_cloud_api.html) にありますのでご確認ください。 ## Sora の API を利用する ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/sora-api \ -H "Authorization: Bearer " \ -H "x-sora-target: Sora_20201013.ListChannelConnections" \ --json '{"channel_id":"sora-cloud@25PO5TGFD26VB62G7C7DFAAYGA4J3CJN"}' \ | jq . [ { "audio": { "codec_type": "OPUS" }, "bundle_id": "TP8RRG5SN54DD7VBMHZDB0SJW0", "channel_id": "sora-cloud@25PO5TGFD26VB62G7C7DFAAYGA4J3CJN", "client_id": "TP8RRG5SN54DD7VBMHZDB0SJW0", "connection_id": "TP8RRG5SN54DD7VBMHZDB0SJW0", "created_time": 1652944257911575, "created_timestamp": "2022-05-19T07:10:57.911575Z", "event_metadata": "REDACTED", "multistream": true, "role": "sendrecv", "session_id": "47Q2QVK9DD7DHCZ8W37NPJNADM", "simulcast": false, "spotlight": false, "video": { "bit_rate": 500, "codec_type": "VP9" } }, { "audio": { "codec_type": "OPUS" }, "bundle_id": "MHJ8PB68MD2FFB188AR8VT0S2M", "channel_id": "sora-cloud@25PO5TGFD26VB62G7C7DFAAYGA4J3CJN", "client_id": "MHJ8PB68MD2FFB188AR8VT0S2M", "connection_id": "MHJ8PB68MD2FFB188AR8VT0S2M", "created_time": 1652944261045734, "created_timestamp": "2022-05-19T07:11:01.045734Z", "event_metadata": "REDACTED", "multistream": true, "role": "sendrecv", "session_id": "47Q2QVK9DD7DHCZ8W37NPJNADM", "simulcast": false, "spotlight": false, "video": { "bit_rate": 500, "codec_type": "VP9" } } ] ``` ## アプリケーション連携 Sora のドキュメントにアプリケーション連携チュートリアルがありますので、こちらをご確認ください。 ### ウェブフック署名 Sora Cloud のウェブフックには署名が付与されています。 署名をチェックすることで Sora Cloud からのリクエストであることを確認することができます。 [署名](webhook.html#14b8f2) をご確認ください。 # 変更履歴 ## 2026-06-25 > **注意** > > ResetRtpStream API は 2026 年 12 月に廃止されます。この API をご利用の方は、RequestSimulcastRid API への移行をお願いします。 - [CHANGE] Sora のバージョンを 2026.1.0 にメジャーアップデートしました- Sora 2026.1.0 についての詳細は [リリースノート](https://sora-doc.shiguredo.jp/RELEASE_NOTE#213e46) をご確認ください - もし Sora 2026.1.0 の変更点で不明点がある場合はチケットにてお問い合わせください - [CHANGE] DataChannel 切り替え後の WebSocket シグナリングの `"type": "ping"` 送信間隔を 30 秒から 15 秒に変更しました- WebSocket 接続維持のため、メッセージ送信間隔を短くし、クライアント側で切断されにくくしました - [ADD] 録画機能利用時の `recording.started` と `recording.report` セッションウェブフックに、録画の開始や終了のきっかけを確認できる `trigger` フィールドを追加しました- 項目の詳細は [Sora ドキュメント セッションウェブフック](https://sora-doc.shiguredo.jp/SESSION_WEBHOOK) をご確認ください - [ADD] サイマルキャスト機能の `simulcast_encodings` パラメーターで以下の項目を指定できるようになりました- `priority` - `networkPriority` - 項目の詳細は [Sora ドキュメント サイマルキャスト機能](https://sora-doc.shiguredo.jp/SIMULCAST) をご確認ください - [ADD] [OBS Studio 32.1](https://github.com/obsproject/obs-studio/releases/tag/32.1.0) 以降の WHIP サイマルキャスト機能に対応しました- OBS Studio の WHIP 利用時に合計レイヤー数を 2 または 3 に指定した場合にサイマルキャスト機能が有効になります - OBS Studio の WHIP サイマルキャストは合計レイヤー数を 4 まで指定できますが、 Sora では合計レイヤー数 4 には対応していません- WHIP 利用時の合計レイヤー数に 4 が指定された場合は接続に失敗します - OBS Studio の WHIP サイマルキャスト機能は認証ウェブフック `simulcast_encodings` の払い出しによるエンコーディングパラメーターのカスタマイズは行えません - OBS Studio の WHIP サイマルキャスト機能の詳細は [Sora ドキュメント OBS Studio の WHIP サイマルキャスト対応について](https://sora-doc.shiguredo.jp/WHIP#0992dd) をご確認ください - [ADD] シグナリング利用時の offer メッセージの data_channels に `ordered` / `max_packet_life_time` / `max_retransmits` / `protocol` が追加されました - [ADD] `20170529.GetStatsConnection` API / `20170529.GetStatsClient` API に `spotlight` の 統計項目が追加されました- スポットライト機能で発話開始からフォーカス取得までの累積遅延を計測するコネクション単位の統計 `total_spotlight_audible_to_focus_delay_us` を追加しました - スポットライト機能でフォーカス取得成功回数を計測するコネクション単位の統計 `total_spotlight_focus_succeeded` を追加しました - [FIX] H.265 コーデックで録画した MP4 ファイルが Apple QuickTime Player で再生できない問題を修正しました - [FIX] AV1 コーデックで録画した MP4 ファイルのメタデータに FPS 情報が含まれていない問題を修正しました - [FIX] WHIP 機能利用時に Answer SDP の RTP ヘッダー拡張の ID マップを固定しました ## 2026-05-07 - [CHANGE] Sora のバージョンを 2025.2.1 にバグフィックスアップデートしました- Sora 2025.2.1 については Sora の [リリースノート](https://sora-doc.shiguredo.jp/RELEASE_NOTE#1a7ec7) をご確認ください。 - もし Sora 2025.2.1 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2026-04-10 - [CHANGE] Hisui Cloud の Hisui のバージョンをレガシー版から現行版の 2025.3.2 に移行しました- 移行による、Hisui Cloud の機能変更はありません - 現行版の Hisui はレガシー版と mp4 ファイルの作成方法が変更されているため、プレイヤーによっては挙動が変わる可能性があります - もし Hisui Cloud の Hisui バージョン移行による変更点で不明点がある場合はチケットにてお問い合わせください ## 2025-12-18 - [CHANGE] Sora のバージョンを 2025.2.0 にメジャーアップデートしました- Sora 2025.2.0 についての詳細は [リリースノート](https://sora-doc.shiguredo.jp/RELEASE_NOTE#c8b9b3) をご確認ください。 - もし Sora 2025.2.0 の変更点で不明点がある場合はチケットにてお問い合わせください - [ADD] 認証ウェブフックの払い出しによる録画開始に対応しました- 認証ウェブフックの `recording` を `true` に設定することで、録画を開始できるようになりました - 認証ウェブフックの録画関連の払い出し項目については [録画機能の払い出し](https://sora-doc.shiguredo.jp/AUTH_WEBHOOK_RETURN#8a1586) をご確認ください - Sora Cloud の録画機能については [録画のドキュメント](recording) をご確認ください - [ADD] RPC 機能に対応しました- 認証ウェブフックの `rpc_methods` を払い出すことで、 RPC 機能を利用できるようになります - RPC 機能では、次のことが可能です- サイマルキャスト rid の切り替え - スポットライト rid の切り替え - スポットライト rid のリセット - シグナリング通知メタデータの作成 - シグナリング通知メタデータ項目の作成または更新 - 詳細は [RPC 機能](https://sora-doc.shiguredo.jp/RPC) をご確認ください - [ADD] サイマルキャスト rid 切り替えの新しい API である `Sora_20251217.RequestSimulcastRid` に対応しました- サイマルキャストの rid を切り替える新しい API です - いままで利用できた次の API は廃止予定です- `Sora_20201005.ResetRtpStream` は 2026 年 12 月に廃止予定です - `Sora_20201005.RequestRtpStream` は 2027 年 12 月に廃止予定です - 今後は `Sora_20251217.RequestSimulcastRid` をご利用ください - `Sora_20251217.RequestSimulcastRid` API では、パラメーター名が以下のように変更されます。- `send_connection_id` が `sender_connection_id` に変更されます - `recv_connection_id` が `receiver_connection_id` に変更されます - 詳細は [RequestSimulcastRid API ドキュメント](https://sora-doc.shiguredo.jp/API_SIMULCAST#7d26ab) をご確認ください - [ADD] サイマルキャスト rid を Sora が自動切り替えを行う `Sora_20251217.ChangeSimulcastAuto` API に対応しました- サイマルキャスト機能利用時に視聴側の環境に合わせて Sora が自動で配信する rid ストリームを切り替えるように変更できます - 詳細は [ChangeSimulcastAuto API ドキュメント](https://sora-doc.shiguredo.jp/EXPERIMENTAL_API_SIMULCAST#81b01b) をご確認ください - [ADD] 認証ウェブフックの払い出しで、新しいサイマルキャストのパラメーターに対応しました- 以下のパラメーターを払い出せるようになりました- `simulcast_auto_rids` - `simulcast_request_rid` - `simulcast_rpc_rids` - 詳細は [認証ウェブフック成功時の払い出し](https://sora-doc.shiguredo.jp/AUTH_WEBHOOK_RETURN) をご確認ください - [ADD] シグナリング通知メタデータ拡張機能に対応しました- RPC 機能を利用したシグナリング通知メタデータ拡張機能に対応しました - Sora Cloud ではシグナリング通知メタデータ拡張機能を RPC 経由のみ利用できます。Sora API 経由の利用はできません - 詳細は [RPC 機能](https://sora-doc.shiguredo.jp/RPC) と [シグナリング通知メタデータ拡張機能](https://sora-doc.shiguredo.jp/SIGNALING_NOTIFY_METADATA_EXT) をご確認ください - [ADD] セッション単位での最大同時接続数を無視する機能に対応しました- 認証ウェブフックで `ignore_max_connections` を `true` で払い出すことで指定可能です - 詳細は [ignore_max_connections の払い出し](https://sora-doc.shiguredo.jp/AUTH_WEBHOOK_RETURN#838997) をご確認ください - [ADD] 認証ウェブフックの払い出し項目を追加しました- 録画関連- `recording` - `recording_expire_time` - `recording_split_only` - `recording_split_duration` - `recording_metadata` - `recording_format` - RPC 関連- `rpc_methods` - サイマルキャスト関連- `simulcast_auto_rids` - `simulcast_request_rid` - `simulcast_rpc_rids` - セッション関連- `ignore_max_connections` - その他の認証ウェブフックの払い出し項目は [Sora 認証ウェブフック](webhook#28f312) をご確認ください ## 2025-12-01 - [CHANGE] レガシー録画機能および RTP ストリーム停止/再開 API を廃止しました- レガシー録画機能の代わりに録画機能(セッション単位)を利用してください - RTP ストリーム停止/再開 API の代わりに転送フィルター機能 API を利用してください ## 2025-06-27 > **注意** > > レガシー録画機能は 2025 年 12 月 1 日に廃止されます。まだレガシー録画機能をご利用の方は、録画機能(セッション単位)への移行をお願いします。 - [CHANGE] Sora のバージョンを 2025.1.0 にメジャーアップデートしました- Sora 2025.1.0 についての詳細は Sora のリリースノートをご確認ください。 - もし Sora 2025.1.0 の変更点で不明点がある場合はチケットにてお問い合わせください - [CHANGE] ユーザーエージェント統計機能を廃止しました- 認証ウェブフックの `user_agent_stats` 払い出しが廃止となりました。- 今後は `rtc_stats` を利用してください - 詳細は [rtc_stats の払い出し](https://sora-doc.shiguredo.jp/AUTH_WEBHOOK_RETURN#9e5912) を確認してください - [20211215.ListChannelUserAgentStats](https://sora-doc.shiguredo.jp/OBSOLETE_API_USER_AGENT_STATS#listchanneluseragentstats) API を廃止しました- 今後は [20211215.ListChannelRtcStats](https://sora-doc.shiguredo.jp/API_RTC_STATS#listchannelrtcstats) API をご利用ください - [20211215.GetUserAgentStats](https://sora-doc.shiguredo.jp/OBSOLETE_API_USER_AGENT_STATS#getuseragentstats) API を廃止しました- 今後は [20211215.GetRtcStats](https://sora-doc.shiguredo.jp/API_RTC_STATS#getrtcstats) API をご利用ください - [CHANGE] WHIP の TURN 機能を有効にしました- 2024 年 7 月リリースの OBS 30.2 より以前の OBS が接続できなくなります - [CHANGE] WHEP の TURN 機能を有効にしました - [CHANGE] セッション単位での最大同時接続数制限機能の `trial_max_connections` は非推奨となります。- 今後は [max_connections](https://sora-doc.shiguredo.jp/SESSION_WEBHOOK#session-webhook-max-connections) をご利用ください - `trial_max_connections` は 2025 年 12 月に廃止します - [CHANGE] スポットライト機能利用時に、フォーカスなしの音声転送の上限レートを指定する [default_spotlight_unfocus_audio_rate_limit](https://sora-doc.shiguredo.jp/SORA_CONF#sora-conf-default-spotlight-unfocus-audio-rate-limit) のデフォルト値を 2 から 5 に引き上げました- この変更により多人数で同時に発話があった際の音声がより快適になります - [CHANGE] スポットライト機能利用時に、フォーカスなしの音声転送の上限レートを指定する [default_spotlight_unfocus_audio_rate_limit](https://sora-doc.shiguredo.jp/SORA_CONF#sora-conf-default-spotlight-unfocus-audio-rate-limit) の上限を 20 に引き上げました - [CHANGE] RTP ヘッダー拡張 `abs-send-time` の利用を廃止しました - [ADD] 映像コーデックに指定できるパラメーターを追加しました- AV1 コーデックの追加パラメーター- `level_idx` - `tier` - H.265 コーデックの追加パラメーター- `profile_id` - `tier_flag` - `tx_mode` - パラメーターの指定可能な値は [WebSocket 経由のシグナリング](https://sora-doc.shiguredo.jp/SIGNALING) の内容をご確認ください - [ADD] グループ機能の追加により、以下のデータに `group_id` の項目を含めるようにしました- `session_id` を含む Sora ウェブフックのリクエスト (session.created のウェブフックは除きます) - `session_id` を含む Sora API の戻り値 - `session_id` を含む録画メタデータ - なお、Sora Cloud では外部ウェブフック URL からの払い出しによる `group_id` の指定はできません - [ADD] セッション単位でのクライアント ID 重複時の既存接続の追い出しに対応しました- セッションウェブフック [session.created](https://sora-doc.shiguredo.jp/SESSION_WEBHOOK#session-webhook-session-created) の払い出しにセッション単位での重複するクライアント ID を持つコネクションが認証成功した際の挙動を指定する `duplicate_client_id` を払い出せるようになりました - 未指定の場合は `allow` で今まで通り重複を許容します - `evict` を払い出した場合は、既存の接続を破棄し、新規接続を受け入れます- この時、クライアント ID の重複によるコネクションを破棄した際 [connection.destroyed](https://sora-doc.shiguredo.jp/EVENT_WEBHOOK#event-webhook-connection-destroyed) の `data.reason` に `duplicate_client_id` を含めるようにしました - [ADD] 帯域推定機能を追加しました- 以下を参考に実装し、様々な情報を利用して帯域推定を行います- [RFC 8888 - RTP Control Protocol (RTCP) Feedback for Congestion Control](https://datatracker.ietf.org/doc/html/rfc8888) - [RFC 8869 - Evaluation Test Cases for Interactive Real-Time Media over Wireless Networks](https://datatracker.ietf.org/doc/html/rfc8869) - [RFC 8868 - Evaluating Congestion Control for Interactive Real-Time Media](https://datatracker.ietf.org/doc/html/rfc8868) - [RFC 8867 - Test Cases for Evaluating Congestion Control for Interactive Real-Time Media](https://datatracker.ietf.org/doc/html/rfc8867) - [RFC 8836 - Congestion Control Requirements for Interactive Real-Time Media](https://datatracker.ietf.org/doc/html/rfc8836) - [RTP Extensions for Transport-wide Congestion Control](https://datatracker.ietf.org/doc/html/draft-holmer-rmcat-transport-wide-cc-extensions-01) - [A Google Congestion Control Algorithm for Real-Time Communication](https://datatracker.ietf.org/doc/html/draft-ietf-rmcat-gcc-02) - [BBR: Congestion-Based Congestion Control - ACM Queue](https://queue.acm.org/detail.cfm?id=3022184) - [CHANGE] ネットワーク状態のシグナリング通知機能を変更しました- 実験的機能として提供していたシグナリング通知の `network.status` の内容が変更になりました - Sora に帯域推定機能を実装したことにより、 Sora が把握した帯域推定の情報を視聴側に返すようになりました - これにより、視聴側はより詳細なネットワーク状況を知ることができるようになりました - 今回の変更により、送信のみへの通知は行われなくなりますのでご注意ください - 詳細は Sora のリリースノートおよび [ネットワークのシグナリング通知](https://sora-doc.shiguredo.jp/SIGNALING_NOTIFY#58a82d) の内容をご確認ください - [ADD] ICE コネクションステート機能を追加しました- 認証成功時の払い出しに ICE コネクションステートの `disconnected` 状態へ遷移するタイムアウトを指定する [ice_connection_state_disconnected_timeout_ms](https://sora-doc.shiguredo.jp/AUTH_WEBHOOK_RETURN#authz-ice-connection-state-disconnected-timeout-ms) を追加しました - 認証成功時の払い出しに ICE コネクションステートの `failed` 状態へ遷移するタイムアウトを指定する [ice_connection_state_failed_timeout_ms](https://sora-doc.shiguredo.jp/AUTH_WEBHOOK_RETURN#authz-ice-connection-state-failed-timeout-ms) を追加しました # FAQ ## 一般 ### Sora Cloud の最新情報はどこで共有されていますか? Sora Cloud に関する最新情報は [時雨堂 Discord サーバー](https://discord.gg/shiguredo) の `#sora-cloud-announce` で共有しています。 障害情報などもこちらで共有しておりますので、ご利用の際はご参加ください。 ### サポートは提供していますか? チケットシステムによるサポートを提供しています。 詳細は [サポート](support.html) をご確認ください。 ### ダッシュボードはありますか? からログインして利用できます。 ### 利用する帯域の上限を設定したいです 帯域の上限は設定できませんので、利用する際にはご注意ください。 実際の利用状況は管理コンソール画面から確認できます。 ### 利用する同時接続数の上限を設定したいです チャネル単位で最大同時接続数を指定することは可能です。組織全体の最大同時接続数を指定することはできません。 実際の同時接続数は管理コンソール画面から確認できます。 詳細は [max_channel_connections](project_api_access_token.html#dd1c98) をご確認ください。 ### 利用できる最大同時接続数はいくつですか? 最大同時接続数に制限はありません。同時接続数が 500 を超える見込みがある場合は、事前にお知らせください。 ### 利用できる最大帯域はどの程度ですか? 最大で 40 Gbps 程度まで利用できます。帯域が 1 Gbps を超える見込みの場合は、事前にお知らせください。 ### プロジェクトは最大いくつまで作成できますか? プロジェクトは最大 5 つまで作成できます。 6 つ以上作成したい場合はサポートにお問い合わせください。 ### プロジェクトは削除できますか? プロジェクトの削除はできません。 ただし、作成できるプロジェクトの数を増やすことは可能ですので、サポートにお問い合わせください。 ### 組織にはアカウントをいくつまで登録できますか? 1 つの組織で最大 5 つのアカウントを登録できます。 6 つ以上作成したい場合はサポートにお問い合わせください。 ### 一つのメールアドレスで複数の組織に属すことはできますか? できます。 複数の組織に属している場合、 メール認証後にログインする組織を選択します。 ## 録画 ### ウェブフックの戻り値で recording: true を設定したのですが録画が開始されません 以下に該当する場合は録画が開始されません。設定を確認してください。 - プロジェクトにオブジェクトストレージが設定されていない - 録画開始時に指定するパラメーターが不足している、または指定できない値を設定している 設定内容や指定するパラメーターについては [録画](recording.html) をご確認ください。 ## 設定 ### ウェブフック URL を登録したいです ウェブフック URL はプロジェクト単位で登録が行えます。 - Sora 認証ウェブフック - Sora セッションウェブフック - Sora イベントウェブフック - Sora 統計ウェブフック - Sora Cloud ウェブフック 管理コンソール画面のプロジェクトから登録してください。 ### 録画ファイルをアップロードするオブジェクトストレージを登録したいです オブジェクトストレージの登録は管理コンソール画面からプロジェクト単位で行えます。 管理コンソール画面のプロジェクトから登録してください。 ### 録画ファイルをアップロードするオブジェクトストレージを無効にしたいです 登録したオブジェクトストレージの無効化は管理コンソール画面からプロジェクト単位で行ってください。 管理コンソール画面のプロジェクトから設定を無効にしてください。 ### 管理コンソール画面からチャネル単位での最大接続数を指定したいです プロジェクトの Edit Project から Channel の max_channel_connections で値を指定してください。 ![image](https://i.gyazo.com/09423a6f4095c61d4ac6b3798a10846f.png) この値は、このプロジェクトで利用するチャネルごとの最大同時接続数です。 この値を超えて接続することはできません。 もしアクセストークンで max_channel_connections をこの値以上に設定したとしても、この値が利用されます。 ## Sora Sora については [WebRTC SFU Sora ドキュメント](https://sora-doc.shiguredo.jp) をご確認ください。 ### Sora の API を利用したいです Sora の API については一部利用できない機能があります。 詳細については [Sora API](sora_api.html) をご確認ください。 ### Sora のログを取得したいです [ログ API](project_api_log.html) を利用することで Sora に関係するログを過去 30 日まで確認できます。 もしそれ以上の過去のログが必要な場合は、ウェブフックリクエストで送られてくる内容を保存してください。 > **注釈** > > 今後は管理コンソールでも Sora のログを確認できるようにする予定です。 ### IPv6 は利用できますか? 利用できます。 ### ポート番号は何番を利用しますか? Sora Cloud は以下のポート番号を利用しますので、 ファイアーウォールの設定などが必要な場合があります。 - TCP は 443 番のみを利用します - UDP は 50000-60000 番を利用します クライアントは UDP が利用できない場合、TCP で通信を行います。 その場合は不安定な回線などを利用した場合、 音声が途切れ途切れになったり、映像が止まったり、乱れたりすることが多くなる場合があります。 可能な限り UDP が利用できるネットワーク環境下でご利用ください。 ### 長時間接続を行う場合のおすすめの設定はありますか? `data_channel_signaling` と `ignore_disconnect_websocket` を `true` にすることをおすすめします。 この設定を有効にすることで WebSocket による切断検知は利用できなくなりますが、 WebSocket が切断されてもクライアントと Sora の接続は継続します。 ## Hisui Cloud ### Hisui Cloud はいくらですか? 無料でご利用いただけます。 ### レイアウトの指定はできますか? 現時点ではできませんが、将来的に利用できるようにする予定です。 ### H.264/AAC MP4 での合成出力はできますか? 現時点では予定していません。チケットにてご相談ください。 ### MP4 形式のファイルは合成入力できますか? 現時点ではできませんが、将来的に利用できるようにする予定です。 ## 課金 ### 見積書の発行は可能ですか? 実際のご利用状況に合わせた従量料金制のため、見積書の発行はできません。 ### 請求書の支払期限はいつですか? 原則としてご利用月の翌月末日までとなります。 料金は毎月月末締めとし、翌月 5 営業日までに請求書を発行します。 請求書発行月の末日までにお振込みをお願いいたします。 ### 利用料金の支払いは毎月ごとのみですか? 毎月ごとの請求、お支払いとなります。 後払いとなりますので、 1 ヶ月ごとにお支払いをお願いしております。 ### 請求アドレスを変更したい 請求アドレスの変更については sora-cloud at shiguredo.jp までメールにてご連絡ください。 (このメールアドレスへの特定電子メールの送信を拒否いたします) ## サポート ### チケットは同時にいくつまでオープンできますか? "General Support" カテゴリのチケットには最大で 3 つまでの上限があります。 4 つ目をオープンするには、先にオープンしているチケットをクローズする必要があります。 チケットの同時オープン数は増やすことはできません。 ### チケットのクローズはどのタイミングで行われますか? お客様からクローズして問題ない旨のご連絡があるまではオープンにしたままとなります。 ### チケットのリオープンはできますか? 一度クローズしたチケットのリオープンはできません。 新しくチケットのオープンをお願いします。 # 料金 ## 概要 Sora Cloud は利用時間や転送量ではなく、月ごとの最大同時接続数と最大利用帯域で料金が決定します。 最大同時接続数や最大利用帯域とは、その月の総使用量ではなく、その月の中で最も多かった同時接続数および利用帯域を指します。 ## 基本料金 **基本料金**: 月 5,000 円 1 ヶ月間まったく利用がなかった場合でも基本料金 5,000 円が発生します。 ## 従量料金 最大同時接続数と最大利用帯域による従量料金モデルです。 **最大同時接続数**: 最大同時接続数 10 あたり 15,000 円からで、利用は 5,000 同時接続程度まで可能です - 最大同時接続数が 10 増えるごとに + 15,000 円 **最大利用帯域**: 最大利用帯域 100 Mbps あたり 30,000 円からで、利用は 20 Gbps 程度まで可能です - 最大利用帯域が 100 Mbps 増えるごとに + 30,000 円 > **注釈** > > - 同時接続数とは、認証に成功し、 WebRTC の確立に成功して接続している数です。 > - 利用帯域は上り (Ingress) と下り (Egress) の合計で計算されます。 ### 料金例 1 その月の最大同時接続数が 18、最大利用帯域が 250 Mbps だった場合は ... 5,000 円 (基本料金) + 30,000 円 (最大同時接続数 20 の従量料金) + 90,000 円 (最大利用帯域 300 Mbps の従量料金) で 125,000 円の料金が発生します。 ### 料金例 2 その月の最大同時接続数が 7、最大利用帯域が 145 Mbps だった場合は ... 5,000 円 (基本料金) + 15,000 円 (最大同時接続数 10 の従量料金) + 60,000 円 (最大利用帯域 200 Mbps の従量料金) で 80,000 円の料金が発生します。 ## 料金表 **基本料金**: 5,000 円 **最大同時接続数の従量料金**: 10 同時接続ごとに + 15,000 円 **最大利用帯域の従量料金**: 100 Mbps ごとに + 30,000 円 * - 料金表 - 最大利用帯域 100 Mbps - 最大利用帯域 200 Mbps - 最大利用帯域 300 Mbps * - 最大同時接続数 10 - ¥50,000 - ¥80,000 - ¥110,000 * - 最大同時接続数 20 - ¥65,000 - ¥95,000 - ¥125,000 * - 最大同時接続数 30 - ¥80,000 - ¥110,000 - ¥140,000 * - 最大同時接続数 40 - ¥95,000 - ¥125,000 - ¥155,000 * - 最大同時接続数 50 - ¥110,000 - ¥140,000 - ¥170,000 * - 最大同時接続数 100 - ¥185,000 - ¥215,000 - ¥245,000 - 利用がなかった場合 (最大同時接続数 0 かつ最大利用帯域 0 bps) は、基本料金のみの 5,000 円となります - 詳細な料金は [こちらの料金表 (PDF)](https://sora-cloud.shiguredo.jp/pdfs/price_list.pdf) を参照してください。 ## 最大同時接続数 500 、または最大利用帯域 1 Gbps 以上の利用 もし、最大同時接続数が 500、または最大利用帯域が 1 Gbps 以上の接続が発生する可能性がある場合は、事前にチケットをオープンし、共有をお願いいたします。 ## チャネル単位での同時接続数固定 JWT の [max_channel_connections](project_api_access_token.html#dd1c98) クレームを利用することで、チャネル単位での同時接続数を制限することが可能です。 ## 上限固定 組織全体での同時接続数や利用帯域の上限を固定することはできません。注意してご利用ください。 ## 注意 - API の呼び出しに制限はありませんが、想定よりも多くの API 呼び出しが発生した場合は個別にご連絡いたします - ウェブフックの通知に制限はありませんが、想定よりも多くの通知が発生した場合は個別にご連絡いたします ## ログ保存期間の制限 - ログ保存は直近 30 日までです- 30 日経過したログは取得できません ## シーケンス図 ### 同時接続数が +1 されるタイミング ```mermaid sequenceDiagram autonumber participant client as クライアント participant sora as WebRTC SFU Sora participant cloud as Sora Cloud client->>sora: "type": "connect" sora->>+cloud: 認証ウェブフック note over cloud: アクセストークン検証成功 cloud-->>-sora: 200 OK
"allowed": true note over cloud: この時点ではまだ同時接続数に + 1 はされない sora->>client: "type": "offer" client->>sora: "type": "answer" note over client,sora: WebRTC 確立 sora-->>+cloud: イベントウェブフック
"type": "connection.created" note over cloud: この時点で同時接続数に +1 される cloud-->>-sora: 200 OK ``` ### 同時接続数が -1 されるタイミング #### クライアントの正常終了時 ```mermaid sequenceDiagram autonumber participant client as クライアント participant sora as WebRTC SFU Sora participant cloud as Sora Cloud note over client,sora: WebRTC 確立 client->>+sora: "type": "disconnect" sora->>+cloud: イベントウェブフック
"type": "connection.destroyed" note over cloud: この時点で同時接続数が -1 される cloud-->>-sora: 200 OK sora->>-client: シグナリング切断 ``` #### クライアントの異常終了時 ```mermaid sequenceDiagram autonumber participant client as クライアント participant sora as WebRTC SFU Sora participant cloud as Sora Cloud note over client,sora: WebRTC 確立 sora->>client: 2.5 秒間隔で死活確認 note left of sora: クライアントから応答なし sora->>client: 1 秒間隔で 5 秒間死活確認 note left of sora: クライアントから応答なし sora->>client: 50 ミリ秒間隔で 10 秒間死活確認 note left of sora: クライアントから応答なし note over sora: 切断済みと判断 sora->>cloud: イベントウェブフック
"type": "connection.destroyed" note over cloud: この時点で同時接続数が -1 される cloud-->>sora: 200 OK ``` # 制限 ## 一括録画の有効期限 一括録画は最大で 3 時間 (10800 秒) までしか録画できません。 有効期限の指定は必須です。 1 以上、10800 以下の値を指定してください。 この値を超える場合は [録画ファイル分割出力のみ](https://sora-doc.shiguredo.jp/RECORDING#3f7b27) を利用してください。 ## Sora Cloud では利用できない WebRTC SFU Sora の機能 **もし利用したい場合は WebRTC SFU Sora パッケージ版の利用をご検討ください** - `sora.conf` の設定は変更できません - `音声ストリーミング機能` は利用できません- 今後 Suzu クラウド版とともに提供予定です - `統計エクスポート機能` は利用できません - `RTP 転送 API` は利用できません - 認証時の払い出しで `ipv4_address` は指定できません - 認証時の払い出しで `ipv6_address` は指定できません - 認証時の払い出しで `turn_fqdn` は指定できません - 認証時の払い出しで `turn_tls_fqdn` は指定できません - 録画機能の一括録画と分割録画の両方を指定することはできません - 録画機能の一括録画は期限指定に制限があります ### 現時点では利用できない機能 - `シグナリング通知メタデータ拡張機能` が利用できません # サポート **問い合わせは日本語でお願いします** ## Sora Cloud や Sora について問い合わせをする ログイン後、管理コンソールの Support タブからチケットをオープンしてください。 関連しない複数の問い合わせがある場合は、 **必ず** チケットを分けて記載してください。 同時にオープンできる "General Support" カテゴリのチケットは最大で 3 つです。 4 つ以上の問い合わせがある場合は、いずれかのチケットがクローズされてからオープンしてください。 ## カテゴリについて ### General Support Sora Cloud や Sora の問い合わせはこちらのカテゴリを選択してください。 ### Account Cancellation > **重要** > > このカテゴリはチケットのオープン数制限を受けません。 解約に関する問い合わせはこちらのカテゴリを選択してください。 ### Billing Questions > **重要** > > このカテゴリはチケットのオープン数制限を受けません。 請求に関する問い合わせはこちらのカテゴリを選択してください。 ## チケットのクローズについて お客様側でチケットをクローズすることはできません。 そのため、お問い合わせの問題が解決した場合は、お手数ですがクローズしてよい旨をご連絡ください。 ## チケットのリオープンについて お客様側で過去のチケットをリオープンすることはできません。 そのため、お問い合わせがある場合は、お手数ですがあらためて新規でチケットをオープンしてください。 ## お受けできない問い合わせ サポートは Sora Cloud および Sora の使い方や挙動に関してのみお受けしています。 以下の項目についてはサポート対象外となりますのでご了承ください。 - Sora Cloud および Sora を利用したサービスの設計や開発 - nginx 全般 - WebRTC 全般 - Sora SDK 全般 - WebRTC Native Client Momo - WebRTC Load Testing Tool Zakuro - Recording Composition Tool Hisui - WebRTC Stats Collector Kohaku - Audio Streaming Gateway Suzu - 各種クラウドサービス # Sora 開発ツール ## 概要 Sora Cloud では Sora に内蔵されている Sora 開発ツールの代わりとして、 公開されている Sora DevTools を簡単に利用する仕組みを提供しています。 > **注釈** > > 2025 年 6 月以降、Sora Cloud Console から発行される Sora DevTools の URL が変更されています。詳細は [お知らせ](index#386001) をご確認ください。 > **注意** > > Sora 開発ツールの録画開始・停止やサイマルキャストの rid 切り替えなど、Sora API を利用する一部の機能は使用できません。 ## Sora 開発ツール URL の作成 プロジェクトの ... をクリックして Create Access Token をクリックしてください。 ![image](https://i.gyazo.com/f98ab2e1baba285bdae6b9e4663a9909.png) チャネル名に好きな文字列を入力してください。ここでは sora-devtools としています。 ![image](https://i.gyazo.com/896bdfcb147e168ac8686ee5e7fc8839.png) 文字列を入力したら Create Access Token をクリックしてください。 Access Token に設定する項目の内容は以下のとおりです。 **channel_name** : channel_id の prefix です。後ろに project_id がついて channel_id になります。 **expiration_time** : JWT の exp でアクセストークンの利用期限です。 **not_before** : JWT の nbf でアクセストークンが利用可能になる日時です。 **role** : この値を指定した場合、指定した role しか利用できなくなります。 **max_channel_connections** : この値を指定した場合、指定した値までしか接続できなくなります。 ## Sora 開発ツールを使って接続する ![image](https://i.gyazo.com/ae346c5f841f8ec5d18dd487365aba14.png) Sora DevTools の URL をクリップボードにコピーしたら、ブラウザに貼り付けてください。 ![image](https://i.gyazo.com/a832740c092f2a173c0129740e43caa8.png) connect を押すことで接続されます。もう一つタブを開いて同じように connect を押してください。 それぞれの音声や映像が配信されたら成功です。 # メンバー Sora Cloud は複数のメンバーで利用することができます。 共同で利用するメンバーのメールアドレス 1 つに対して 1 つのアカウントが作成され、 1 つの組織で最大 5 つまでアカウントが登録できます。 ## メンバーの招待 管理コンソールにログインできるアカウントは、Settings メニューの Member から招待できます。 ### アカウントが無い場合 招待されたメンバーが Sora Cloud のアカウントをまだ持っていない場合、 届いた確認メールから URL をクリックしてアカウント登録を行ってください。 ### アカウントがある場合 招待されたメンバーがすでに Sora Cloud のアカウントを持っていて別の組織に属している場合、 確認メールから URL をクリックすることで、ログイン時に新しく招待された組織が選択できるようになります。 ## メンバーのロール変更 > **重要** > > 現時点では対応していません。今後対応予定です。 ### Owner 現在提供している唯一のロールです。すべての権限を保持しています。 # 認証 ## 概要 Sora Cloud では、JWT 形式のアクセストークンを利用して認証を行います。 Sora の `"type": "connect"` メッセージ送信時に、 `metadata` の `access_token` にアクセストークンを設定してください。 ## metadata `type: connect` の `metadata` に `"access_token": ""` を含めます。 ```json { "type": "connect", "role": "sendrecv", "channel_id": "sora-cloud@shiguredo#1490", "multistream": "true", "metadata": { "access_token": "" } } ``` ## JWT 仕様 **typ**: JWT **alg**: HS256 ## JWT 利用の注意点 Sora Cloud では利用する特定のアクセストークンを失効させる機能はなく、失効が必要な場合は API キーを再生成するしかありません。 そのため、本番環境向けには必ず `nbf` / `exp` を付けて短い時間しか利用できないトークンを発行するようにしてください。 Sora Cloud の認証では、JWT で利用可能なクレームは、次の [利用可能な登録済みクレーム](auth.html#7888a8) のみです。 認証ウェブフックを設定し、プロジェクト側でのチェックを行うようにしてください。 ## 利用可能な登録済みクレーム ### exp **クレーム**: exp **型**: integer **要求**: オプション **RFC**: [4.1.4. "exp" (Expiration Time) Claim](https://www.rfc-editor.org/rfc/rfc7519.html#section-4.1.4) トークンが利用できなくなる時間 (UTC) を指定できます。 ### nbf **クレーム**: nbf **型**: integer **要求**: オプション **RFC**: [4.1.5. "nbf" (Not Before) Claim](https://www.rfc-editor.org/rfc/rfc7519.html#section-4.1.5) トークンが利用できるようになる時間 (UTC) を指定できます。 ### jti **クレーム**: jti **型**: string **要求**: オプション ## オプションプライベートクレーム ### channel_id > **危険** > > `channel_id クレーム` を指定しない場合、すべてのチャネルにアクセス可能になるため、本番環境では `channel_id クレーム` を指定してください。 **クレーム**: channel_id **型**: string **要求**: オプション channel_id クレームが含まれていた場合、Sora Cloud が認証時に channel_id と一致しているかどうかを確認します。 ### role **クレーム**: role **型**: string **要求**: オプション role クレームが含まれていた場合、Sora Cloud が認証時に role と一致しているかどうかを確認します。 指定可能な文字列は sendrecv / recvonly / sendonly です。 ### max_channel_connections **クレーム**: max_channel_connections **型**: integer **要求**: オプション 認証時にチェックするチャネルの最大接続数を指定できます。 ## JWT 生成例 プロジェクトの API キーを署名鍵として JWT を生成し、必要に応じて `channel_id`、 `role`、 `exp`、 `nbf`、 `jti` などのクレームを設定してください。 以下に、Python / Go でアクセストークンを生成する最小の例を示します。用途に応じて必要なクレームを追加してください。 ### Python `PyJWT` を利用する例です。 ```python import datetime import uuid import jwt api_key = "YOUR_API_KEY" now = datetime.datetime.now(datetime.timezone.utc) payload = { "channel_id": "example-channel@YOUR_PROJECT_ID", "role": "sendrecv", "nbf": int(now.timestamp()), "exp": int((now + datetime.timedelta(minutes=30)).timestamp()), "jti": str(uuid.uuid4()), } access_token = jwt.encode(payload, api_key, algorithm="HS256") print(access_token) ``` ### Go `github.com/golang-jwt/jwt/v5` を利用する例です。 ```go package main import ( "fmt" "time" "github.com/golang-jwt/jwt/v5" "github.com/google/uuid" ) func main() { apiKey := "YOUR_API_KEY" now := time.Now().UTC() claims := jwt.MapClaims{ "channel_id": "example-channel@YOUR_PROJECT_ID", "role": "sendrecv", "nbf": now.Unix(), "exp": now.Add(30 * time.Minute).Unix(), "jti": uuid.NewString(), } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) accessToken, err := token.SignedString([]byte(apiKey)) if err != nil { panic(err) } fmt.Println(accessToken) } ``` ## 参考 - [RFC 7519: JSON Web Token (JWT)](https://www.rfc-editor.org/rfc/rfc7519.html) - [JSON Web Token (JWT)](https://www.iana.org/assignments/jwt/jwt.xhtml) - [JSON Web Tokens - jwt.io](https://jwt.io/) ## シーケンス図 ### アクセストークンでの認証成功 - アクセストークン生成 API 利用あり - Sora 認証ウェブフックの設定あり ```mermaid sequenceDiagram autonumber participant client as クライアント participant sora as WebRTC SFU Sora participant cloud as Sora Cloud participant app as アプリケーションサーバー app->>cloud: アクセストークン API
cloud-->>app: 200 OK
"access_token": "" app->>client: Sora Cloud 認証用の JWT 払い出し client->>sora: "type": "connect"
"metadata": {"access_token": ""} sora->>cloud: 認証ウェブフック note over cloud: アクセストークン検証成功 cloud->>app: 認証ウェブフック app-->>cloud: 200 OK
"allowed": true cloud-->>sora: 200 OK
"allowed": true sora->>client: "type": "offer" client->>sora: "type": "answer" note over client,sora: WebRTC 確立 ``` # ウェブフック ## 概要 Sora Cloud では Sora のウェブフックを利用できます。指定した URL にウェブフックリクエストを送信します。 ## 制限 ### 1 プロジェクト 1 ウェブフック URL ウェブフックの通知先 URL は 1 プロジェクト当たり、それぞれのウェブフックにつき 1 つずつです。 ### 利用できるウェブフック送信先のポート番号 - ウェブフック送信先が HTTP の場合に利用できるポート番号は 80 番のみ - ウェブフック送信先が HTTPS の場合に利用できるポート番号は 443 番のみ ## タイムアウト ウェブフックのタイムアウトは 10 秒です。これを超えた場合は送信側から切断を行います。 タイムアウトが頻発する場合は一時的にウェブフックでの送信を停止する場合があります。 タイムアウトした場合は認証処理はエラーとして返します。 ## Sora 認証ウェブフック [認証ウェブフック](https://sora-doc.shiguredo.jp/AUTH_WEBHOOK) - 戻りのステータスコードは `200 OK` を期待します ### 払い出し可能な項目 > **注意** > > プロジェクトにオブジェクトストレージ設定が行われていない場合、または録画機能の [制限](recording.html#4a8cb2) に該当する指定を行っていた場合、録画は開始されません。 - client_id - bundle_id - audio - audio_codec_type - audio_bit_rate - audio_opus_params - audio_lyra_params - video - video_codec_type - video_bit_rate - data_channel_signaling - ignore_disconnect_websocket - ignore_max_connections - data_channels - metadata - event_metadata - recording - recording_expire_time - recording_split_only - recording_split_duration - recording_metadata - recording_format - signaling_notify - signaling_notify_metadata - signaling_notify_ice_connection_state - simulcast - simulcast_auto_rids - simulcast_rpc_rids - simulcast_request_rid - simulcast_rid- 2027 年 12 月に廃止します - 代わりに `simulcast_request_rid` を利用してください - simulcast_encodings- AV1 でサイマルキャストを利用した録画をする場合は `scalabilityMode` に `L1T1` を設定してください - simulcast_multicodec - simulcast_codecs - spotlight - spotlight_number- **この払い出しは非推奨です** - Sora セッションウェブフックの `"type": "session.created"` の戻り値で `spotlight_number` を払い出してください - spotlight_encodings- AV1 でスポットライトを利用した録画をする場合は `scalabilityMode` に `L1T1` を設定してください - rtc_stats - video_vp9_params- profile_id - video_av1_params- profile - level_idx - tier - video_h264_params- profile_level_id - b_frame - video_h265_params- level_id - b_frame - profile_id - tier_flag - tx_mode - forwarding_filters - recording_block - turn_tcp_only - turn_tls_only - connection_lifetime - playout_delay_min_delay - playout_delay_max_delay - cluster_affinity - ice_connection_state_disconnected_timeout_ms - ice_connection_state_failed_timeout_ms - static_ip_address- [固定 IP アドレス接続機能(オプション)](static_ip.html) をご契約中のお客様のみ利用できます ## Sora セッションウェブフック [セッションウェブフック](https://sora-doc.shiguredo.jp/SESSION_WEBHOOK) 戻りのステータスコードは `200 OK` を期待します。 ### 払い出し可能な項目 > **注意** > > プロジェクトにオブジェクトストレージ設定が行われていない場合、または録画機能の [制限](recording.html#4a8cb2) に該当する指定を行っていた場合、録画は開始されません。 セッションウェブフックの `"type": "session.created"` の戻り値で以下の項目を払い出すことが可能です。 - session_metadata - session_lifetime - forwarding_filters - spotlight_number - max_connections - duplicate_client_id - recording - recording_metadata - recording_expire_time - recording_split_duration - recording_split_only - recording_format ## Sora イベントウェブフック [イベントウェブフック](https://sora-doc.shiguredo.jp/EVENT_WEBHOOK) - 戻りのステータスコードは `200 OK` を期待します ## Sora 統計ウェブフック [統計ウェブフック](https://sora-doc.shiguredo.jp/STATS_WEBHOOK) - 戻りのステータスコードは `200 OK` を期待します ## Sora Cloud ウェブフック ### 録画ファイルアップロード時のウェブフック送信 [録画ファイルアップロード時のウェブフック送信](recording.html#e46279) - 戻りのステータスコードは `200 OK` を期待します #### recording-report.uploaded Sora Cloud が録画レポートファイルのアップロード完了時に通知します。 #### archive.uploaded Sora Cloud が一括録画時の録画ファイルとメタデータファイルのアップロード完了時に通知します。 #### split-archive.uploaded Sora Cloud が分割録画時の分割録画ファイルとメタデータファイルのアップロード完了時に通知します。 #### split-archive-end.uploaded Sora Cloud が分割録画時の録画終了ファイルのアップロード完了時に通知します。 ### Hisui Cloud のウェブフック通知 [Hisui Cloud のウェブフック送信](hisui_cloud.html#a62cea) - 戻りのステータスコードは `200 OK` を期待します #### hisui-cloud-job.started 録画合成開始時に通知します。 #### hisui-cloud-job.composited 録画合成成功時に通知します。 #### hisui-cloud-job.uploaded 録画合成ファイルのアップロード成功時に通知します。 #### hisui-cloud-job.completed 録画合成処理が完了時に通知します。 #### hisui-cloud-job.canceled 処理キャンセル時に通知します。 #### hisui-cloud-job.failed 処理失敗時に通知します。 ## ウェブフックの IP アドレス Sora Cloud のウェブフックは [Cloudflare Workers](https://workers.cloudflare.com/) を利用して実現しています。 そのため [Cloudflare の IP アドレス範囲](https://www.cloudflare.com/ips/) からウェブフックを通知します。 ## 署名 Sora Cloud が通知する Sora のウェブフックの HTTP ヘッダーにはそのウェブフックの署名が付与されています。 HTTP ヘッダー名 `sora-cloud-signature` にそのウェブフックの生成時間と JSON ペイロードに対する署名が入っています。 ### 署名の検証 **t**: タイムスタンプ **v1**: 署名 ``` sora-cloud-signature: t=1692774577, v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd ``` ### 署名ペイロード > **重要** > > 署名には必ずプライマリー API キーが利用されます。 - タイムスタンプ (文字列) - 文字 . - JSON ペイロード (リクエストボディ) 署名疑似コード: ``` signature = hmac(sha256, primary_api_key, ".").hexdigest() ``` signature と v1 の値を比較することで署名の検証が可能になります。 タイムスタンプは Unix time を利用しています。 ## 署名検証サンプルコード ### Python ```python import hashlib import hmac import http.server import json import socketserver # プロジェクトのプライマリー API キーを指定してください API_KEY = 'api-key' PORT = 8000 class AuthWebhookResponder(http.server.BaseHTTPRequestHandler): def do_POST(self): content_length = int(self.headers['content-length']) sora_cloud_sig = self.headers['sora-cloud-signature'] json_string = self.rfile.read(content_length).decode('utf-8') body = json.loads(json_string) print(sora_cloud_sig) print(json_string) print(json.dumps(body, indent=2)) verify_signature(API_KEY, sora_cloud_sig, json_string) # 認証を許可する JSON を返す allowed = {"allowed": True} s = json.dumps(allowed) self.send_response(200) self.send_header('Content-Length', len(s)) self.end_headers() self.wfile.write(s.encode()) def verify_signature(api_key, sora_cloud_signature_header_value, request_json_string): # sora-cloud-signature ヘッダーの値からタイムスタンプと署名を取り出す splited = sora_cloud_signature_header_value.split(',') signagure_timestamp = splited[0].split('=')[1] header_signature_value = splited[1].split('=')[1] # 署名する文字列を生成する # <タイムスタンプ>.<リクエストJSON> msg = f'{signagure_timestamp}.{request_json_string}' # 署名する signature = hmac \ .new( key=bytes(api_key,'utf-8'), msg=bytes(msg, 'utf-8'), digestmod=hashlib.sha256) \ .hexdigest() # ヘッダーの値と署名した値が一致することを確認する assert(header_signature_value == signature) with socketserver.TCPServer(("", PORT), AuthWebhookResponder) as httpd: print("serving at port", PORT) httpd.serve_forever() ``` ## ローカル開発環境へウェブフックを送信する ローカルの開発環境に Sora Cloud からウェブフックを直接送信することは、ネットワーク上の制約によりできません。 そのため ngrok の利用をおすすめします。 ngrok は無料で使い始められます。 ### ngrok を利用する **URL**: ngrok アカウントが必要です。 また、固定したエンドポイント URL を利用するには、 Pro プラン ($20/月) 以上のプランに入る必要があります。 ## シーケンス図 ### Sora 関連ウェブフック - Sora 認証ウェブフック - Sora セッションウェブフック- session.created - session.destroyed - Sora イベントウェブフック- connection.created - connection.updated - connection.destroyed ```mermaid sequenceDiagram participant client as クライアント participant sora as WebRTC SFU Sora participant cloud as Sora Cloud participant app as アプリケーションサーバー client->>sora: "type": "connect" sora->>+cloud: 認証ウェブフック note over cloud: アクセストークンを確認 cloud->>+app: 認証ウェブフック app-->>-cloud: 200 OK
"allowed": true cloud-->>-sora: 200 OK
"allowed": true sora->>client: "type": "offer" client->>sora: "type": "answer" note over client,sora: WebRTC 確立 sora->>+cloud: セッションウェブフック
"type": "session.created" cloud->>+app: セッションウェブフック
"type": "session.created" app-->>-cloud: 200 OK cloud-->>-sora: 200 OK sora->>+cloud: イベントウェブフック
"type": "connection.created" cloud->>+app: イベントウェブフック
"type": "connection.created" app-->>-cloud: 200 OK cloud-->>-sora: 200 OK note over client,sora: 1 分経過 sora->>+cloud: イベントウェブフック
"type": "connection.updated" cloud->>+app: イベントウェブフック
"type": "connection.updated" app-->>-cloud: 200 OK cloud-->>-sora: 200 OK client->>sora: "type": "disconnect" sora->>+cloud: イベントウェブフック
"type": "connection.destroyed" cloud->>+app: イベントウェブフック
"type": "connection.destroyed" app-->>-cloud: 200 OK cloud-->>-sora: 200 OK sora->>client: シグナリング切断 ``` ### Sora Cloud 関連ウェブフック - Sora イベントウェブフック- recording.started - recording.report - archive.started - archive.available - Sora Cloud ウェブフック- archive.uploaded - recording-report.uploaded ```mermaid sequenceDiagram autonumber participant client as クライアント participant sora as WebRTC SFU Sora participant cloud as Sora Cloud participant app as アプリケーションサーバー participant s3 as オブジェクトストレージ note over client,sora: WebRTC 確立 app->>+cloud: StartRecording API cloud->>+sora: StartRecording API sora-->>-cloud: 200 OK cloud-->>-app: 200 OK note over sora: 録画開始 sora->>+cloud: イベントウェブフック
"type": "recording.started" cloud->>+app: イベントウェブフック
"type": "recording.started" app-->>-cloud: 200 OK cloud-->>-sora: 200 OK app->>+cloud: StopRecording API cloud->>+sora: StopRecording API sora-->>-cloud: 200 OK cloud-->>-app: 200 OK note over sora: 録画終了 par sora->>+cloud: イベントウェブフック
"type": "archive.available" cloud->>+app: イベントウェブフック
"type": "archive.available" app-->>-cloud: 200 OK cloud-->>-sora: 200 OK sora->>s3: 録画ファイルアップロード cloud->>+app: Sora Cloud ウェブフック
"type": "archive.uploaded" app-->>-cloud: 200 OK and sora->>+cloud: イベントウェブフック
"type": "recording.report" cloud->>+app: イベントウェブフック
"type": "recording.report" app-->>-cloud: 200 OK cloud-->>-sora: 200 OK sora->>s3: 録画レポートアップロード cloud->>+app: Sora Cloud ウェブフック
"type": "recording-report.uploaded" app-->>-cloud: 200 OK end ``` # 録画 ## 概要 Sora Cloud では Sora の録画機能を利用することができます。録画機能を利用するにあたり、追加料金などは不要です。 録画ファイルはご用意いただいた AWS S3 または S3 互換オブジェクトストレージ (以降オブジェクトストレージ) にアップロードします。 ## 録画機能を利用する前に > **重要** > > 録画機能を利用するにはプロジェクトにオブジェクトストレージが設定されている必要があります。 オブジェクトストレージの設定がされていない場合は Sora の録画開始 API を呼び出しても実行されません。 ### オブジェクトストレージの設定について Sora Cloud では管理コンソールからプロジェクトの設定画面でオブジェクトストレージの設定を行います。 その際、設定の接続確認でファイルのアップロードと削除を行います。 そのため Sora Cloud 側に設定するアクセスキーパーミッションは Put と Delete が必要です。 また、Hisui Cloud を利用する際には Get の権限も必要になります。 また Google Cloud Storage に関しては、Access Key ID および Secret Access Key は名称が他のオブジェクトストレージと異なります。 そのため、後述する [S3 または S3 互換オブジェクトストレージのエンドポイント](recording.html#a41384) および [Sora Cloud での Google Cloud Storage の利用方法](recording.html#2c7f03) を確認の上、設定を行ってください。 ## 制限 Sora Cloud の録画機能を利用するには以下の制限があります。 これらの制限に該当する場合、API による録画開始を行った場合は API 実行エラーとなります。ウェブフックの戻り値による録画開始をした場合は録画が開始されません。 ### 一括録画と分割録画の制限 Sora Cloud の録画方式は、一括録画または分割録画のどちらかしか選択できません。 ### 一括録画の有効期限の制限 Sora Cloud では一括録画は最大で 3 時間 (10800 秒) までしか録画できません。 有効期限の指定は必須です。 1 以上、10800 以下の値を指定してください。 この値を超える場合は [録画ファイル分割出力のみ](https://sora-doc.shiguredo.jp/RECORDING#3f7b27) を利用してください。 ### 分割録画の分割時間の制限 Sora Cloud では分割録画を行う際に指定する分割時間は最大で 3 時間 (10800 秒) までしか指定できません。 ## 録画機能の設定例 一括録画または分割録画を行う際の設定例は以下の通りです。 ### 一括録画 #### API による録画開始の設定例 `Sora_20231220.StartRecording` のパラメーターで `expire_time` に 1 以上、10800 以下の値を指定します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/sora-api \ -H "Authorization: Bearer " \ -H "x-sora-target: Sora_20231220.StartRecording" \ --json '{"channel_id":"sora-cloud@SJW1TPPMQ3JGXM6XD0DTEH77RZDWX0N1","expire_time":3600}' \ | jq . ``` #### ウェブフックによる録画開始の設定例 セッションウェブフック `session.created` または認証ウェブフックの戻り値で `recording_expire_time` に 1 以上、10800 以下の値を指定します。 ```javascript // session.created の戻り値で指定する例 { "recording": true, "recording_expire_time": 3600 } ``` ### 分割録画 #### API による録画開始の設定例 `Sora_20231220.StartRecording` のパラメーターで `split_duration` に 1 以上、10800 以下の値を指定します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/sora-api \ -H "Authorization: Bearer " \ -H "x-sora-target: Sora_20231220.StartRecording" \ --json '{"channel_id":"sora-cloud@SJW1TPPMQ3JGXM6XD0DTEH77RZDWX0N1","split_only":true,"split_duration":3600}' \ | jq . ``` #### ウェブフック による録画開始の設定例 セッションウェブフック `session.created` または認証ウェブフックの戻り値で `recording_split_duration` に 1 以上、10800 以下の値を指定します。 ```javascript // session.created の戻り値の例 { "recording": true, "recording_split_only": true, "recording_split_duration": 3600 } ``` ## オブジェクトストレージへのアップロード プロジェクト設定画面で指定したオブジェクトストレージに録画関連ファイルをアップロードします。 録画関連ファイルは recording_id のディレクトリ配下にアップロードされます。ファイル名はパッケージ版の Sora と同様です。 ファイル名の詳細につきましては、Sora の録画機能のドキュメントをご確認ください。 - [Sora ドキュメント 一括録画ファイルの命名規則について](https://sora-doc.shiguredo.jp/RECORDING#84f89f) - [Sora ドキュメント 分割録画ファイルの命名規則について](https://sora-doc.shiguredo.jp/RECORDING#d4fb46) それぞれのファイルのアップロードが終わり次第、アップロード完了のウェブフックリクエストを送信します。 ### 対応オブジェクトストレージ - 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:/// ```json { "id": "", "type": "recording-report.uploaded", "timestamp": "", "org_id": "", "project_id": "", "recording_id": "", "channel_id": "", "filename": "/report-.json", "s3_uri": "s3:///" } ``` ### Sora Cloud ウェブフック archive.uploaded **sora-cloud-webhook-type**: archive.uploaded - s3_uri- s3:/// - metadata_s3_uri- s3:/// ```json { "id": "", "type": "archive.uploaded", "timestamp": "", "recording_id": "", "org_id": "", "project_id": "", "channel_id": "", "session_id": "", "client_id": "", "connection_id": "", "s3_uri": "s3:///", "metadata_s3_uri": "s3:///" } ``` ### Sora Cloud ウェブフック split-archive.uploaded **sora-cloud-webhook-type**: split-archive.uploaded ```json { "id": "", "type": "split-archive.uploaded", "timestamp": "", "recording_id": "", "org_id": "", "project_id": "", "channel_id": "", "session_id": "", "client_id": "", "connection_id": "", "s3_uri": "s3:///", "metadata_s3_uri": "s3:///" } ``` ### Sora Cloud ウェブフック split-archive-end.uploaded **sora-cloud-webhook-type**: split-archive-end.uploaded ```json { "id": "", "type": "split-archive-end.uploaded", "timestamp": "", "recording_id": "", "org_id": "", "project_id": "", "channel_id": "", "session_id": "", "client_id": "", "connection_id": "", "s3_uri": "s3:///" } ``` ## 録画関連ファイルの 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"` ```json { "type": "recording.report", "id": "", "version": "", "label": "", "node_name": "", "channel_id": "", "timestamp": "", "log_written": "", "data": { "channel_id": "", "recording_id": "", "metadata": "", "split_only": "", "file_written": "", "created_at": "", "expire_time": "", "expired_at": "", "start_timestamp": "", "stop_timestamp": "", "file_path": "REDACTED", "filename": "", "failed_archives": [], "archives": [ { "client_id": "", "bundle_id": "", "connection_id": "", "label": "", "node_name": "", "filename": "", "file_path": "REDACTED", "metadata_file_path": "REDACTED", "metadata_filename": "", "start_time_offset": "", "start_timestamp": "", "stop_time_offset": "", "stop_timestamp": "", "size": "" }, { "client_id": "", "bundle_id": "", "connection_id": "", "label": "", "node_name": "", "filename": "", "file_path": "REDACTED", "metadata_file_path": "REDACTED", "metadata_filename": "", "start_time_offset": "", "start_timestamp": "", "stop_time_offset": "", "stop_timestamp": "", "size": "" } ] } } ``` ### イベントウェブフック archive.available Sora Cloud の録画ウェブフック `archive.available` は Sora と仕様の一部が異なります。 Sora では録画ファイルが利用可能になった際のウェブフックに、録画ファイルとメタデータのローカルパスを通知しますが、 Sora Cloud ではローカルパスは `REDACTED` という文字列に置き換わって通知されます。 - `"file_path": "REDACTED"` - `"metadata_file_path": "REDACTED"` ```json { "type": "archive.available", "id": "", "version": "", "label": "", "node_name": "", "channel_id": "", "group_id": "", "session_id": "", "client_id": "", "bundle_id": "", "connection_id": "", "timestamp": "", "event_metadata": "", "log_written": "", "data": { "channel_id": "", "recording_id": "", "group_id": "", "session_id": "", "client_id": "", "bundle_id": "", "connection_id": "", "created_at": "", "filename": "", "file_path": "REDACTED", "metadata_filename": "", "metadata_file_path": "REDACTED", "size": "", "audio": "", "audio_codec_type": "", "video": "", "video_codec_type": "", "video_bit_rate": "", "video_height": "", "video_width": "", "stats": {}, "start_time": "", "start_time_offset": "", "start_timestamp": "", "stop_time": "", "stop_time_offset": "", "stop_timestamp": "" } } ``` ### イベントウェブフック split-archive.available Sora Cloud の録画ウェブフック `split-archive.available` は Sora と仕様の一部が異なります。 Sora では録画ファイルが利用可能になった際のウェブフックに、録画ファイルとメタデータのローカルパスを通知しますが、 Sora Cloud ではローカルパスは `REDACTED` という文字列に置き換わって通知されます。 - `"file_path": "REDACTED"` - `"metadata_file_path": "REDACTED"` ```json { "type": "split-archive.available", "id": "", "version": "", "label": "", "node_name": "", "channel_id": "", "group_id": "", "session_id": "", "client_id": "", "bundle_id": "", "connection_id": "", "timestamp": "", "event_metadata": "", "log_written": "", "data": { "channel_id": "", "recording_id": "", "split_index": "", "group_id": "", "session_id": "", "client_id": "", "bundle_id": "", "connection_id": "", "created_at": "", "filename": "", "file_path": "REDACTED", "metadata_filename": "", "metadata_file_path": "REDACTED", "size": "", "audio": "", "audio_codec_type": "", "video": "", "video_codec_type": "", "video_bit_rate": "", "video_height": "", "video_width": "", "stats": {}, "start_time": "", "start_time_offset": "", "start_timestamp": "", "stop_time": "", "stop_time_offset": "", "stop_timestamp": "" } } ``` ### イベントウェブフック split-archive.end Sora Cloud の録画ウェブフック `split-archive.end` は Sora と仕様の一部が異なります。 Sora では録画ファイルが利用可能になった際のウェブフックに、録画ファイルとメタデータのローカルパスを通知しますが、 Sora Cloud ではローカルパスは `REDACTED` という文字列に置き換わって通知されます。 - `"file_path": "REDACTED"` - `"metadata_file_path": "REDACTED"` ```json { "type": "split-archive.end", "id": "", "version": "", "label": "", "node_name": "", "channel_id": "", "group_id": "", "session_id": "", "client_id": "", "bundle_id": "", "connection_id": "", "timestamp": "", "event_metadata": "", "log_written": "", "data": { "channel_id": "", "recording_id": "", "split_last_index": "", "group_id": "", "session_id": "", "client_id": "", "bundle_id": "", "connection_id": "", "filename": "", "file_path": "REDACTED", "audio": "", "audio_codec_type": "", "video": "", "video_codec_type": "", "video_bit_rate": "", "stats": {}, "start_time": "", "start_time_offset": "", "start_timestamp": "", "stop_time": "", "stop_time_offset": "", "stop_timestamp": "" } } ``` ## セッションウェブフックの Sora との差分 ### セッションウェブフック recording.report Sora Cloud のセッションウェブフック `recording.report` は Sora と仕様の一部が異なります。 Sora では録画終了時のウェブフックにレポートと録画とメタデータのファイルローカルパスを通知しますが、 Sora Cloud ではローカルパスは `REDACTED` という文字列に置き換わって通知されます。 - `"file_path": "REDACTED"` - `"metadata_file_path": "REDACTED"` ```json { "type": "recording.report", "id": "", "version": "", "label": "", "node_name": "", "channel_id": "", "group_id": "", "session_id": "", "session_metadata": "", "timestamp": "", "data": { "channel_id": "", "group_id": "", "session_id": "", "recording_id": "", "recording_metadata": "", "split_only": "", "split_duration": "", "created_at": "", "expire_time": "", "expired_at": "", "file_path": "", "filename": "", "file_written": "", "start_timestamp": "", "stop_timestamp": "", "archives": [ { "label": "", "node_name": "", "client_id": "", "bundle_id": "", "connection_id": "", "file_path": "REDACTED", "filename": "", "metadata_file_path": "REDACTED", "metadata_filename": "", "start_time_offset": "", "start_timestamp": "", "stop_time_offset": "", "stop_timestamp": "", "size": "" }, { "label": "", "node_name": "", "client_id": "", "bundle_id": "", "connection_id": "", "file_path": "REDACTED", "filename": "", "metadata_file_path": "REDACTED", "metadata_filename": "", "start_time_offset": "", "start_timestamp": "", "stop_time_offset": "", "stop_timestamp": "", "size": "" } ], "failed_archives": [ { "label": "", "node_name": "", "client_id": "", "bundle_id": "", "connection_id": "" }, { "label": "", "node_name": "", "client_id": "", "bundle_id": "", "connection_id": "" } ] } } ``` ## S3 または S3 互換オブジェクトストレージのエンドポイント ### Google Cloud Storage **endpoint**: storage.googleapis.com ### Akamai Connected Cloud (Linode Object Storage) **endpoint**: .linodeobjects.com ### Vultr Object Storage **endpoint**: .vultrobjects.com ### Cloudflare R2 **endpoint**: .r2.cloudflarestorage.com account-id は以下を参考にしてください。 ## Sora Cloud での Google Cloud Storage の利用方法 Google Cloud Storage を録画機能で利用する際の設定例です。 - Google Cloud の IAM から Sora Cloud から使用するサービスアカウントを作成します- Sora Cloud から Google Cloud Storage の接続検証時には `Storage オブジェクトユーザー (roles/storage.objectUser)` のロールを使用しています - ファイル書き込みと削除、録画ファイルを保存する際に録画 ID でフォルダを作成するための権限が最低限必要になります - Hisui Cloud を利用する場合はファイル取得の権限も必要になります - 録画ファイル保存先のバケットを作成します- バケット名は S3 互換の命名規則に従い設定を行います- 3-63 文字の範囲 - 英字小文字、数字、ハイフンのみ - その他の規則は [S3 互換の命名規則](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/bucketnamingrules.html) を参照してください - Google Cloud Storage の設定から相互運用性のタブを開きます- サービスアカウント HMAC から `サービスアカウント用にキーを作成` をクリックし、作成したサービスアカウントを選択します - アクセスキーとシークレットが表示されます - それぞれ Sora Cloud 管理コンソール上の Object Storage Access Key ID と Object Storage Secret Access Key として使用するため控えておきます - Sora Cloud のプロジェクト設定画面でオブジェクトストレージの設定を行います- Object Storage Endpoint: storage.googleapis.com - Object Storage Access Key ID: 作成した HMAC アクセスキー - Object Storage Secret Access Key: 作成した HMAC シークレット - Object Storage Bucket Name: 作成したバケット名 # Hisui Cloud この機能は現時点でアルファ版のため、正式リリース時には仕様が異なる場合があります。 ## 概要 **Hisui バージョン**: 2025.3.2 Hisui Cloud は時雨堂がオープンソースで公開している録画合成ツール Hisui のクラウド版です。 Sora Cloud の機能の一つとして提供しています。Sora Cloud で録画したファイルを合成することができます。 ## 注意 ### 分割録画ファイルには非対応 Hisui Cloud では分割録画ファイルには非対応です。 > **注釈** > > 将来的には分割録画ファイルに対応する予定です。 ### MP4 形式の録画ファイルには非対応 Hisui Cloud では Sora 2024.2.0 から利用可能な MP4 形式の録画ファイルには非対応です。 > **注釈** > > 将来的には MP4 形式の録画ファイルに対応する予定です。 ### オブジェクトストレージのエグレス料金 Hisui Cloud ではオブジェクトストレージにアップロードした録画ファイルを再度ダウンロードします。 そのため、利用しているオブジェクトストレージのエグレス料金がかかる場合があります。 > **注釈** > > 将来的には Sora Cloud にて録画ストレージを提供することでエグレス料金がかからない仕組みを提供する予定です。 ### 録画ファイル取得先のオブジェクトストレージ設定 オブジェクトストレージの設定はプロジェクトの設定で行い、録画機能と同じオブジェクトストレージ設定を使用します。 Hisui Cloud を使用する場合はオブジェクトストレージ設定に設定したアクセスキーに対してファイルの取得権限も必要です。 ## 合成機能 録画したファイルを合成します。アルファ版の段階ではレイアウトは指定できず出力されるファイルは固定となります。 ベータ版にてレイアウトを指定可能にする予定です。正式リリース時にはレイアウトエディターを提供予定です。 ### アルファ版で提供する機能 **プロファイルは正式リリース時には変更予定です** - 一括合成ファイルのみ - 出力されるファイルのプロファイルを選択可能- デフォルトは 0 です - profile_id: 0- 映像は VP9 - 音声は Opus - コンテナは MP4 - 解像度は 720p (1280x720) - ビットレートは 1000 Kbps - profile_id: 1- 映像は VP9 - 音声は Opus - コンテナは MP4 - 解像度は 1080p (1920x1080) - ビットレートは 1500 Kbps - profile_id: 2- 映像は AV1 - 音声は Opus - コンテナは MP4 - 解像度は 1080p (1920x1080) - ビットレートは 1000 Kbps ## 料金 Hisui Cloud を利用するのに追加料金は不要です。 > **注釈** > > 将来的に、合成ジョブを優先的に処理するための有料プランを用意する予定です。 ## 管理コンソール ### Hisui Cloud の録画合成を開始する 管理コンソールの `Past recordings` から合成したい録画 ID をクリックします。 `Recording details` で 右上の `Go to Hisui Cloud Jobs` をクリックしてください。 ![image](https://i.gyazo.com/c37e2e92c316bf05b78edf4cdf6dd001.png) `Hisui Cloud Jobs` で `Create job` をクリックします。 ![image](https://i.gyazo.com/7fab2da0a32c6ce46a68ea7cf6e2dea9.png) ポップアップが表示されるのでプロファイルを選択し `Create Job` をクリックします。 ![image](https://i.gyazo.com/efc9c1ee7d08c330eabdbaf3552d46f7.png) これで Hisui Cloud の録画合成が開始されます。 ## API [プロジェクト Hisui Cloud API](project_api_hisui_cloud.html) をご確認ください。 ## ウェブフック ### Sora Cloud ウェブフック hisui-job.started 録画合成開始時に通知されます。 ```json { "id": "", "type": "hisui-job.started", "hisui_job_id": "", "timestamp": "", "status": "started", "project_id": "", "org_id": "", "recording_id": "", "channel_id": "", "queued_timestamp": "", "started_timestamp": "", "output_audio_codec_type": "", "output_audio_bit_rate": "", "output_video_codec_type": "", "output_video_bit_rate": "", "output_container_type": "", "output_resolution": "", "recording_duration_s": "", "output_duration_s": "" } ``` ### Sora Cloud ウェブフック hisui-job.composited 録画合成成功時に通知されます。 ```json { "id": "", "hisui_job_id": "", "timestamp": "", "type": "hisui-job.composited", "status": "composited", "project_id": "", "org_id": "", "recording_id": "", "channel_id": "", "queued_timestamp": "", "started_timestamp": "", "composited_timestamp": "", "output_audio_codec_type": "", "output_audio_bit_rate": "", "output_video_codec_type": "", "output_video_bit_rate": "", "output_container_type": "", "output_resolution": "", "recording_duration_s": "", "output_duration_s": "" } ``` ### Sora Cloud ウェブフック hisui-job.uploaded 録画合成ファイルのアップロード成功時に通知されます。 ```json { "id": "", "hisui_job_id": "", "timestamp": "", "type": "hisui-job.uploaded", "status": "uploaded", "project_id": "", "org_id": "", "recording_id": "", "channel_id": "", "queued_timestamp": "", "started_timestamp": "", "composited_timestamp": "", "uploaded_timestamp": "", "output_audio_codec_type": "", "output_audio_bit_rate": "", "output_video_codec_type": "", "output_video_bit_rate": "", "output_container_type": "", "output_resolution": "", "s3_uri": "s3:///", "recording_duration_s": "", "output_duration_s": "" } ``` ### Sora Cloud ウェブフック hisui-job.completed 録画合成処理の完了時に通知されます。 ```json { "id": "", "hisui_job_id": "", "timestamp": "", "type": "hisui-job.completed", "status": "completed", "project_id": "", "org_id": "", "recording_id": "", "channel_id": "", "queued_timestamp": "", "started_timestamp": "", "composited_timestamp": "", "uploaded_timestamp": "", "completed_timestamp": "", "output_audio_codec_type": "", "output_audio_bit_rate": "", "output_video_codec_type": "", "output_video_bit_rate": "", "output_container_type": "", "output_resolution": "", "s3_uri": "s3:///", "recording_duration_s": "", "output_duration_s": "" } ``` ### Sora Cloud ウェブフック hisui-job.canceled 処理キャンセル時に通知されます。 ```json { "id": "", "hisui_job_id": "", "timestamp": "", "type": "hisui-job.canceled", "status": "canceled", "project_id": "", "org_id": "", "recording_id": "", "channel_id": "", "queued_timestamp": "", "started_timestamp": "", "canceled_timestamp": "", "output_audio_codec_type": "", "output_audio_bit_rate": "", "output_video_codec_type": "", "output_video_bit_rate": "", "output_container_type": "", "output_resolution": "", "recording_duration_s": "", "output_duration_s": "" } ``` ### Sora Cloud ウェブフック hisui-job.failed 処理失敗時に通知されます。 ```json { "id": "", "hisui_job_id": "", "timestamp": "", "type": "hisui-job.failed", "status": "failed", "error_code": "", "project_id": "", "org_id": "", "recording_id": "", "channel_id": "", "queued_timestamp": "", "started_timestamp": "", "failed_timestamp": "", "output_audio_codec_type": "", "output_audio_bit_rate": "", "output_video_codec_type": "", "output_video_bit_rate": "", "output_container_type": "", "output_resolution": "", "recording_duration_s": "", "output_duration_s": "" } ``` # 固定 IP アドレス接続機能(オプション) > **注意** > > この機能は 2026 年 8 月 1 日以降に利用できます。 > **注意** > > この機能は固定 IP アドレス接続オプションをご契約中のお客様のみ利用できます。 > > ご利用を希望する場合は、 sora-cloud at shiguredo.jp までメールでお問い合わせください。 > (このメールアドレスへの特定電子メールの送信を拒否いたします) ## 概要 固定 IP アドレス接続機能は、 Sora Cloud で配信や視聴を行うクライアントが接続する Sora のノード( IP アドレス)を固定できる機能です。 接続先は原則として単一の IP アドレスではなく、複数の IP アドレスのいずれかになります。オプションのご契約時にメールで接続先 IP アドレスのリストをお知らせします。 この機能は、お客様のネットワーク環境やセキュリティポリシーなどにより、接続先 IP アドレスを限定する必要がある場合に有効です。 ### 注意 - この機能は Sora のシグナリング、配信、視聴の接続先を固定するものであり、ウェブフック送信元や API 送信先の IP アドレスはこの機能の対象外です - この機能は、特定の Sora のノードを契約者専用として提供するものではありません - 本オプションを解約して再契約した場合は、原則として前回契約時と異なる IP アドレスが提供されます - この機能を利用するには、認証ウェブフック成功時にパラメーターの払い出しが必要です ## 固定 IP アドレス接続機能を利用する 認証ウェブフック成功時の払い出しで `"static_ip_address": true` を払い出すことで、固定 IP アドレス接続機能を利用できます。 ### 認証ウェブフック成功時の static_ip_address の払い出し例 認証ウェブフック成功時に `static_ip_address` に `true` を指定して払い出すと、クライアントは固定された IP アドレスを持つ Sora のノードに接続します。 `static_ip_address` が未指定、または `static_ip_address` に `true` 以外を指定した場合は、接続する Sora のノードは固定されません。 ```json { "allowed": true, "static_ip_address": true } ``` # エラーメッセージ ## 概要 Sora Cloud が返却するエラーメッセージの内容は以下の通りです。 ## シグナリングエラー Sora Cloud が返却するエラーメッセージのみを記載しています。 Sora が返却するエラーについては [Sora ドキュメントのシグナリングエラー](https://sora-doc.shiguredo.jp/SIGNALING#83a70a) を参照してください。 切断時の reason に以下エラーメッセージが入ります。 * - reason - 内容 * - INVALID-ACCESS-TOKEN - | ``access_token`` を元にした認証チェックエラー | 指定した ``channel_id`` の形式が不正 | シグナリングパラメーターに ``multistream : false`` を指定 * - NO-SUCH-ORG - | 指定した ``channel_id`` に Project ID が存在しない | Project ID が無効になっている * - ExternalAuthWebhookError - | 認証サーバーのウェブフックから 200 以外のステータスコードが送られてきた | 認証サーバーの戻り値が規定されている値と異なる * - ExternalAuthWebhookTimeoutError - 認証サーバーが 10 秒以内に応答を返さなかった ## Hisui Cloud エラー Hisui Cloud の処理失敗時にウェブフックによる返却およびコンソール画面に表示するエラーメッセージを記載します。 ウェブフックは [Sora Cloud ウェブフック hisui-job.failed](hisui_cloud.html#cfa6b2) の `error_code` にエラーメッセージが入ります。 * - error_code - 内容 * - MISSING-OBJECT-STORAGE-SETTINGS - | オブジェクトストレージの設定内容が不正 | プロジェクトのオブジェクトストレージの設定内容が正しいかを確認してください * - OBJECT-STORAGE-WRITE-TESTING-ERROR - | オブジェクトストレージへの書き込みチェックエラー | オブジェクトストレージが書き込み可能となっているかを確認してください * - RECORDING-ARCHIVE-DOWNLOAD-ERROR - | オブジェクトストレージへの読み込みチェックエラー | オブジェクトストレージが読み込み可能となっているかを確認してください * - RECORDING-ARCHIVE-NOT-FOUND - | 合成対象の録画ファイルがオブジェクトストレージに存在しない | 録画時に配置されたディレクトリに録画ファイルが存在するかを確認してください * - COMPOSITE-FILE-UPLOAD-ERROR - | 合成した録画ファイルのアップロードに失敗 | オブジェクトストレージの権限や容量の問題、通信エラーの可能性があります * - INTERNAL-ERROR - | Hisui Cloud の内部エラー | 録画 ID とジョブ ID を合わせてサポートにお問い合わせください * - HISUI-COMMAND-ERROR - | Hisui Cloud の内部エラー | 録画 ID とジョブ ID を合わせてサポートにお問い合わせください * - WEBHOOK-SEND-ERROR - | Hisui Cloud の内部エラー | 録画 ID とジョブ ID を合わせてサポートにお問い合わせください # WebRTC SFU Sora ## 概要 **Sora バージョン**: 2026.1.0 Sora Cloud で提供している Sora についてまとめています。 ## Sora 最新バージョンの適用 ### メジャーアップデート版 Sora Cloud の Sora はパッケージ版の Sora が正式リリースされた 1 ヶ月以内に最新版が利用可能になります。 > **注釈** > > Sora パッケージ版のメジャーアップデートは基本的に 6 月と 12 月に行います。 メジャーアップデート版のリリース時にはサービス停止を伴うメンテナンスを行う場合があります。 その場合は 1 ヶ月以上前にメンテナンス計画を共有します。 メンテナンス時間は長くても 3 時間で 14:00~17:00 の間に行います。 ### バグフィックスアップデート版 Sora Cloud の Sora のバグフィックスアップデート版のデプロイはサイレントに行います。 サービス停止を伴うメンテナンスは基本的に行いません。 ## Sora の互換性 シグナリングやウェブフックの破壊的変更は可能な限り行いません。 もし正式版の破壊的変更を行う場合は 1 年以上の移行期間をもうけます。 ## Sora の実験的機能 Sora Cloud では Sora の実験的機能を利用する際、ご連絡いただく必要はありません。 ## クラスター - リレー機能が有効になっています - クラスターアフィニティ機能が有効になっています ### クラスター数 Sora のクラスターは少なくとも 5 ノード以上のクラスターで構築されています。 ## Sora API URL **URL**: `https://api.sora-cloud.shiguredo.app/sora-api` - `x-sora-target` ヘッダー- 利用する Sora API を指定してください ## シグナリング URL シグナリング URL は以下の URL を利用してください。 **URL**: `wss://sora.sora-cloud.shiguredo.app/signaling` ### 複数のシグナリング URL 複数のシグナリング URL を利用することもできます。 ``` wss://0001.sora.sora-cloud.shiguredo.app/signaling wss://0002.sora.sora-cloud.shiguredo.app/signaling wss://0003.sora.sora-cloud.shiguredo.app/signaling ``` ## TURN URLs **これらの値を意識していただく必要はありません** - `turn://<シーケンス番号>.sora-turn.sora-cloud.shiguredo.app` - `turns://<シーケンス番号>.sora-turn.sora-cloud.shiguredo.app` ## OBS Studio の WHIP Sora Cloud では、OBS Studio の WHIP に対応しています。 利用する機能に応じて、以下のバージョンの OBS Studio をご利用ください。 - WHIP を利用する場合- 2024 年 7 月リリースの OBS Studio 30.2 以降 - WHIP サイマルキャストを利用する場合- 2026 年 3 月リリースの OBS Studio 32.1 以降 OBS Studio の WHIP については [Sora ドキュメント WHIP 機能](https://sora-doc.shiguredo.jp/WHIP) も参考にしてください。 ### WHIP エンドポイント URL Bearer Token にはアクセストークンを指定してください。 **URL**: `https://sora.sora-cloud.shiguredo.app/whip/` ### WHIP リソース URL **これらの値を意識する必要はありません** 現時点では DELETE と PATCH メソッドに対応しています。 **URL**: `https://sora.sora-cloud.shiguredo.app/whip-session//` ## OBS Studio の WHEP 現状 OBS Studio では WHEP に対応しておらず、開発中の機能です。 OBS Studio の WHEP については [Sora ドキュメント WHEP 機能](https://sora-doc.shiguredo.jp/WHEP) を参考にしてください。 ### WHEP エンドポイント URL Bearer Token にはアクセストークンを指定してください。 以下の URL をご利用ください。 **URL**: `https://sora.sora-cloud.shiguredo.app/whep/` ### WHEP リソース URL **これらの値を意識する必要はありません** 現時点では DELETE と PATCH メソッドに対応しています。 **URL**: `https://sora.sora-cloud.shiguredo.app/whep-session//` ## ヘルスチェック URL Sora Cloud で提供している Sora は接続するクライアントが 0 のタイミングでサイレントでメンテナンスを行うため、 Sora のヘルスチェック機能の利用は推奨していません。 **それでも Sora のヘルスチェックが必要な場合はチケットを作成してください。** ## sora.conf * - 項目名 - 値 - 備考 * - label - 設定済 - * - ipv4_address - 設定済 - * - ipv6 - true - * - ipv6_address - 設定済 - * - multistream_auto_sharing_video_bit_rate - **false** - そのままの帯域が利用されますのでご注意ください * - rtc_stats_log - 設定済 - ### ウェブフック関連の設定 * - auth_webhook_url - 設定済 - * - session_webhook_url - 設定済 - * - event_webhook_url - 設定済 - * - webhook_basic_authn - true - * - webhook_basic_authn_user_id - 設定済 - * - webhook_basic_authn_password - 設定済 - * - ignore_connection_failed_webhook - false - * - event_webhook_worker_number - 設定済み - ### シグナリング関連の設定 * - 項目名 - 値 - 備考 * - default_data_channel_signaling - true - * - data_channel_signaling_close_message - true - 2024 年 12 月 18 日から true へ * - data_channel_messaging - true - * - data_channel_messaging_only - true - * - signaling_vp9_params - true - * - signaling_av1_params - true - * - signaling_h264_params - true - * - signaling_h265_params - true - * - h264_b_frame - true - * - h265_b_frame - true - * - whip - true - * - whep - true - * - whip_bearer_token_metadata_key - access_token - * - whep_bearer_token_metadata_key - access_token - * - signaling_forwarding_filters - true - * - signaling_bundle_id - true - * - simulcast_multicodec - true - ### 録画関連の設定 * - 項目名 - 値 - 備考 * - archive_dir - 設定済 - * - archive_tmp_dir - 設定済 - * - auth_webhook_recording - true - * - recording_max_expire_time - 10800 s - * - recording_max_split_duration - 10800 s - * - recording_expire_time_required - true - * - recording_dual_output - false - ### TURN 関連の設定 * - 項目名 - 値 - 備考 * - turn_realm - sora.sora-cloud.shiguredo.app - * - turn_fqdn - 設定済 - * - turn_tcp_port - 設定済 - * - turn_tls - true - * - turn_tls_fqdn - 設定済 - * - turn_tls_port - 443 - ### クラスター関連の設定 * - 項目名 - 値 - 備考 * - cluster - true - * - cluster_relay - true - * - default_cluster_affinity - true - * - cluster_affinity_threshold - 5 - * - node_name - 設定済 - * - external_signaling_url - 設定済 - * - external_api_url - 設定済 - # Sora Cloud API ## 概要 Sora Cloud では組織とプロジェクト向けの API を提供しています。 ## 利用方法 **API ベース URL**: HTTP API を実行する例では [curl](https://curl.se/) を利用しています。 また、 curl の JSON レスポンスを整形するために、コマンドラインツール [jq](https://github.com/jqlang/jq) を利用しています。 > **重要** > > すべての API で `POST` を利用します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-total-connections-this-month \ -H "Authorization: Bearer " \ | jq . ``` Bearer トークンにはプロジェクトで作成した API キーを指定してください。 ## 組織 API 組織 API を利用するにはプロジェクトでの API キーのパーミッションをプロジェクトと組織の両方を指定してください。 ### ステータス API [組織 ステータス API](org_api_status.html) 組織の現在のステータスを取得する API です。 ### トラフィック API [組織 トラフィック API](org_api_traffic.html) 組織のトラフィック情報を取得する API です。 ### セッション API [組織 セッション API](org_api_session.html) 組織のセッション情報を取得する API です。 ### ログ API [組織 ログ API](org_api_log.html) 組織のログ情報を取得する API です。 ### 録画ログ API [組織 録画ログ API](org_api_log_recording.html) 組織の録画ログ情報を取得する API です。 ## プロジェクト API 無効 (disabled) に設定されているプロジェクトでは利用できません。 ### アクセストークン API [プロジェクト アクセストークン API](project_api_access_token.html) アクセストークンを生成、管理する API です。 ### トラフィック API [プロジェクト トラフィック API](project_api_traffic.html) プロジェクトのトラフィック情報を取得する API です。 ### セッション API [プロジェクト セッション API](project_api_session.html) プロジェクトのセッション情報を取得する API です。 ### ログ API [プロジェクトログ API](project_api_log.html) プロジェクトのログ情報を取得する API です。 ### 録画ログ API [プロジェクト 録画ログ API](project_api_log_recording.html) プロジェクトの録画ログ情報を取得する API です。 ## シーケンス図 ```mermaid sequenceDiagram participant cloud as Sora Cloud participant app as アプリケーションサーバー app->>+cloud: 今月の合計コネクション数 API
/orgs/get-total-connections-this-month cloud-->>-app: 200 OK ``` # Sora API ## 概要 Sora の API を実行します。 ## Sora との違い - パッケージ版の Sora とは違い一部利用できない API があります。 ## channel_id について Sora API の channel_id は `{channel_name}@{project_id}` の形式です。 channel_name は好きな文字列を指定できます。 project_id は Sora Cloud のプロジェクト ID です。 ## sora-api **API URL**: Sora の API を実行します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/sora-api \ -H "Authorization: Bearer " \ -H "x-sora-target: Sora_20151104.DisconnectChannel" \ --json '{"channel_id":"sora-cloud@SJW1TPPMQ3JGXM6XD0DTEH77RZDWX0N1"}' \ | jq . ``` ### 利用可能な Sora API 詳細は [Sora ドキュメント](https://sora-doc.shiguredo.jp/) をご確認ください - [Sora_20151104.DisconnectChannel](https://sora-doc.shiguredo.jp/API_SIGNALING#a87366) - [Sora_20151104.DisconnectClient](https://sora-doc.shiguredo.jp/API_SIGNALING#e91c0b) - [Sora_20151104.DisconnectConnection](https://sora-doc.shiguredo.jp/API_SIGNALING#2ec3a0) - [Sora_20201120.DisconnectChannelByRole](https://sora-doc.shiguredo.jp/API_SIGNALING#39de6a) - [Sora_20201013.ListChannelConnections](https://sora-doc.shiguredo.jp/API_SIGNALING#d388f3) - [Sora_20160711.PushChannel](https://sora-doc.shiguredo.jp/API_PUSH#7a5ee4) - [Sora_20160711.PushClient](https://sora-doc.shiguredo.jp/API_PUSH#15a811) - [Sora_20160711.PushConnection](https://sora-doc.shiguredo.jp/API_PUSH#48f008) - [Sora_20201120.PushChannelByRole](https://sora-doc.shiguredo.jp/API_PUSH#bc57a2) - [Sora_20170529.GetStatsClient](https://sora-doc.shiguredo.jp/API_STATS#ef69ae) - [Sora_20170529.GetStatsConnection](https://sora-doc.shiguredo.jp/API_STATS#e79b61) - [Sora_20200807.FocusSpotlightFixed](https://sora-doc.shiguredo.jp/API_SPOTLIGHT#beaf88) - [Sora_20200807.FocusSpotlight](https://sora-doc.shiguredo.jp/API_SPOTLIGHT#90a256) - [Sora_20200807.UnfocusSpotlight](https://sora-doc.shiguredo.jp/API_SPOTLIGHT#1390bc) - [Sora_20200807.ChangeSpotlightNumber](https://sora-doc.shiguredo.jp/API_SPOTLIGHT#17e930) - [Sora_20211215.RequestSpotlightRid](https://sora-doc.shiguredo.jp/API_SPOTLIGHT#5c2650) - [Sora_20211215.ResetSpotlightRid](https://sora-doc.shiguredo.jp/API_SPOTLIGHT#680344) - [Sora_20211215.BatchRequestSpotlightRid](https://sora-doc.shiguredo.jp/API_SPOTLIGHT#a2e06c) - [Sora_20201005.RequestRtpStream](https://sora-doc.shiguredo.jp/DEPRECATED_API_SIMULCAST#6fe0b3)- 2027 年 12 月廃止予定 - 代わりに `RequestSimulcastRid` API を利用してください - [Sora_20201005.ResetRtpStream](https://sora-doc.shiguredo.jp/DEPRECATED_API_SIMULCAST#afba6e)- 2026 年 12 月廃止予定 - 代わりに `RequestSimulcastRid` API を利用してください - [Sora_20211215.ListChannelRtcStats](https://sora-doc.shiguredo.jp/API_RTC_STATS#6704c0) - [Sora_20211215.GetRtcStats](https://sora-doc.shiguredo.jp/API_RTC_STATS#4e8cb0) - [Sora_20230628.TerminateSession](https://sora-doc.shiguredo.jp/API_SESSION#ba022b) - [Sora_20230628.ListForwardingFilters](https://sora-doc.shiguredo.jp/API_FORWARDING_FILTER#a1dd75) - [Sora_20230628.CreateChannelForwardingFilter](https://sora-doc.shiguredo.jp/API_FORWARDING_FILTER#fe98d1) - [Sora_20230628.UpdateChannelForwardingFilter](https://sora-doc.shiguredo.jp/API_FORWARDING_FILTER#36fc45) - [Sora_20230628.DeleteChannelForwardingFilter](https://sora-doc.shiguredo.jp/API_FORWARDING_FILTER#9410fd) - [Sora_20230628.CreateConnectionForwardingFilter](https://sora-doc.shiguredo.jp/API_FORWARDING_FILTER#d80a51) - [Sora_20230628.UpdateConnectionForwardingFilter](https://sora-doc.shiguredo.jp/API_FORWARDING_FILTER#23ed63) - [Sora_20230628.DeleteConnectionForwardingFilter](https://sora-doc.shiguredo.jp/API_FORWARDING_FILTER#0d65da) - [Sora_20231220.StartRecording](https://sora-doc.shiguredo.jp/API_RECORDING#c5b527) - [Sora_20231220.StopRecording](https://sora-doc.shiguredo.jp/API_RECORDING#fd0de5) - [Sora_20231220.GetSession](https://sora-doc.shiguredo.jp/API_SESSION#427a59) - [Sora_20241218.RequestKeyFrame](https://sora-doc.shiguredo.jp/API_CONNECTION#716b40) - [Sora_20251217.RequestSimulcastRid](https://sora-doc.shiguredo.jp/API_SIMULCAST#7d26ab) - [Sora_20251217.ChangeSimulcastAuto](https://sora-doc.shiguredo.jp/EXPERIMENTAL_API_SIMULCAST#81b01b) ### 録画 API の制限 以下の録画 API はプロジェクトにオブジェクトストレージ設定が行われていない場合、 または録画機能利用の [制限](recording.html#4a8cb2) に該当する指定を行っていた場合は利用できません。 - Sora_20231220.StartRecording - Sora_20231220.StopRecording ## シーケンス図 ```mermaid sequenceDiagram autonumber participant sora as WebRTC SFU Sora participant cloud as Sora Cloud participant app as アプリケーションサーバー app->>+cloud: ListChannelConnections API cloud->>+sora: ListChannelConnections API sora-->>-cloud: 200 OK cloud-->>-app: 200 OK ``` # 組織 ステータス API ## 概要 今月の現時点までの利用合計を取得できます。 ## 今月の合計コネクション数 **API URL**: 組織の今月の合計コネクション数を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-total-connections-this-month \ -H "Authorization: Bearer " \ | jq . 32 ``` ## 今月の合計セッション数 **API URL**: 今月の合計セッション数を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-total-sessions-this-month \ -H "Authorization: Bearer " \ | jq . 19 ``` ## 今月の合計接続時間(分) **API URL**: 今月の合計接続時間(分)を取得します。 1 接続時間が 1 分に満たない場合は 0 分とした上で集計します。0 分未満で複数回接続して合計接続時間が 1 分を超えた場合も結果は 0 分となります。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-total-duration-min-this-month \ -H "Authorization: Bearer " \ | jq . 62 ``` ## 今月の合計トラフィック **API URL**: 今月の合計転送量(バイト)を取得します - Ingress は受信 - Egress は送信 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-total-traffic-this-month \ -H "Authorization: Bearer " \ | jq . { "ingress": 334802932, "egress": 271316192 } ``` ## 今月の最大同時接続数 **API URL**: 今月の最大同時接続数を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-max-concurrent-connections-this-month \ -H "Authorization: Bearer " \ | jq . 2 ``` ## 今月の最大利用帯域 (Mbps) **API URL**: 今月の最大帯域を取得します。 1 Mbps に満たない場合は 0 を返却します (切り捨て) 。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-max-bandwidth-mbps-this-month \ -H "Authorization: Bearer " \ | jq . 2 ``` ## 今月の API リクエスト数 **API URL**: 今月の API リクエスト数を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-total-api-requests-this-month \ -H "Authorization: Bearer " \ | jq . 1418 ``` ## 今月の Sora API リクエスト数 **API URL**: 今月の Sora API リクエスト数を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-total-sora-api-requests-this-month \ -H "Authorization: Bearer " \ | jq . 22 ``` ## 今月のウェブフックリクエスト数 **API URL**: 今月のウェブフックリクエスト数を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-total-webhook-requests-this-month \ -H "Authorization: Bearer " \ | jq . 400 ``` # 組織 トラフィック API ## 概要 指定した期間の同時接続数や帯域の情報が取得できます。 ## 指定月トラフィック **API URL**: 組織単位での指定した月のトラフィックを取得します。 - 最大同時接続数 - 最大帯域 - 転送量 (Ingress / Egress) ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-traffics-for-month \ -H "Authorization: Bearer " \ --json '{"year":,"month":}' \ | jq . [ { "date": "2023-12-01T00:00:00Z", "max_concurrent_connections": 2, "max_bandwidth_mbps": 2, "ingress": 203222648, "egress": 149065812 }, { "date": "2023-12-02T00:00:00Z", "max_concurrent_connections": 2, "max_bandwidth_mbps": 2, "ingress": 124288260, "egress": 122220468 }, { "date": "2023-12-03T00:00:00Z", "max_concurrent_connections": 0, "max_bandwidth_mbps": 0, "ingress": 0, "egress": 0 }, { "date": "2023-12-04T00:00:00Z", "max_concurrent_connections": 1, "max_bandwidth_mbps": 1, "ingress": 7292024, "egress": 29912 }, ... ] ``` # 組織 セッション API ## 概要 プロジェクトの API キーを利用してセッション情報を取得できます。 セッション情報は直近 30 日分の最大 100 件取得できます。 ## 現在の合計同時接続数 **API URL**: 現在の同時接続数を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-total-live-concurrent-connections \ -H "Authorization: Bearer " \ | jq . 5 ``` ## 現在の合計セッション数 **API URL**: 現在のセッション数を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-total-live-sessions \ -H "Authorization: Bearer " \ | jq . 2 ``` ## 現在のセッション一覧 **API URL**: 現在のセッション一覧を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/list-live-sessions \ -H "Authorization: Bearer " \ | jq . [ { "node_name": "sora1@sora-cloud1", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DCO9", "session_id": "DM2ASQDRF90H9DPS5S5ABKWTKM", "channel_connections": 1, "start_timestamp": "2023-12-21T10:13:21.732601Z", "last_active_timestamp": "2023-12-21T10:13:21.941259Z" }, { "node_name": "sora2@sora-cloud2", "channel_id": "channel-2@A5J467N5AWTQHFSA2VIKVNGDB2VK2DCO9", "session_id": "ZM2ASQDRF90H9DPS5S5ABKWTKM", "channel_connections": 1, "start_timestamp": "2023-12-21T10:13:21.732601Z", "last_active_timestamp": "2023-12-21T10:13:21.941259Z" } ... ] ``` # 組織 ログ API ## 概要 ログに関する API です。過去のセッションやコネクションのログを確認できます。 ## セッションログ一覧 **API URL**: 直近 30 日分のセッションを最大 1000 件取得します。利用転送量の単位はバイトです。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/list-session-logs \ -H "Authorization: Bearer " \ --json '{"project_id":""}' \ | jq . [ { "timestamp": "2023-12-21T10:13:59.947433Z", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "DM2ASQDRF90H9DPS5S5ABKWTKM", "total_connections": 1, "max_connections": 1, "created_timestamp": "2023-12-21T10:13:21.731452Z", "destroyed_timestamp": "2023-12-21T10:13:59.947058Z", "duration_min": 0 }, { "timestamp": "2023-12-21T08:05:21.073115Z", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "4HW0G1Y65H57519CFEHTGP5ZG0", "total_connections": 1, "max_connections": 1, "created_timestamp": "2023-12-21T08:03:24.052625Z", "destroyed_timestamp": "2023-12-21T08:05:21.072713Z", "duration_min": 1 }, ... ] ``` ## コネクションログ一覧 **API URL**: 直近 30 日分のコネクション情報を最大 1000 件取得します。利用転送量の単位はバイトです。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/list-connection-logs \ -H "Authorization: Bearer " \ --json '{"project_id":""}' \ | jq . [ { "timestamp": "2023-12-21T10:13:42.909631Z", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "DM2ASQDRF90H9DPS5S5ABKWTKM", "client_id": "96NA2SW34N4HB948FZQATMKNV0", "bundle_id": "96NA2SW34N4HB948FZQATMKNV0", "connection_id": "96NA2SW34N4HB948FZQATMKNV0", "total_received_bytes": 1500758, "total_sent_bytes": 2272, "created_timestamp": "2023-12-21T10:13:21.938754Z", "destroyed_timestamp": "2023-12-21T10:13:42.909534Z", "duration_min": 0 }, { "timestamp": "2023-12-21T08:05:04.017143Z", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "4HW0G1Y65H57519CFEHTGP5ZG0", "client_id": "J7DSDH13392X797FS0Z8A35R34", "bundle_id": "J7DSDH13392X797FS0Z8A35R34", "connection_id": "J7DSDH13392X797FS0Z8A35R34", "total_received_bytes": 7200849, "total_sent_bytes": 10596, "created_timestamp": "2023-12-21T08:03:24.262361Z", "destroyed_timestamp": "2023-12-21T08:05:04.016977Z", "duration_min": 1 }, ... ] ``` ## API ログ一覧 **API URL**: 直近 30 日分の API ログを最大 1000 件取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/list-api-logs \ -H "Authorization: Bearer " \ --json '{"project_id":""}' \ | jq . [ { "timestamp": "2023-12-21T10:19:57.8Z", "url": "https://api.sora-cloud.shiguredo.app/orgs/list-connection-logs", "status": 200, "elapsed_time_ms": 6 }, { "timestamp": "2023-12-21T10:19:57.784Z", "url": "https://api.sora-cloud.shiguredo.app/orgs/list-session-logs", "status": 200, "elapsed_time_ms": 5 }, { "timestamp": "2023-12-21T10:19:57.769Z", "url": "https://api.sora-cloud.shiguredo.app/project/get-past-connection", "status": 400, "elapsed_time_ms": 5 }, ... ] ``` ## Sora API ログ一覧 **API URL**: 直近 30 日分の API ログを最大 1000 件取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/list-sora-api-logs \ -H "Authorization: Bearer " \ --json '{"project_id":""}' \ | jq . [ { "timestamp": "2023-12-19T07:28:23.248Z", "sora_target": "Sora_20230628.TerminateSession", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "status": 200, "elapsed_time_ms": 2130 }, { "timestamp": "2023-12-19T04:12:05.857Z", "sora_target": "Sora_20161101.StopRecording", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "status": 200, "elapsed_time_ms": 5 }, ... ] ``` ## ウェブフックログ一覧 **API URL**: 直近 30 日分のウェブフックログを最大 1000 件取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/list-webhook-logs \ -H "Authorization: Bearer " \ --json '{"project_id":""}' \ | jq . [ { "timestamp": "2023-12-21T10:19:50.009Z", "type": "connection.created", "url": "https://example.com/event", "status": 200, "elapsed_time_ms": 4 }, { "timestamp": "2023-12-21T10:19:49.792Z", "type": "session.created", "url": "https://example.com/session", "status": 200, "elapsed_time_ms": 3 }, ... ] ``` # 組織 録画ログ API ## 概要 組織単位での録画ログに関する API です。過去の録画やアーカイブログを確認できます。 録画情報は直近 30 日分の最大 1000 件取得できます。 ## 録画レポートログ一覧 **API URL**: ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/list-recording-report-logs \ -H "Authorization: Bearer " \ --json '{"project_id":""}' \ | jq . [ { "timestamp": "2023-12-18T06:05:30.025051Z", "id": "5HE8MHYN1S3K37H0PPJMKA4TY4", "recording_id": "2Q29SF936S2T503EDJKSTPM8HW", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "start_timestamp": "2023-12-18T06:04:43.63Z", "stop_timestamp": "2023-12-18T06:05:30.023Z", "split_only": false, "split_duration": null, "expire_time": 180, "filename": "report-2Q29SF936S2T503EDJKSTPM8HW.json" }, { "timestamp": "2023-12-18T06:25:37.466685Z", "id": "MX4BKSBSAX1CDD3JF66XP013P0", "recording_id": "4V4V4QHNNH51K3CDKQWFVKQWJM", "channel_id": "channel-2@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "start_timestamp": "2023-12-18T06:22:35.437Z", "stop_timestamp": "2023-12-18T06:25:35.437Z", "split_only": false, "split_duration": null, "expire_time": 180, "filename": "report-4V4V4QHNNH51K3CDKQWFVKQWJM.json" }, ... ] ``` ## アーカイブログ一覧 **API URL**: ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/list-archive-logs \ -H "Authorization: Bearer " \ --json '{"project_id":"","recording_id":""}' \ | jq . [ { "timestamp": "2023-12-22T04:50:44.277233Z", "id": "30RM380EGN5AK3G365BFAA4518", "recording_id": "0CVR4THQ4938H92ENEGB6RJYGG", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "8XWBNGXG8S60B8K5XEBHSK1BRM", "client_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "connection_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "audio_codec_type": "OPUS", "video_codec_type": "VP9", "start_timestamp": "2023-12-22T04:47:42.42749Z", "stop_timestamp": "2023-12-22T04:50:42.433113Z", "filename": "archive-7AXCNHPTVH1HH6TQ74ZH9FPRHC.webm", "metadata_filename": "archive-7AXCNHPTVH1HH6TQ74ZH9FPRHC.json" }, ... ] ``` ## アーカイブログ詳細 **API URL**: ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-archive-log \ -H "Authorization: Bearer " \ --json '{"project_id":"","recording_id":"","connection_id":""}' \ | jq . [ { "timestamp": "2023-12-22T04:50:44.277233Z", "id": "30RM380EGN5AK3G365BFAA4518", "recording_id": "0CVR4THQ4938H92ENEGB6RJYGG", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "8XWBNGXG8S60B8K5XEBHSK1BRM", "client_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "connection_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "audio_codec_type": "OPUS", "video_codec_type": "VP9", "video_height": 480, "video_width": 640, "size": 11972663, "start_timestamp": "2023-12-22T04:47:42.42749Z", "stop_timestamp": "2023-12-22T04:50:42.433113Z", "filename": "archive-7AXCNHPTVH1HH6TQ74ZH9FPRHC.webm", "metadata_filename": "archive-7AXCNHPTVH1HH6TQ74ZH9FPRHC.json" } ] ``` ## 分割アーカイブログ一覧 **API URL**: ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/list-split-archive-logs \ -H "Authorization: Bearer " \ --json '{"project_id":"","recording_id":""}' \ | jq . [ { "timestamp": "2023-12-22T08:11:05.912378Z", "id": "GGQCGN36D54FBCZ4XV96DQTRZ0", "recording_id": "17G3WD0SDD69NFDQ21MN488X68", "split_last_index": "0008", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "50SFC8S97S6PVBHDCSCBMN52H4", "client_id": "FB9GZV0FE137Q4PABS2VH92094", "connection_id": "FB9GZV0FE137Q4PABS2VH92094", "audio_codec_type": "OPUS", "video_codec_type": "VP9", "start_timestamp": "2023-12-22T08:03:57.061822Z", "stop_timestamp": "2023-12-22T08:11:03.881563Z", "filename": "split-archive-end-FB9GZV0FE137Q4PABS2VH92094.json" }, ... ] ``` ## 分割アーカイブログ詳細 **API URL**: ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/orgs/get-split-archives-log \ -H "Authorization: Bearer " \ --json '{"project_id":"","recording_id":"","connection_id":""}' \ | jq . [ { "timestamp": "2023-12-22T08:04:57.057286Z", "id": "JAKSXCQRCH6HFCANAKA2CG8K0G", "recording_id": "17G3WD0SDD69NFDQ21MN488X68", "split_index": "0001", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "50SFC8S97S6PVBHDCSCBMN52H4", "client_id": "FB9GZV0FE137Q4PABS2VH92094", "connection_id": "FB9GZV0FE137Q4PABS2VH92094", "audio_codec_type": "OPUS", "video_codec_type": "VP9", "video_height": 480, "video_width": 640, "size": 2691827, "start_timestamp": "2023-12-22T08:03:57.062942Z", "stop_timestamp": "2023-12-22T08:04:37.03447Z", "filename": "split-archive-FB9GZV0FE137Q4PABS2VH92094_0001.webm", "metadata_filename": "split-archive-FB9GZV0FE137Q4PABS2VH92094_0001.json" }, { "timestamp": "2023-12-22T08:05:57.063581Z", "id": "GHDX8EYHMN75314M8WMD299ZX8", "recording_id": "17G3WD0SDD69NFDQ21MN488X68", "split_index": "0002", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "50SFC8S97S6PVBHDCSCBMN52H4", "client_id": "FB9GZV0FE137Q4PABS2VH92094", "connection_id": "FB9GZV0FE137Q4PABS2VH92094", "audio_codec_type": "OPUS", "video_codec_type": "VP9", "video_height": 480, "video_width": 640, "size": 4072474, "start_timestamp": "2023-12-22T08:04:37.039673Z", "stop_timestamp": "2023-12-22T08:05:37.035789Z", "filename": "split-archive-FB9GZV0FE137Q4PABS2VH92094_0002.webm", "metadata_filename": "split-archive-FB9GZV0FE137Q4PABS2VH92094_0002.json" }, ... ] ``` # プロジェクト アクセストークン API ## 概要 この API では、プロジェクトの API キーを利用してそのプロジェクトの JWT を作成できます。 ## API を使わない JWT 生成 Sora Cloud の認証で利用するアクセストークンは JWT (JSON Web Token) を採用しています。 そのため、このアクセストークン API を利用しなくても、プロジェクトの API キーを使ってアクセストークンを生成することができます。 Sora Cloud API を利用できる環境では API キーをすでに保持しており、アクセストークン API を利用せずに JWT を生成することが可能です。 そのため、ネットワークを経由したアクセストークン API 実行による JWT 生成を利用せずに、アプリケーション側で JWT を素早く生成する構成を推奨しています JWT の詳細仕様と生成例については [認証](auth.html) をご確認ください。 ## アクセストークン生成 **API URL** アクセストークンを指定できます。 すべての指定はオプションです。 ### channel_id **オプション** **型**: string Sora のチャネル ID を指定します。 チャネル ID は `<チャネル名>@<プロジェクト ID>` です。 チャネル名には好きな文字列を指定可能です。 ### role **オプション** **型**: string Sora のロール (sendrecv / sendonly / recvonly) を指定します。 ### max_channel_connections **オプション** **型**: integer **範囲**: 0-5000 チャネルの最大同時接続数を指定します。この設定は接続単位で影響します。 例えばこの設定が 1 のトークンを利用した接続はチャネルに 1 接続以上存在する場合は接続ができなくなります。 また、この設定が 0 のトークンを利用した場合、必ず接続に失敗します。 ### not_before **オプション** **型**: RFC 3339 **URL**: [JWT nbf](https://www.rfc-editor.org/rfc/rfc7519.html#section-4.1.5) JWT が有効になる日時を指定します。数値ではなく RFC 3339 フォーマットで指定してください。 ### expiration_time **オプション** **型**: RFC 3339 **URL**: [JWT exp](https://www.rfc-editor.org/rfc/rfc7519.html#section-4.1.4) JWT の有効期限を指定します。数値ではなく RFC 3339 フォーマットで指定してください。 ### jwt_id **オプション** **型**: string (UUID) **URL**: [JWT jti](https://www.rfc-editor.org/rfc/rfc7519.html#section-4.1.7) `jwt_id` を指定する場合は UUID を指定する必要があります。 `jwt_id` を指定しなくても自動で UUID を生成し jti Claim を付与して JWT を生成します。 ### 実行例 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/create-access-token \ -H "Authorization: Bearer " \ --json '{"channel_id":""}' \ | jq . { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6I..." } ``` **アクセストークンに有効期限を設定する場合の実行例** ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/create-access-token \ -H "Authorization: Bearer " \ --json '{"channel_id":"","not_before":"2022-10-20T10:00:00+09:00","expiration_time":"2023-10-27T10:00:00+09:00"}' \ | jq . ``` **アクセストークンに最大同時接続数を設定する場合の実行例** ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/create-access-token \ -H "Authorization: Bearer " \ --json '{"channel_id":"","max_channel_connections":10}' \ | jq . ``` # プロジェクト トラフィック API ## 概要 プロジェクトの API キーを利用してそのプロジェクトのトラフィック情報を取得します。 以下の項目が取得できます。 - 最大同時接続数 (Max concurrent connections) - 最大利用帯域 (Max bandwidth) - 最大イングレス (Ingress) - 最大エグレス (Egress) ## 直近 1 年のトラフィックを取得する **API URL**: 直近 1 年のトラフィックを 1 ヶ月単位で取得します。利用転送量の単位はバイトです。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-traffics-last-year \ -H "Authorization: Bearer " \ | jq . [ { "timestamp": "2022-12-01T00:00:00Z", "max_concurrent_connections": 2, "max_bandwidth_mbps": 2, "ingress": 336327052, "egress": 271330208 }, { "timestamp": "2023-01-01T00:00:00Z", "max_concurrent_connections": 0, "max_bandwidth_mbps": 0, "ingress": 0, "egress": 0 }, { "timestamp": "2023-02-01T00:00:00Z", "max_concurrent_connections": 0, "max_bandwidth_mbps": 0, "ingress": 0, "egress": 0 }, ... ] ``` ## 直近 1 ヶ月のトラフィックを取得する **API URL**: 直近 1 ヶ月のトラフィックを 1 日単位で取得します。利用転送量の単位はバイトです。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-traffics-last-month \ -H "Authorization: Bearer " \ | jq . [ { "timestamp": "2023-11-21T00:00:00Z", "max_concurrent_connections": 2, "max_bandwidth_mbps": 2, "ingress": 124288260, "egress": 122220468 }, { "timestamp": "2023-11-22T00:00:00Z", "max_concurrent_connections": 0, "max_bandwidth_mbps": 0, "ingress": 0, "egress": 0 }, { "timestamp": "2023-11-23T00:00:00Z", "max_concurrent_connections": 1, "max_bandwidth_mbps": 1, "ingress": 8816144, "egress": 43928 } ... ] ``` ## 直近 1 週間のトラフィックを取得する **API URL**: 直近 1 週間トラフィックを 1 日単位で取得します。利用転送量の単位はバイトです。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-traffics-last-week \ -H "Authorization: Bearer " \ | jq . [ { "timestamp": "2023-12-14T00:00:00Z", "max_concurrent_connections": 2, "max_bandwidth_mbps": 2, "ingress": 203222648, "egress": 149065812 }, { "timestamp": "2023-12-15T00:00:00Z", "max_concurrent_connections": 2, "max_bandwidth_mbps": 2, "ingress": 124288260, "egress": 122220468 }, { "timestamp": "2023-12-16T00:00:00Z", "max_concurrent_connections": 0, "max_bandwidth_mbps": 0, "ingress": 0, "egress": 0 }, ... ] ``` ## 直近 1 日のトラフィックを取得する **API URL**: 直近 1 日のトラフィックを 1 時間単位で取得します。利用転送量の単位はバイトです。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-traffics-last-day \ -H "Authorization: Bearer " \ | jq . [ { "timestamp": "2023-12-20T10:00:00Z", "max_concurrent_connections": 1, "max_bandwidth_mbps": 1, "ingress": 7292024, "egress": 29912 }, { "timestamp": "2023-12-20T11:00:00Z", "max_concurrent_connections": 0, "max_bandwidth_mbps": 0, "ingress": 0, "egress": 0 }, { "timestamp": "2023-12-20T12:00:00Z", "max_concurrent_connections": 1, "max_bandwidth_mbps": 0, "ingress": 1524120, "egress": 14016 }, ... ] ``` # プロジェクト セッション API ## 概要 プロジェクトの API キーを利用してそのプロジェクトのセッション情報を取得できます。 セッション情報は直近 30 日分の最大 100 件取得できます。 ## 現在の同時接続数 **API URL**: 現在の同時接続数を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/get-total-live-concurrent-connections \ -H "Authorization: Bearer " \ | jq . 5 ``` ## 現在のセッション合計数 **API URL**: 現在のセッション合計数を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/get-total-live-sessions \ -H "Authorization: Bearer " \ | jq . 2 ``` ## 現在のセッション一覧 **API URL**: 現在のセッション一覧を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-live-sessions \ -H "Authorization: Bearer " \ | jq . [ { "start_timestamp": "2023-12-21T10:19:49.779719Z", "node_name": "sora-1@sora-cloud1", "channel_id": "channel-2@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "MDND1JPYF55EB54V2C72GCYFZ4", "channel_connections": 1, "last_active_timestamp": "2023-12-21T10:19:49.986033Z" }, { "start_timestamp": "2023-12-21T10:19:49.779719Z", "node_name": "sora-2@sora-cloud2", "channel_id": "channel-2@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "MDND1JPYF55EB54V2C72GCYFZ4", "channel_connections": 2, "last_active_timestamp": "2023-12-21T10:19:49.986033Z" } ... ] ``` ## 現在の指定したセッションを取得 **API URL**: 指定した現在のセッション情報を取得します ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/get-live-session \ -H "Authorization: Bearer " \ --json '{"session_id":""}' \ | jq . { "start_timestamp": "2023-12-22T04:47:42.177097Z", "node_name": "sora1@sora-cloud1", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "8XWBNGXG8S60B8K5XEBHSK1BRM", "channel_connections": 1, "last_active_timestamp": "2023-12-22T04:49:42.398167Z" } ``` ## 現在のコネクション一覧 **API URL**: プロジェクトの現在の指定したセッションのコネクション一覧を取得します ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-live-connections \ -H "Authorization: Bearer " \ --json '{"session_id":""}' \ | jq . [ { "status": "Active", "sora_version": "2023.2.0", "node_name": "sora1@sora-cloud1", "role": "sendrecv", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "8XWBNGXG8S60B8K5XEBHSK1BRM", "client_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "bundle_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "connection_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "multistream": true, "simulcast": false, "audio": true, "audio_codec_type": "OPUS", "audio_bit_rate": null, "video": true, "video_codec_type": "VP9", "video_bit_rate": 500, "duration_min": 2, "total_received_bytes": 8509508, "total_sent_bytes": 12680, "turn_transport_type": "tcp", "created_timestamp": "2023-12-22T04:47:42.393212Z", "destroyed_timestamp": null }, ... ] ``` ## 現在の指定したコネクション詳細 **API URL**: ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/get-live-connection \ -H "Authorization: Bearer " \ --json '{"session_id":"","connection_id":""}' \ | jq . { "status": "Active", "sora_version": "2023.2.0", "node_name": "sora1@sora-cloud1", "role": "sendrecv", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "8XWBNGXG8S60B8K5XEBHSK1BRM", "client_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "bundle_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "connection_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "multistream": true, "simulcast": false, "audio": true, "audio_codec_type": "OPUS", "audio_bit_rate": null, "video": true, "video_codec_type": "VP9", "video_bit_rate": 500, "duration_min": 2, "total_received_bytes": 8509508, "total_sent_bytes": 12680, "turn_transport_type": "tcp", "created_timestamp": "2023-12-22T04:47:42.393212Z", "destroyed_timestamp": null } ``` ## 過去のセッション一覧 **API URL**: プロジェクトの過去のセッション一覧を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-past-sessions \ -H "Authorization: Bearer " \ | jq . [ { "timestamp": "2023-12-21T10:13:59.947433Z", "node_name": "sora1@sora-cloud1", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "DM2ASQDRF90H9DPS5S5ABKWTKM", "total_connections": 1, "max_connections": 1, "created_timestamp": "2023-12-21T10:13:21.731452Z", "destroyed_timestamp": "2023-12-21T10:13:59.947058Z", "duration_min": 0 }, { "timestamp": "2023-12-21T08:05:21.073115Z", "node_name": "sora1@sora-cloud1", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "4HW0G1Y65H57519CFEHTGP5ZG0", "total_connections": 1, "max_connections": 1, "created_timestamp": "2023-12-21T08:03:24.052625Z", "destroyed_timestamp": "2023-12-21T08:05:21.072713Z", "duration_min": 1 }, ... ] ``` ## 過去のセッション詳細 **API URL**: 指定したセッション ID の過去のセッション情報を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/get-past-session \ -H "Authorization: Bearer " \ --json '{"session_id":""}' \ | jq . { "timestamp": "2023-12-22T04:46:43.132317Z", "node_name": "sora1@sora-cloud1", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "HWQ9DYPC0D05S9YDSTJSS3PSAR", "total_connections": 1, "max_connections": 1, "created_timestamp": "2023-12-22T04:34:19.866827Z", "destroyed_timestamp": "2023-12-22T04:46:43.131931Z", "duration_min": 12 } ``` ## 過去のコネクション一覧 **API URL**: 過去の指定したセッション ID のコネクション一覧を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-past-connections \ -H "Authorization: Bearer " \ --json '{"session_id":""}' \ | jq . [ { "timestamp": "2023-12-22T04:46:28.129771Z", "node_name": "sora1@sora-cloud1", "role": "sendrecv", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "HWQ9DYPC0D05S9YDSTJSS3PSAR", "client_id": "JX0FD6323X58D1XKDPNW4G47A8", "bundle_id": "JX0FD6323X58D1XKDPNW4G47A8", "connection_id": "JX0FD6323X58D1XKDPNW4G47A8", "total_received_bytes": 50773444, "total_sent_bytes": 76816, "created_timestamp": "2023-12-22T04:34:20.070429Z", "destroyed_timestamp": "2023-12-22T04:46:28.129613Z", "duration_min": 12 }, ... ] ``` ## 過去のコネクション詳細 **API URL**: 指定したコネクション ID の過去のコネクション情報を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/get-past-connection \ -H "Authorization: Bearer " \ --json '{"session_id":"","connection_id":""}' \ | jq . { "timestamp": "2023-12-22T04:46:28.129771Z", "node_name": "sora1@sora-cloud1", "role": "sendrecv", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "HWQ9DYPC0D05S9YDSTJSS3PSAR", "client_id": "JX0FD6323X58D1XKDPNW4G47A8", "bundle_id": "JX0FD6323X58D1XKDPNW4G47A8", "connection_id": "JX0FD6323X58D1XKDPNW4G47A8", "total_received_bytes": 50773444, "total_sent_bytes": 76816, "created_timestamp": "2023-12-22T04:34:20.070429Z", "destroyed_timestamp": "2023-12-22T04:46:28.129613Z", "duration_min": 12 } ``` # プロジェクト ログ API ## 概要 プロジェクトの API キーを利用してそのプロジェクトの直近 30 日分の最大 1000 件のログを取得できます。 ## セッションログ一覧 **API URL**: セッションログの一覧を取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-session-logs \ -H "Authorization: Bearer " \ | jq . [ { "timestamp": "2023-12-21T10:13:59.947433Z", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "DM2ASQDRF90H9DPS5S5ABKWTKM", "total_connections": 1, "max_connections": 1, "created_timestamp": "2023-12-21T10:13:21.731452Z", "destroyed_timestamp": "2023-12-21T10:13:59.947058Z", "duration_min": 0 }, { "timestamp": "2023-12-21T08:05:21.073115Z", "channel_id": "channel-2@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "4HW0G1Y65H57519CFEHTGP5ZG0", "total_connections": 1, "max_connections": 1, "created_timestamp": "2023-12-21T08:03:24.052625Z", "destroyed_timestamp": "2023-12-21T08:05:21.072713Z", "duration_min": 1 }, ... ] ``` ## コネクションログ一覧 **API URL**: コネクションログを取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-connection-logs \ -H "Authorization: Bearer " \ | jq . [ { "timestamp": "2023-12-21T10:13:42.909631Z", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "DM2ASQDRF90H9DPS5S5ABKWTKM", "client_id": "96NA2SW34N4HB948FZQATMKNV0", "bundle_id": "96NA2SW34N4HB948FZQATMKNV0", "connection_id": "96NA2SW34N4HB948FZQATMKNV0", "total_received_bytes": 1500758, "total_sent_bytes": 2272, "created_timestamp": "2023-12-21T10:13:21.938754Z", "destroyed_timestamp": "2023-12-21T10:13:42.909534Z", "duration_min": 0 }, { "timestamp": "2023-12-21T08:05:04.017143Z", "channel_id": "channel-2@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "4HW0G1Y65H57519CFEHTGP5ZG0", "client_id": "J7DSDH13392X797FS0Z8A35R34", "bundle_id": "J7DSDH13392X797FS0Z8A35R34", "connection_id": "J7DSDH13392X797FS0Z8A35R34", "total_received_bytes": 7200849, "total_sent_bytes": 10596, "created_timestamp": "2023-12-21T08:03:24.262361Z", "destroyed_timestamp": "2023-12-21T08:05:04.016977Z", "duration_min": 1 }, ... ] ``` ## API ログ一覧 **API URL**: API ログを取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-api-logs \ -H "Authorization: Bearer " \ | jq . [ { "timestamp": "2023-12-21T10:19:58.216Z", "url": "https://api.sora-cloud.shiguredo.app/projects/list-connection-logs", "status": 200, "elapsed_time_ms": 4 }, { "timestamp": "2023-12-21T10:19:58.202Z", "url": "https://api.sora-cloud.shiguredo.app/projects/list-session-logs", "status": 200, "elapsed_time_ms": 6 }, ... ] ``` ## Sora API ログ一覧 **API URL**: Sora API ログを取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-sora-api-logs \ -H "Authorization: Bearer " \ | jq . [ { "timestamp": "2023-12-19T07:28:23.248Z", "sora_target": "Sora_20230628.TerminateSession", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "status": 200, "elapsed_time_ms": 2130 }, { "timestamp": "2023-12-19T04:12:05.857Z", "sora_target": "Sora_20161101.StopRecording", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "status": 200, "elapsed_time_ms": 5 }, { "timestamp": "2023-12-19T04:08:37.131Z", "sora_target": "Sora_20161101.StartRecording", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "status": 200, "elapsed_time_ms": 8 }, ... ] ``` ## ウェブフックログ一覧 **API URL**: ウェブフックログを取得します。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-webhook-logs \ -H "Authorization: Bearer " \ | jq . [ { "timestamp": "2023-12-21T10:19:50.009Z", "type": "connection.created", "url": "https://example.com/event", "status": 200, "elapsed_time_ms": 4 }, { "timestamp": "2023-12-21T10:19:49.817Z", "type": "recording.started", "url": "https://example.com/session", "status": 200, "elapsed_time_ms": 4 }, ... ] ``` # プロジェクト 録画ログ API ## 概要 プロジェクト単位での録画ログに関する API です。過去の録画やアーカイブログを確認できます。 録画情報は直近 30 日分の最大 1000 件取得できます。 ## 録画レポートログ一覧 **API URL**: ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-recording-report-logs \ -H "Authorization: Bearer " \ | jq . [ { "timestamp": "2023-12-18T06:05:30.025051Z", "id": "5HE8MHYN1S3K37H0PPJMKA4TY4", "recording_id": "2Q29SF936S2T503EDJKSTPM8HW", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "start_timestamp": "2023-12-18T06:04:43.63Z", "stop_timestamp": "2023-12-18T06:05:30.023Z", "split_only": false, "split_duration": null, "expire_time": 180, "filename": "report-2Q29SF936S2T503EDJKSTPM8HW.json" }, { "timestamp": "2023-12-18T06:25:37.466685Z", "id": "MX4BKSBSAX1CDD3JF66XP013P0", "recording_id": "4V4V4QHNNH51K3CDKQWFVKQWJM", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "start_timestamp": "2023-12-18T06:22:35.437Z", "stop_timestamp": "2023-12-18T06:25:35.437Z", "split_only": false, "split_duration": null, "expire_time": 180, "filename": "report-4V4V4QHNNH51K3CDKQWFVKQWJM.json" }, ... ] ``` ## アーカイブログ一覧 **API URL**: ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-archive-logs \ -H "Authorization: Bearer " \ --json '{"recording_id":""}' \ | jq . [ { "timestamp": "2023-12-22T04:50:44.277233Z", "id": "30RM380EGN5AK3G365BFAA4518", "recording_id": "0CVR4THQ4938H92ENEGB6RJYGG", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "8XWBNGXG8S60B8K5XEBHSK1BRM", "client_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "connection_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "audio_codec_type": "OPUS", "video_codec_type": "VP9", "start_timestamp": "2023-12-22T04:47:42.42749Z", "stop_timestamp": "2023-12-22T04:50:42.433113Z", "filename": "archive-7AXCNHPTVH1HH6TQ74ZH9FPRHC.webm", "metadata_filename": "archive-7AXCNHPTVH1HH6TQ74ZH9FPRHC.json" }, ... ] ``` ## アーカイブログ詳細 **API URL**: ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/get-archive-log \ -H "Authorization: Bearer " \ --json '{"recording_id":"","connection_id":""}' \ | jq . [ { "timestamp": "2023-12-22T04:50:44.277233Z", "id": "30RM380EGN5AK3G365BFAA4518", "recording_id": "0CVR4THQ4938H92ENEGB6RJYGG", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "8XWBNGXG8S60B8K5XEBHSK1BRM", "client_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "connection_id": "7AXCNHPTVH1HH6TQ74ZH9FPRHC", "audio_codec_type": "OPUS", "video_codec_type": "VP9", "video_height": 480, "video_width": 640, "size": 11972663, "start_timestamp": "2023-12-22T04:47:42.42749Z", "stop_timestamp": "2023-12-22T04:50:42.433113Z", "filename": "archive-7AXCNHPTVH1HH6TQ74ZH9FPRHC.webm", "metadata_filename": "archive-7AXCNHPTVH1HH6TQ74ZH9FPRHC.json" } ] ``` ## 分割アーカイブログ一覧 **API URL**: ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-split-archive-logs \ -H "Authorization: Bearer " \ --json '{"recording_id":""}' \ | jq . [ { "timestamp": "2023-12-22T08:11:05.912378Z", "id": "GGQCGN36D54FBCZ4XV96DQTRZ0", "recording_id": "17G3WD0SDD69NFDQ21MN488X68", "split_last_index": "0008", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "50SFC8S97S6PVBHDCSCBMN52H4", "client_id": "FB9GZV0FE137Q4PABS2VH92094", "connection_id": "FB9GZV0FE137Q4PABS2VH92094", "audio_codec_type": "OPUS", "video_codec_type": "VP9", "start_timestamp": "2023-12-22T08:03:57.061822Z", "stop_timestamp": "2023-12-22T08:11:03.881563Z", "filename": "split-archive-end-FB9GZV0FE137Q4PABS2VH92094.json" }, ... ] ``` ## 分割アーカイブログ詳細 **API URL**: ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/get-split-archives-log \ -H "Authorization: Bearer " \ --json '{"recording_id":"","connection_id":""}' \ | jq . [ { "timestamp": "2023-12-22T08:04:57.057286Z", "id": "JAKSXCQRCH6HFCANAKA2CG8K0G", "recording_id": "17G3WD0SDD69NFDQ21MN488X68", "split_index": "0001", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "50SFC8S97S6PVBHDCSCBMN52H4", "client_id": "FB9GZV0FE137Q4PABS2VH92094", "connection_id": "FB9GZV0FE137Q4PABS2VH92094", "audio_codec_type": "OPUS", "video_codec_type": "VP9", "video_height": 480, "video_width": 640, "size": 2691827, "start_timestamp": "2023-12-22T08:03:57.062942Z", "stop_timestamp": "2023-12-22T08:04:37.03447Z", "filename": "split-archive-FB9GZV0FE137Q4PABS2VH92094_0001.webm", "metadata_filename": "split-archive-FB9GZV0FE137Q4PABS2VH92094_0001.json" }, { "timestamp": "2023-12-22T08:05:57.063581Z", "id": "GHDX8EYHMN75314M8WMD299ZX8", "recording_id": "17G3WD0SDD69NFDQ21MN488X68", "split_index": "0002", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "session_id": "50SFC8S97S6PVBHDCSCBMN52H4", "client_id": "FB9GZV0FE137Q4PABS2VH92094", "connection_id": "FB9GZV0FE137Q4PABS2VH92094", "audio_codec_type": "OPUS", "video_codec_type": "VP9", "video_height": 480, "video_width": 640, "size": 4072474, "start_timestamp": "2023-12-22T08:04:37.039673Z", "stop_timestamp": "2023-12-22T08:05:37.035789Z", "filename": "split-archive-FB9GZV0FE137Q4PABS2VH92094_0002.webm", "metadata_filename": "split-archive-FB9GZV0FE137Q4PABS2VH92094_0002.json" }, ... ] ``` # プロジェクト Hisui Cloud API ## 概要 プロジェクトの API キーを利用してそのプロジェクトの録画ファイルを Hisui を利用して合成する API です。 ## Hisui ジョブをキューに送信する **API URL**: 録画合成ジョブをキューに送信します。 - recording_id- 必須 - profile_id- オプション - デフォルトは 0 - 0- 映像は H.264 - 音声は Opus - コンテナは MP4 - 解像度は 720p (1280x720) - ビットレートは 1000 Kbps - 1- 映像は VP9 - 音声は Opus - コンテナは MP4 - 解像度は 1080p (1920x1080) - ビットレートは 1500 Kbps - 2- 映像は AV1 - 音声は Opus - コンテナは MP4 - 解像度は 1080p (1920x1080) - ビットレートは 1000 Kbps ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/submit-hisui-job \ -H "Authorization: Bearer " \ --json '{"recording_id":"","profile_id":1}' \ | jq . { "id":"N5DRH87MEH1QD44ME2WVVD7C0G", "recording_id":"0CVR4THQ4938H92ENEGB6RJYGG", "channel_id":"channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "status":"queued", "error_code":null, "queued_timestamp":"2023-12-22T09:18:38.490066Z", "output_audio_codec_type":"Opus", "output_audio_bit_rate":64000, "output_video_codec_type":"VP9", "output_video_bit_rate":1500, "recording_duration_s":180 } ``` ### 管理コンソール この API は管理コンソールから GUI で実行することができます。 ## Hisui ジョブをキャンセルします **API URL**: 録画合成ジョブをキャンセルします。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/cancel-hisui-job \ -H "Authorization: Bearer " \ --json '{"hisui_job_id":""}' \ | jq . { "id":"XM0RX7730D4SVCPS5WGPM6APZ4", "recording_id":"0CVR4THQ4938H92ENEGB6RJYGG", "channel_id":"channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "status":"waiting", "canceled":false, "canceled_timestamp":null } ``` ### 管理コンソール この API は管理コンソールから GUI で実行することができます。 ## Hisui ジョブ一覧を取得する **API URL**: 録画合成ジョブの一覧を取得します。 直近に登録した 100 件を取得できます。 ```console $ curl -sS \ -X POST \ https://api.sora-cloud.shiguredo.app/projects/list-hisui-jobs \ -H "Authorization: Bearer " \ | jq . [ { "id": "8VWEP6MT7S7C7A99NNA5E79THM", "status": "failed", "recording_id": "2Q29SF936S2T503EDJKSTPM8HW", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "queued_timestamp": "2023-12-22T04:50:31.929676Z", "started_timestamp": "2023-12-22T04:50:40.57687Z", "canceled_timestamp": null, "completed_timestamp": null, "failed_timestamp": "2023-12-22T04:50:40.641998Z", "output_audio_codec_type": "Opus", "output_audio_bit_rate": 64000, "output_video_codec_type": "VP9", "output_video_bit_rate": 1500, "output_container_type": "MP4", "canceled": false }, { "id": "VY8NZDENCD6JZF0VXWY5RYQ784", "status": "failed", "recording_id": "2Q29SF936S2T503EDJKSTPM8HW", "channel_id": "channel-1@A5J467N5AWTQHFSA2VIKVNGDB2VK2DC9", "queued_timestamp": "2023-12-22T07:36:43.27188Z", "started_timestamp": "2023-12-22T07:37:10.799462Z", "canceled_timestamp": null, "completed_timestamp": null, "failed_timestamp": "2023-12-22T07:37:10.860303Z", "output_audio_codec_type": "Opus", "output_audio_bit_rate": 64000, "output_video_codec_type": "VP9", "output_video_bit_rate": 1500, "output_container_type": "MP4", "canceled": false }, ... ] ``` ### 管理コンソール この API は管理コンソールから GUI で実行することができます。 # 過去の変更履歴 > **重要** > > 変更、廃止された一部機能のリンクは無効になっています。 ## 2025-05-22 - [CHANGE] Sora のバージョンを 2024.2.3 にバグフィックスアップデートしました- Sora 2024.2.3 については Sora のリリースノートをご確認ください。 - もし Sora 2024.2.3 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2025-04-11 - [CHANGE] Sora のバージョンを 2024.2.2 にバグフィックスアップデートしました- Sora 2024.2.2 については Sora のリリースノートをご確認ください。 - もし Sora 2024.2.2 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2025-01-10 - [CHANGE] Sora のバージョンを 2024.2.1 にバグフィックスアップデートしました- Sora 2024.2.1 については Sora のリリースノートをご確認ください。 - もし Sora 2024.2.1 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2024-12-23 - [CHANGE] Sora のバージョンを 2024.2.0 にメジャーアップデートしました- Sora 2024.2.0 についての詳細は Sora のリリースノートをご確認ください。 - もし Sora 2024.2.0 の変更点で不明点がある場合はチケットにてお問い合わせください - [CHANGE] `connection.failed` ウェブフックの送信条件を **認証成功時** に変更しました - [CHANGE] `multistream` と `spotlight` が既存セッションと異なる場合の挙動を変更しました - [CHANGE] プレイアウト遅延機能を配信側から視聴側への適用に変更しました- 認証成功時の払い出し `playout_delay_min_delay` は **視聴側の** 最小値を指定するように変更しました - 認証成功時の払い出し `playout_delay_max_delay` は **視聴側の** 最大値を指定するように変更しました - [CHANGE] WebSocket シグナリング時のフレームサイズが大きい場合、クローズドコード 4490 ではなく 1009 を返すようにしました - [CHANGE] WebSocket シグナリング利用時に `"type": "disconnect"` で切断した際、 WebSocket のクローズドコードを 1000 に、クローズド理由を `"TYPE-DISCONNECT"` に変更しました - [CHANGE] WebSocket シグナリング利用時に Sora 側から正常切断した場合、 WebSocket のクローズドコードを 1000 に、クローズド理由を含めるように変更しました- ライフタイムによるコネクションの破棄は `"LIFETIME-EXPIRED"` が理由に含まれます - API やライフタイムなどによるセッションの破棄は `"SESSION-DESTROYED"` が理由に含まれます - API によるコネクション破棄は `"DISCONNECTED-API"` が理由に含まれます - [CHANGE] End-to-End Encryption の機能を終了しました - [CHANGE] シグナリングエラー時のエラーメッセージを改善しました - [CHANGE] RTP ストリーム停止/再開 API を 2025 年 12 月 1 日に廃止します- 代わりに転送フィルター API をご利用ください - `Sora_20200401.PauseRtpStream` - `Sora_20200401.ResumeRtpStream` - `Sora_20200401.ListPauseRtpStreams` - [CHANGE] 認証成功時とセッション生成時の払い出しでの `forwarding_filter` の指定を 2025 年 12 月 1 日に廃止します- 代わりに `forwarding_filters` を利用してください - [CHANGE] シグナリング接続時に `forwarding_filter` の指定を 2025 年 12 月 1 日に廃止します- 代わりに `forwarding_filters` を利用してください - [CHANGE] 認証成功時の転送フィルターの払い出しがエラーになった場合、接続が失敗するように変更しました- WebSocket 切断時の `reason` は `INTERNAL-ERROR` エラーです - [CHANGE] セッション生成時の転送フィルターの払い出しがエラーになった場合、セッションを破棄するように変更しました- WebSocket 切断時の `reason` は `INTERNAL-ERROR` エラーです - [CHANGE] 統計情報に含まれる `total_received_intra_frame` を `total_received_key_frame` に変更しました - [CHANGE] H.264 のプロファイルレベル ID のデフォルト値を `42e01f` から `42e02a` へ変更しました- Chrome / Edge がデフォルト値を変更したことへの追従です - [ADD] マルチ転送フィルター機能に対応しました- 1 チャネルや 1 コネクションに対して複数の転送フィルターを指定できる機能です - [ADD] ICE コネクションステート変更のシグナリング通知機能に対応しました- 認証成功時の払い出しで `signaling_notify_ice_connection_state` を `true` に設定することで有効になります - [ADD] H.265 コーデックでの録画に対応しました- 出力形式を MP4 にした場合のみ対応しています - MP4 形式は録画機能(セッション単位)でのみ対応しています - [ADD] キーフレームを要求する RequestKeyFrame API を追加しました - [ADD] DataChannel シグナリングのみ利用時に、 Sora から切断が発生した場合、 `"type": "close"` メッセージを送るようにしました- ライフタイムによるコネクションの破棄は `"LIFETIME-EXPIRED"` が理由に含まれます - API やライフタイムなどによるセッションの破棄は `"SESSION-DESTROYED"` が理由に含まれます - API によるコネクション破棄は `"DISCONNECTED-API"` が理由に含まれます - [ADD] 録画の出力ファイル形式が MP4 形式に対応しました- セッションウェブフックの `"type": "session.created"` の戻り値による払い出し項目に `recording_format` を追加しました - MP4 形式は現時点で録画機能(セッション単位)のみ対応しています - MP4 形式で出力した場合 Hisui Cloud では利用できません - [ADD] メッセージング機能において、 メッセージに Sora 側でヘッダーを付与する機能を追加しました - [ADD] セッションウェブフックの `"type": "session.created"` の戻り値による払い出し項目にセッションの同時接続数を制限する `trial_max_connections` を追加しました- この機能は実験的機能のトライアル中です - デフォルトは未指定で制限がない状態です - 指定できる範囲は 0..10000 です - `trial_max_connections` が `0` の場合は誰も接続することができなくなります - [FIX] OBS WHIP で H.264 利用時に一部のエンコーダーを利用した際、正常に録画ができなかった問題を修正しました - [FIX] OBS WHIP で AV1 利用時に正常に録画できなかった問題を修正しました ## 2024-08-23 - [FIX] シグナリング向けの一本化 URL を復旧しました- `wss://sora.sora-cloud.shiguredo.app/signaling` - [FIX] WHIP / WHEP 向けの一本化 URL を復旧しました- `https://sora.sora-cloud.shiguredo.app/whip/` - `https://sora.sora-cloud.shiguredo.app/whep/` ## 2024-08-21 サーバー移行によるクラスター再構築のため、2024-08-21 14:00 から 2024-08-21 17:00 までの間、メンテナンスを実施しました。 ## 2024-08-09 - [CHANGE] Sora のバージョンを 2024.1.3 にバグフィックスアップデートしました- Sora 2024.1.3 については [リリースノート](https://sora-doc.shiguredo.jp/OLD_RELEASE_NOTE#20355f) をご確認ください。 - もし Sora 2024.1.3 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2024-07-01 - [CHANGE] Sora のバージョンを 2024.1.1 にバグフィックスアップデートしました- Sora 2024.1.1 については [リリースノート](https://sora-doc.shiguredo.jp/OLD_RELEASE_NOTE#3106a1) をご確認ください。 - もし Sora 2024.1.1 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2024-06-26 - [CHANGE] Sora のバージョンを 2024.1.0 にメジャーアップデートしました- Sora 2024.1.0 については [リリースノート](https://sora-doc.shiguredo.jp/OLD_RELEASE_NOTE#a97fff) をご確認ください。 - もし Sora 2024.1.0 の変更点で不明点がある場合はチケットにてお問い合わせください - [CHANGE] 実験的機能である Lyra コーデックの対応を廃止しました - [CHANGE] 認証ウェブフックでの `h264_profile_level_id` の指定を廃止しました- 代わりに `video_h264_params` を指定してください - [UPDATE] クラスターリレー機能を有効にしました - [UPDATE] クラスターリレー機能のアフィニティ機能を有効にしました - [ADD] H.264 と H.265 のコーデックパラメーター `b_frame` の認証ウェブフック払い出しに対応しました- それぞれ `video_h264_params` `video_h265_params` に指定可能です - [ADD] 次のパラメーターの認証ウェブフックの払い出しに対応しました- `simulcast_multicodec` - `simulcast_codecs` - `rtc_stats` - `connection_lifetime` - `playout_delay_min_delay` - `playout_delay_max_delay` - `cluster_affinity` - [ADD] 次のパラメーターのセッションウェブフック払い出しに対応しました- `session_lifetime` - `spotlight_number` - [ADD] OBS WHEP 対応- WHEP 用 URL を追加しました - [ADD] OBS WHIP H.265 対応 - [ADD] 統計ウェブフックに対応しました- 管理コンソールのプロジェクト設定で統計ウェブフックの送信先 URL を設定できます - [ADD] 認証ウェブフックとセッションウェブフックのリクエストヘッダーに `Accept` ヘッダーを追加しました- Sora 2024.1.0 から追加されたリクエストヘッダーです - [FIX] 録画機能音ズレ問題の改善- Chromium 側のバグにより、 [replaceTrack](https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpSender/replaceTrack) などを利用して [MediaStreamTrack](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack) を削除し、 一定時間経過後に新しく追加した際、音声のタイムスタンプが正しく出力されない問題を Sora 側で吸収することで対応しました ## 2024-06-01 2024-06-01 9:38 から利用しているサービスの停止により障害が発生し、 2024-06-01 12:30 に一部を除いて復旧しました。 一部の機能が利用できない状態が続いております。その影響で、以下の機能が利用できない状態となっております。 代替手段をご確認ください。 - [CHANGE] 非推奨のシグナリング URL の一本化 URL `wss://sora.sora-cloud.shiguredo.app/signaling` が利用できなくなりました- 以下のシグナリング URL をご利用ください - `wss://0001.sora.sora-cloud.shiguredo.app/signaling` - `wss://0002.sora.sora-cloud.shiguredo.app/signaling` - `wss://0003.sora.sora-cloud.shiguredo.app/signaling` - [CHANGE] WHIP URL の `https://sora.sora-cloud.shiguredo.app/whip/` が利用できなくなりました- 一時的に以下の WHIP URL をご利用ください - `https://0001.sora.sora-cloud.shiguredo.app/whip/` - `https://0002.sora.sora-cloud.shiguredo.app/whip/` - `https://0003.sora.sora-cloud.shiguredo.app/whip/` ## 2024-04-24 - [CHANGE] Sora のバージョンを 2023.2.7 にバグフィックスアップデートしました- Sora 2023.2.7 については [リリースノート](https://sora-doc.shiguredo.jp/OLD_RELEASE_NOTE#73380e) をご確認ください。 - もし Sora 2023.2.7 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2024-03-08 - [CHANGE] Sora のバージョンを 2023.2.5 にホットフィックスアップデートしました- Sora 2023.2.5 については [リリースノート](https://sora-doc.shiguredo.jp/OLD_RELEASE_NOTE#b1cc4a) をご確認ください。 - もし Sora 2023.2.5 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2024-03-06 - [CHANGE] Sora のバージョンを 2023.2.4 にホットフィックスアップデートしました- Sora 2023.2.4 については [リリースノート](https://sora-doc.shiguredo.jp/OLD_RELEASE_NOTE#362ffa) をご確認ください。 - もし Sora 2023.2.4 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2024-02-20 - [ADD] Sora がウェブフック送信に失敗したウェブフックを再送信する機能をコンソールに追加しました- **アルファ版** としてのリリースになります - Sora からウェブフックを送信する際に失敗した時に出力されたウェブフックの内容を再送信できる機能になります - プロジェクトのメニューの `Show webhook error ...` から当機能の画面に遷移できます - 再送が可能なウェブフックは Sora のセッションウェブフック、イベントウェブフックとなります - イベントウェブフックのうち `connection.failed` は対象外となります - ログは過去 30 日以内の 100 件まで閲覧と再送信が可能です - 再送信は操作を行ったときにプロジェクトに設定されている Sora ウェブフック URL に対して再送信を試みます ## 2024-02-08 - [CHANGE] Sora のバージョンを 2023.2.3 にバグフィックスアップデートしました- Sora 2023.2.3 については [リリースノート](https://sora-doc.shiguredo.jp/OLD_RELEASE_NOTE#6b4d85) をご確認ください。 - もし Sora 2023.2.3 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2024-01-31 - [ADD] Sora ログの検索機能を追加しました- **アルファ版** としてのリリースになります - 管理コンソールから接続失敗、認証拒否などが確認できるようになりました - ログは 30 日間保存されます ## 2024-01-19 - [ADD] ウェブフックのリクエストに HTTP ヘッダーを追加しました ## 2024-01-04 - [CHANGE] Sora のバージョンを 2023.2.2 にバグフィックスアップデートしました- Sora 2023.2.2 については [リリースノート](https://sora-doc.shiguredo.jp/OLD_RELEASE_NOTE#620132) をご確認ください。 - もし Sora 2023.2.2 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2023-12-20 - [CHANGE] Sora のバージョンを 2023.2.0 にメジャーアップデートしました- Sora 2023.2.0 については [リリースノート](https://sora-doc.shiguredo.jp/OLD_RELEASE_NOTE#aba7b8) をご確認ください。 - もし Sora 2023.2.0 の変更点で不明点がある場合はチケットにてお問い合わせください - [ADD] 録画機能(セッション単位)に対応しました- 録画機能(セッション単位)の `session.created` 時の払い出しに対応しました- `recording` - `recording_metadata` - `recording_expire_time` - `recording_split_duration` - `recording_split_only` - 録画機能(セッション単位)のセッションウェブフックに対応しました- `recording.started` - `recording.report` - 録画機能(セッション単位) API に対応しました- `Sora_20231220.StartRecording` API - `Sora_20231220.StopRecording` API - 認証成功時の録画ブロックの払い出しに対応しました- 録画機能(セッション単位)でのみ利用できます - `recording_block` - [ADD] セッション取得 API に対応しました- `Sora_20231220.GetSession` API - [ADD] 認証成功時の H.265 パラメーター払い出しに対応しました- **対応しているクライアントは現時点ではありません** - [ADD] シグナリング接続時の H.265 パラメーター指定に対応しました- **対応しているクライアントは現時点ではありません** - [ADD] 管理コンソールのライブセッション詳細画面に録画開始ボタンと録画停止ボタンを追加しました- 録画開始ボタンは録画機能(セッション単位)の録画を開始します - 録画停止ボタンは録画機能のセッション単位、レガシーのどちらでも録画を停止します - [ADD] 管理コンソールのライブ録画詳細画面に録画停止ボタンを追加しました- 録画停止ボタンは録画機能のセッション単位、レガシーのどちらでも録画を停止します ## 2023-10-20 - [UPDATE] Sora のバージョンを 2023.1.3 にバグフィックスアップデートしました- Sora 2023.1.3 については [リリースノート](https://sora-doc.shiguredo.jp/) をご確認ください。 - もし Sora 2023.1.3 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2023-09-22 - [ADD] 管理コンソールに録画一覧を追加しました- 過去の録画と現在の録画の一覧を確認可能です ### Hisui Cloud **Hisui Cloud の利用に追加料金はかかりません** - [ADD] 録画合成ツール Hisui のクラウド版を追加しました- **アルファ版** としてのリリースになります - 現時点ではレイアウトの指定はできません - `Hisui 2023.2.1` を利用しています - [ADD] 録画合成ジョブを追加する `projects/submit-hisui-job` API を追加しました- 管理コンソールからも実行できますが、API 経由からも実行可能です - [ADD] 録画合成ジョブをキャンセルする `projects/cancel-hisui-job` API を追加しました- 管理コンソールからも実行できますが、API 経由からも実行可能です - [ADD] 録画合成ジョブ一覧を取得する `projects/list-hisui-jobs` API を追加しました- 管理コンソールからも確認できますが、API 経由からも実行可能です - [ADD] 管理コンソールにセッション終了ボタンを追加しました- Sora の `TerminateSession API` を指定したセッションに対して実行します ## 2023-08-10 - [UPDATE] Sora のバージョンを 2023.1.2 にバグフィックスアップデートしました- Sora 2023.1.2 については [リリースノート](https://sora-doc.shiguredo.jp/) をご確認ください。 - もし Sora 2023.1.2 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2023-07-20 - [CHANGE] シグナリング URL を wss://sora.sora-cloud.shiguredo.app/signaling を非推奨にしました- シグナリング URL の一本化に利用している LB が WebSocket を突然切断する問題があるため利用を停止しました - 以下のシグナリング URL 全てを指定して、ご利用ください - `wss://0001.sora.sora-cloud.shiguredo.app/signaling` - `wss://0002.sora.sora-cloud.shiguredo.app/signaling` - `wss://0003.sora.sora-cloud.shiguredo.app/signaling` ## 2023-07-14 - [UPDATE] Sora のバージョンを 2023.1.1 にバグフィックスアップデートしました- Sora 2023.1.1 については [リリースノート](https://sora-doc.shiguredo.jp/) をご確認ください。 - もし Sora 2023.1.1 の変更点で不明点がある場合はチケットにてお問い合わせください ## 2023-07-04 - [ADD] セッションウェブフックの `"type": "session.created"` の戻り値で `session_metadata` / `forwarding_filter` を払い出し可能にしました ## 2023-07-03 - [CHANGE] Sora のバージョンを 2023.1.0 にメジャーアップデートしました- Sora 2023.1.0 については [リリースノート](https://sora-doc.shiguredo.jp/) をご確認ください。 - もし Sora 2023.1.0 の変更点で不明点がある場合はチケットにてお問い合わせください - [ADD] OBS で WebRTC 経由での配信を実現する WHIP に対応しました- WHIP エンドポイント URL: `http://sora.sora-cloud.shiguredo.app/whip/` - Bearer Token にはアクセストークンを指定する必要があります - 認証ウェブフックに `"whip": true` が含まれます - [ADD] セッションウェブフックにセッションが利用している Sora のシグナリング URL が `external_signaling_url` として含まれます - [ADD] VP9 / AV1 のサイマルキャストとスポットライト機能に対応しました - [ADD] Lyra コーデックの録音機能に対応しました - [ADD] 転送フィルター機能に対応しました- シグナリング接続時に `forwarding_filter` を指定することができます - 認証成功時の払い出しに `forwarding_filter` を指定可能にしています - 転送フィルター機能 API に対応しました- `Sora_20230628.ListForwardingFilters` API - `Sora_20230628.CreateChannelForwardingFilter` API - `Sora_20230628.UpdateChannelForwardingFilter` API - `Sora_20230628.DeleteChannelForwardingFilter` API - `Sora_20230628.CreateConnectionForwardingFilter` API - `Sora_20230628.UpdateConnectionForwardingFilter` API - `Sora_20230628.DeleteConnectionForwardingFilter` API - [ADD] セッション終了 API に対応しました- `Sora_20230628.TerminateSession` API - [ADD] 映像コーデックパラメーター機能に対応しました- シグナリング接続時に `vp9_params` / `av1_params` / `h264_params` を指定可能にしています - 認証成功時の払い出しに `video_vp9_params` / `video_av1_params` / `video_h264_params` を指定可能にしています- `{"h264_profile_level_id": "..."}` は 2024 年 6 月末で利用できなくなります - `{"video_h264_params": "profile_level_id": "..."}` をご利用ください ## 2023-04-10 - [ADD] Sora のシグナリング URL を 1 本化し、シーケンス番号なしの URL が利用できるようになりました- `wss://sora.sora-cloud.shiguredo.app/signaling` ## 2023-03-17 - [CHANGE] Sora API で指定する `x-sora-version` ヘッダーが不要になりました- 今後は `x-sora-version` ヘッダーは無視されます - [CHANGE] Sora のシグナリング URL からバージョン番号を削除しました- 今後は最新の Sora のバージョンがデプロイされてもシグナリング URL を変更する必要がなくなりました - 変更前 `wss://<シーケンス番号>.2022-2.sora.sora-cloud.shiguredo.app/signaling`- このシグナリング URL は `2024 年 1 月 31 日` をもって利用できなくなります、バージョンを除いたシグナリング URL への切り替えをお願いします - 変更後 `wss://<シーケンス番号>.sora.sora-cloud.shiguredo.app/signaling` - [CHANGE] Sora の TURN/TURNS URL からバージョン番号を削除しました- TURN/TURNS URL は Sora から動的に払い出す値になるため、利用者側での作業は不要です ## 2023-02-20 - [FIX] 管理コンソールのテキストボックスのクリアボタンへタブを移動させないようにしました ## 2023-02-08 - [FIX] Sora のバージョンを Sora 2022.2.3 にアップデートしました ## 2023-02-02 - [ADD] 管理コンソールのプロジェクトで `max_channel_connections` を指定できるようにしました ## 2023-02-01 - [ADD] 管理コンソールのプロジェクトで `Sora DevTools` のアクセストークン付き URL を生成できるようにしました ## 2023-01-14 - [ADD] 管理コンソールに現在と過去のセッション詳細、コネクション詳細を確認する画面を追加しました ## 2022-12-27 - [ADD] IPv6 が利用可能になりました - [FIX] オブジェクトストレージの設定がされていない状態で開始した配信がある状態で、 オブジェクトストレージの設定をして録画を開始した場合、 録画ファイルのアップロードが失敗する問題を修正しました - [FIX] Sora 2022.2.x のバージョンを Sora 2022.2.2 にアップデートしました ## 2022-12-01 Sora Cloud の提供を開始しました。