# Serverless Video Streaming API

### 概要

Serverless Streaming API は WebRTC を使用して、Webカメラ、RTSP カメラ、または動画ファイルから Roboflow Cloud に動画をストリーミングします。あなたの [Workflow](https://docs.roboflow.com/workflows/what-is-workflows) が各フレームを処理し、結果をアプリケーションにストリーミングで返します。

この API では任意の Workflow を実行できます。単一モデルの推論を行う場合は、モデルをラップする Workflow を作成してください。

**サポートされている入力ソース:**

* **Webカメラ**: MediaStream API を介したブラウザまたはデバイスのカメラ
* **RTSP**: IP カメラ、または RTSP 対応のソース全般。クラウド関数が接続できるよう、URL はインターネットから公開アクセス可能である必要があります。URL 内でのユーザー名/パスワードによる認証がサポートされています（例: `rtsp://user:pass@host/stream`).
* **動画ファイル**: Data Channel 経由でアップロードされた録画済み動画

### 仕組み

ストリーミング セッションを開始すると、SDK は Roboflow の API を呼び出して WebRTC 接続を初期化します。API はあなたの Workflow を実行するサーバーレス関数を起動します。接続が確立されると、データは 2 つの WebRTC チャネルを通って流れます:

#### Video Track

動画フレームを双方向にストリーミングします。Webカメラや動画ファイルからフレームを送信し、注釈付き/処理済みのフレームを受信します。Video Track はリアルタイム表示向けに最適化されており、解像度を調整し、利用可能な帯域幅に応じてフレームをドロップする場合があります。接続が安定するにつれて品質は向上します。

WebRTC の輻輳制御により、特に 1920×1080・30 FPS のような高解像度では、品質と FPS が最大性能まで上がるのに最大 1 分かかることがあります。

#### Data Channel

構造化された推論結果を JSON メッセージとして送信します。これには、予測、座標、分類など、すべての Workflow 出力データが含まれます。Video Track とは異なり、Data Channel はライブのカメラ映像に追従するための最適化を行わず、信頼性の高い順序付き配信を提供します。動画ファイルを処理する場合は、ファイルを Data Channel 経由でアップロードし、同じ方法で結果を受け取ることで、動画全体を完全に処理できます。

両方のチャネルを同時に使用できます。たとえば、アプリケーション内で注釈付き動画を表示しながら、構造化された予測データも処理できます。

### リージョンと GPU プラン

指定して `requested_region` と `requested_plan` を設定に含めることで、ストリームの処理場所と方法を制御できます。

**リージョン:** `us` （米国）、 `eu` （ヨーロッパ）、 `ap` （アジア太平洋）

遅延を最小限にするため、ユーザーまたは動画ソースに最も近いリージョンを選択してください。

**GPU プラン:**

* `webrtc-gpu-medium`: 既定で、ほとんどの Workflow に推奨
* `webrtc-gpu-small`: 低コスト。Medium があなたのユースケースで問題なく動作することを確認した後に試してください。
* `webrtc-gpu-large`: SAM3 および SAM3 を使用する Rapid Models に必要（約 5 FPS を想定）

### 同時実行制限

現在、各 Workspace は既定で **10 の同時ストリーム** に制限されています。これは乱用を防ぎ、全体的なサービスの信頼性を確保するためです。

より高い上限が必要な場合は、営業チームまでご連絡ください。ご要望に応じて調整いたします。

### Pricing

料金は、選択した GPU プランに基づいて 1 時間ごとに請求されます。課金は、サーバーレス関数が起動し、WebRTC 接続が確立された時点で開始されます。現在の料金は [roboflow.com/credits](https://roboflow.com/credits) をご覧ください。

### SDK

#### JavaScript

Webブラウザおよび React Native アプリケーション向けです。

```bash
npm install @roboflow/inference-sdk
```

フロントエンドコードに API キーを公開しないでください。安全を保つために、バックエンドのプロキシエンドポイントを使用してください。

* [NPM パッケージ](https://www.npmjs.com/package/@roboflow/inference-sdk)
* [サンプルアプリケーション](https://github.com/roboflow/inferenceSampleApp)
* [ドキュメント](https://docs.roboflow.com/deploy/sdks/web-browser/web-inference-sdk)

#### Python

バックエンドアプリケーション、RTSP ストリーム、および動画ファイル処理向けです。

```bash
pip install inference-sdk[webrtc]
```

* [PyPI パッケージ](https://pypi.org/project/inference-sdk/)
* [サンプルスクリプト](https://github.com/roboflow/inference/tree/main/examples/webrtc_sdk) （Webカメラ、RTSP、動画ファイル）

### 設定

ストリーミング セッションを作成する際は、動作を制御するために `StreamConfig` オブジェクトを渡してください:

* `stream_output`: Video Track 経由でストリームする Workflow 出力名のリスト
* `data_output`: Data Channel 経由で送信する Workflow 出力名のリスト
* `requested_plan`: GPU プラン（上記参照）
* `requested_region`: リージョンコード（`us`, `eu`、つまり `ap`)
* `realtime_processing`: `True` （既定）の場合、処理が追いつかないときにフレームをドロップします
* `workflow_parameters`: Workflow に渡すパラメーターの辞書

### コードなしでのテスト

Roboflow の Web インターフェースで直接ストリーミングをテストできます:

1. に移動 [app.roboflow.com](https://app.roboflow.com)
2. を開く **Workflows** タブ
3. Workflow を選択して **Test Workflow**
4. をクリックし、ソース（Webカメラ、RTSP、または Video File）を選択して GPU/リージョン設定を構成します
5. クリック **Run**
