# Serverless Video Streaming API

### 概要

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

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

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

* **Webcam**：MediaStream API を介したブラウザまたはデバイスのカメラ
* **RTSP**：IP カメラや RTSP 対応の任意のソース。クラウド関数が接続できるように URL はインターネットから公開されている必要があります。URL によるユーザー名/パスワードでの認証がサポートされています（例： `rtsp://user:pass@host/stream`).
* **Video Files**：Data Channel を介してアップロードされた事前録画ビデオ

### 仕組み

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

#### Video Track

ビデオフレームを双方向にストリームします。あなたはウェブカメラやビデオファイルからフレームを送信し、注釈付き／処理済みのフレームを受信します。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 を予想）

### 価格

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

### SDKs

#### JavaScript

ウェブブラウザと 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) （webcam、RTSP、video file）

### 構成

ストリーミングセッションを作成する際に、次の `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 のウェブインターフェースで直接ストリーミングをテストできます：

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