> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/deployment/ja/serufuhosuto/enterprise/deployment-manager/services/rtsp-simulator.md).

# RTSP シミュレーター

RTSP Simulator は、アップロードした動画ファイルをライブRTSPストリームに変換するエッジコンテナーサービスです。物理カメラを設置する前にデバイス上で推論パイプラインを構築・テストしたり、既知のクリップを Workflow に対して再生したりするのに使用できます。

あなたは `.mp4` ファイルを Web インターフェースまたは REST API 経由でアップロードすると、サービスが RTSP 互換形式にトランスコードし、停止するまで連続ループで結果を配信します。

{% hint style="info" %}
RTSP Simulator は Enterprise 顧客専用で利用できます。 [Roboflow の営業チームにお問い合わせください](https://roboflow.com/sales) 詳細をご覧ください。
{% endhint %}

## 接続の詳細

置き換えてください `<device-ip>` を、Deployment Manager のデバイスページに表示されている IP アドレスに。

<table data-search="false"><thead><tr><th>用途</th><th>アドレス</th></tr></thead><tbody><tr><td>RTSP ストリーム</td><td><code>rtsp://&#x3C;device-ip>:8554/stream</code></td></tr><tr><td>Web UI、REST API、Swagger ドキュメント</td><td><code>http://&#x3C;device-ip>:8080</code></td></tr></tbody></table>

<table data-search="false"><thead><tr><th>ポート</th><th>プロトコル</th><th>用途</th></tr></thead><tbody><tr><td>8080</td><td>HTTP</td><td>Web UI、REST API、Swagger ドキュメントは <code>/docs</code></td></tr><tr><td>8554</td><td>RTSP（TCP）</td><td>動画ストリームの出力。UDP 転送は無効です。UDP を優先するクライアントは TCP インターリーブにフォールバックしてネゴシエートします。</td></tr></tbody></table>

複数のクライアントが同時にストリームを読み取れます。

## 動画形式

のみ `.mp4` ファイルのみ受け付けます。アップロードは自動的にトランスコードされるため、ストリームは任意の RTSP クライアントで動作します:

* コーデック: H.264、Baseline プロファイル
* ピクセル形式: yuv420p
* 音声: なし、動画のみ
* 最大ファイルサイズ: デフォルト 5 GB

## Web インターフェースの使用

開く `http://<device-ip>:8080` をブラウザで。

{% stepper %}
{% step %}

## アップロード

を `.mp4` ファイルをページにドラッグします。ファイルはアップロードされ、ストリーミング形式に変換されます。
{% endstep %}

{% step %}

## 再生

「再生」を選択してストリーミングを開始します。動画は無期限にループし、RTSP サーバーに配信されます。
{% endstep %}

{% step %}

## 接続

推論パイプライン、Deployment Manager のストリーム、または任意の RTSP クライアントを `rtsp://<device-ip>:8554/stream`.
{% endstep %}

{% step %}

## 停止

を選択するとストリームが終了し、変換済みファイルが削除されます。
{% endstep %}
{% endstepper %}

デプロイメントでシミュレートされたストリームを使用するには、カメラと同じようにデバイス上のストリームソースとして追加します。参照: [ストリームを追加](/deployment/ja/serufuhosuto/enterprise/deployment-manager/setting-up/add-a-stream.md).

## CLI の使用

ヘッドレスまたは SSH のみでアクセスする場合、 `rtsp-cli` ツールはデバイス上に対話型のターミナルインターフェースを提供します。

```bash
docker exec -it rtsp-simulator rtsp-cli
```

Web UI を使わずに動画をインポートするには、まずそれを入力ディレクトリにコピーしてから CLI を起動し、 `I`.

```bash
scp video.mp4 user@<device-ip>:/var/lib/rfdm/rtsp-simulator/data/input/
```

<table data-search="false"><thead><tr><th>キー</th><th>コマンド</th><th>説明</th></tr></thead><tbody><tr><td><code>I</code></td><td>インポート</td><td>/data/input/ から動画を選択して変換します <code>/data/input/</code></td></tr><tr><td><code>P</code></td><td>再生</td><td>RTSP ストリーミングを開始</td></tr><tr><td><code>S</code></td><td>停止</td><td>ストリーミングを停止し、変換済みファイルを削除</td></tr><tr><td><code>D</code></td><td>削除</td><td>動画ファイルを削除</td></tr><tr><td><code>C</code></td><td>設定</td><td>ストリーム設定を調整（ビットレート、バッファー、遅延）</td></tr><tr><td><code>R</code></td><td>更新</td><td>状態表示を更新</td></tr><tr><td><code>Q</code></td><td>終了</td><td>CLI を終了</td></tr></tbody></table>

## ストリームのテスト

任意の RTSP プレーヤーで接続して、ストリームが生きていることを確認します。

{% tabs %}
{% tab title="VLC" %}

```bash
vlc rtsp://<device-ip>:8554/stream
```

{% endtab %}

{% tab title="ffplay" %}
ストリームは TCP のみで配信されるため、ffplay に UDP を最初に試させるのではなく、TCP 転送を強制してください。

```bash
ffplay -rtsp_transport tcp rtsp://<device-ip>:8554/stream
```

{% endtab %}
{% endtabs %}

## HTTP API

すべてのエンドポイントは JSON を返します。対話型 Swagger ドキュメントは次で配信されます: `http://<device-ip>:8080/docs`です。詳細は [Services](/deployment/ja/serufuhosuto/enterprise/deployment-manager/services.md#using-the-apis) は、デバイス上のすべてのサービス API に共通するルールを参照してください。

{% hint style="warning" %}
API には認証がなく、実行中のストリームを停止したり、アップロード済み動画を削除したりできます。ポート 8080 に到達できるものはすべて、両方実行できます。
{% endhint %}

### 典型的な流れ

```bash
curl -X POST http://<device-ip>:8080/upload -F "file=@video.mp4"
curl -X POST http://<device-ip>:8080/play
curl http://<device-ip>:8080/status
curl -X POST http://<device-ip>:8080/stop
```

{% hint style="warning" %}
この `rtsp_url` が返す `/play` と `/status` 常に `localhost`と名付けます。これは、サービスが自分自身の視点から URL を報告するためです。デバイス上で実行されているコンシューマーだけが、そのまま使用できます。それ以外の場所では、デバイスのアドレスに置き換えてください: `rtsp://<device-ip>:8554/stream`.

ポートは `RTSP_PORT`で、既定値は `8554` ですが、デバイスごとに設定可能です。 `rtsp_port` からの `/info` を参照し、デフォルトを想定しないでください。
{% endhint %}

`/stop` は、ディスク容量を確保するために元のファイルと変換済みファイルの両方も削除するため、次の `/play`.

### アップロード

のみ `.mp4` が受け付けられる前に、先にアクティブなストリームが停止されます。オプションの `settings` 部分は、トランスコード中に適用される変換設定の JSON 文字列です。変換済みファイルに埋め込まれるため、後で変更するには再アップロードが必要です。

```bash
curl -X POST http://<device-ip>:8080/upload \
  -F "file=@video.mp4" \
  -F 'settings={"target_fps": 30, "crf_quality": 23, "max_width": 1920}'
```

{% openapi src="/files/1b5e8ca9ba76ea921d2ed73ce91075adad63bc9c" path="/upload" method="post" %}
[edge-rtsp-simulator.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-1608d6873191fab7e4d614a21aa77a56bab11279%2Fedge-rtsp-simulator.yaml?alt=media)
{% endopenapi %}

### ストリーミング

{% openapi src="/files/1b5e8ca9ba76ea921d2ed73ce91075adad63bc9c" path="/play" method="post" %}
[edge-rtsp-simulator.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-1608d6873191fab7e4d614a21aa77a56bab11279%2Fedge-rtsp-simulator.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/1b5e8ca9ba76ea921d2ed73ce91075adad63bc9c" path="/stop" method="post" %}
[edge-rtsp-simulator.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-1608d6873191fab7e4d614a21aa77a56bab11279%2Fedge-rtsp-simulator.yaml?alt=media)
{% endopenapi %}

`/delete` は、ストリームが動作していなくても動画ファイルを削除し、動作している場合は先に停止します。

{% openapi src="/files/1b5e8ca9ba76ea921d2ed73ce91075adad63bc9c" path="/delete" method="post" %}
[edge-rtsp-simulator.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-1608d6873191fab7e4d614a21aa77a56bab11279%2Fedge-rtsp-simulator.yaml?alt=media)
{% endopenapi %}

### 状態

`ストリーミング` は次のとき true になります `components.mediamtx.healthy` （ストリーミングサーバー）と `components.ffmpeg_process.running` （変換と配信のプロセス）の両方が true の場合です。 `components.stream` エントリはそれをゲートしません: `components.stream.source_ready` は、起動中に一時的に false になることがありますが、 `ストリーミング` はすでに true を読み取るため、それは正常です。障害のあるストリームを特定する最速の方法は、 `components` を確認して、再起動する前にどの部分が不健全かを見極めることです。

{% openapi src="/files/1b5e8ca9ba76ea921d2ed73ce91075adad63bc9c" path="/status" method="get" %}
[edge-rtsp-simulator.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-1608d6873191fab7e4d614a21aa77a56bab11279%2Fedge-rtsp-simulator.yaml?alt=media)
{% endopenapi %}

`/info` は、空きディスク容量や最大アップロードサイズを含む、サービスが動作している制限を報告します。大きなファイルを投入する前に確認する価値があります。

{% openapi src="/files/1b5e8ca9ba76ea921d2ed73ce91075adad63bc9c" path="/info" method="get" %}
[edge-rtsp-simulator.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-1608d6873191fab7e4d614a21aa77a56bab11279%2Fedge-rtsp-simulator.yaml?alt=media)
{% endopenapi %}

### ストリーム設定エンドポイント

再生設定はアップロード設定とは異なります。これらはストリーミング時に適用され、再アップロードせずにセッション間で変更できます。更新は次の `/play`で有効になり、現在実行中のストリームには適用されません。

{% openapi src="/files/1b5e8ca9ba76ea921d2ed73ce91075adad63bc9c" path="/stream-settings" method="get" %}
[edge-rtsp-simulator.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-1608d6873191fab7e4d614a21aa77a56bab11279%2Fedge-rtsp-simulator.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/1b5e8ca9ba76ea921d2ed73ce91075adad63bc9c" path="/stream-settings" method="post" %}
[edge-rtsp-simulator.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-1608d6873191fab7e4d614a21aa77a56bab11279%2Fedge-rtsp-simulator.yaml?alt=media)
{% endopenapi %}

## 設定

### 環境変数

デバイスの設定タブで、サービスに対してこれらを設定します。参照: [デバイス設定を更新](/deployment/ja/serufuhosuto/enterprise/deployment-manager/making-changes/update-device-configuration.md).

<table data-search="false"><thead><tr><th>変数</th><th>デフォルト</th><th>説明</th></tr></thead><tbody><tr><td><code>MAX_FILE_SIZE</code></td><td><code>5368709120</code></td><td>最大アップロードサイズ（バイト単位、5 GB）</td></tr><tr><td><code>RTSP_PORT</code></td><td><code>8554</code></td><td>RTSP サーバーポート</td></tr><tr><td><code>WEB_PORT</code></td><td><code>8080</code></td><td>Web UI と API のポート</td></tr><tr><td><code>LOG_LEVEL</code></td><td><code>INFO</code></td><td>ログ詳細度： <code>DEBUG</code>, <code>INFO</code>, <code>WARNING</code>、または <code>ERROR</code></td></tr></tbody></table>

### アップロード設定

これらは変換中に適用されるため、変更するには動画を再アップロードする必要があります。

<table data-search="false"><thead><tr><th>設定</th><th>デフォルト</th><th>説明</th></tr></thead><tbody><tr><td><code>target_fps</code></td><td>元の</td><td>ターゲットフレームレート、1～120。元のままにするには省略します</td></tr><tr><td><code>crf_quality</code></td><td><code>23</code></td><td>品質レベル、0～51（18 は高、23 は中、28 は低）</td></tr><tr><td><code>max_width</code></td><td>元の</td><td>縮小時の最大幅、320～7680。元のままにするには省略します</td></tr></tbody></table>

### ストリーム設定

これらは再生時に適用され、CLI の設定メニューまたは `/stream-settings` エンドポイントから、ストリーミングセッション間で変更できます。

<table data-search="false"><thead><tr><th>設定</th><th>デフォルト</th><th>説明</th></tr></thead><tbody><tr><td><code>max_bitrate_kbps</code></td><td><code>5000</code></td><td>最大ビットレート（kbps）、100～100,000</td></tr><tr><td><code>buffer_size_kb</code></td><td><code>3000</code></td><td>バッファーサイズ（KB）、100～50,000</td></tr><tr><td><code>max_delay_ms</code></td><td><code>500</code></td><td>最大遅延（ミリ秒）、50～5,000</td></tr></tbody></table>
