> 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/ko/self-hosted/enterprise/deployment-manager/services/rtsp-simulator.md).

# RTSP 시뮬레이터

카메라 없이 추론 파이프라인을 테스트할 수 있도록 업로드한 비디오 파일을 루프되는 RTSP 소스로 스트리밍합니다.

RTSP Simulator는 업로드한 비디오 파일을 실시간 RTSP 스트림으로 바꾸는 엣지 컨테이너 서비스입니다. 물리적 카메라를 설치하기 전에 기기에서 추론 파이프라인을 구축하고 테스트하거나, Workflow에 대해 알려진 클립을 재생하는 데 사용할 수 있습니다.

업로드하는 `.mp4` 웹 인터페이스나 REST API를 통해 파일을 업로드하거나 Deployment Manager에서 비디오를 선택합니다. 이 서비스는 이를 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>웹 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>웹 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>

여러 클라이언트가 동시에 스트림을 읽을 수 있습니다.

## 비디오 형식

웹 UI, CLI 및 API는 오직 `.mp4` .mp4 파일만 허용합니다. 업로드는 자동으로 트랜스코딩되므로 스트림은 모든 RTSP 클라이언트에서 작동합니다:

* 코덱: H.264, Baseline 프로파일
* 픽셀 형식: yuv420p
* 오디오: 제거됨, 비디오만
* 최대 파일 크기: 기본값 5GB

## Roboflow 비디오 사용

기기를 로컬 네트워크에서 접근할 수 없을 때 Deployment Manager에서 비디오를 설정합니다. 기기가 비디오를 다운로드하여 스트리밍합니다.

{% stepper %}
{% step %}

## 설정 열기

기기의 Configuration 탭에서 RTSP Simulator 카드의 "Configure"(톱니바퀴 아이콘)를 선택합니다.
{% endstep %}

{% step %}

## 업로드

"Video source"에서 "Roboflow video"를 선택한 다음 "Upload Video"를 선택하고 `.mp4` 또는 `.mov` 파일을 선택합니다. 비디오는 Workspace의 Asset Library에 저장됩니다.
{% endstep %}

{% step %}

## 저장

필요에 따라 변환 및 스트리밍 설정을 변경할 수 있습니다. 사이트가 Secure Gateway를 통해 Roboflow에 연결되는 경우, 해당 주소를 "Secure Gateway (optional)"에 입력합니다. "Save Configuration"을 선택합니다. 변경 사항은 기기가 재시작된 후 적용됩니다.
{% endstep %}
{% endstepper %}

카드에는 비디오 이름, RTSP URL, 다운로드 및 스트림 상태가 표시됩니다. Roboflow 비디오가 설정되어 있는 동안에는 로컬 웹 UI와 CLI 컨트롤이 잠깁니다. 로컬 업로드로 돌아가려면 "Local upload"를 선택하고 저장합니다.

## 웹 인터페이스 사용

열기 `http://<device-ip>:8080` 브라우저에서.

{% stepper %}
{% step %}

## 업로드

파일 하나를 끌어다 `.mp4` 페이지에 놓습니다. 파일이 업로드되어 스트리밍 형식으로 변환됩니다.
{% endstep %}

{% step %}

## 재생

"Play"를 선택하여 스트리밍을 시작합니다. 비디오는 무한히 반복되며 RTSP 서버에 게시됩니다.
{% endstep %}

{% step %}

## 연결

추론 파이프라인, Deployment Manager 스트림 또는 모든 RTSP 클라이언트를 `rtsp://<device-ip>:8554/stream`.
{% endstep %}

{% step %}

## 중지

"Stop"을 선택하여 스트림을 종료하고 변환된 파일을 제거합니다.
{% endstep %}
{% endstepper %}

배포에서 시뮬레이션 스트림을 사용하려면 카메라와 동일한 방식으로 기기에 스트림 소스로 추가합니다.  [스트림 추가](/deployment/ko/self-hosted/enterprise/deployment-manager/setting-up/add-a-stream.md).

## CLI 사용

헤드리스 또는 SSH 전용 액세스의 경우, `rtsp-cli` 도구가 기기에서 대화형 터미널 인터페이스를 제공합니다.

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

웹 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>에서 비디오를 선택하고 변환합니다 <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`. 자세한 내용은 [서비스](/deployment/ko/self-hosted/enterprise/deployment-manager/services.md#using-the-apis) 기기 내 모든 서비스 API에 공통으로 적용되는 규칙을 참조하세요.

{% hint style="warning" %}
이 API는 인증이 없으며, 실행 중인 스트림을 중지하고 업로드된 비디오를 삭제할 수 있습니다. 포트 8080에 접근할 수 있는 모든 것은 두 작업을 모두 수행할 수 있습니다.
{% endhint %}

### 일반적인 흐름

다음으로 비디오를 업로드합니다: `/upload`, 스트림은 다음으로 시작합니다: `/play`, 다음으로 확인합니다: `/status`, 다음으로 중지합니다: `/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` 만 허용되며, 업로드가 시작되기 전에 실행 중인 스트림이 중지됩니다. 선택적 `설정` 부분은 트랜스코딩 중 적용되는 변환 설정의 JSON 문자열입니다. 변환된 파일에 포함되므로 나중에 변경하려면 다시 업로드해야 합니다.

{% openapi src="/files/a3f00c5f2efc8e280da1039b61807567944d8671" path="/upload" method="post" %}
[edge-rtsp-simulator.yaml](https://1826078061-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/a3f00c5f2efc8e280da1039b61807567944d8671" path="/play" method="post" %}
[edge-rtsp-simulator.yaml](https://1826078061-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/a3f00c5f2efc8e280da1039b61807567944d8671" path="/stop" method="post" %}
[edge-rtsp-simulator.yaml](https://1826078061-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/a3f00c5f2efc8e280da1039b61807567944d8671" path="/delete" method="post" %}
[edge-rtsp-simulator.yaml](https://1826078061-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/a3f00c5f2efc8e280da1039b61807567944d8671" path="/status" method="get" %}
[edge-rtsp-simulator.yaml](https://1826078061-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/a3f00c5f2efc8e280da1039b61807567944d8671" path="/info" method="get" %}
[edge-rtsp-simulator.yaml](https://1826078061-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/a3f00c5f2efc8e280da1039b61807567944d8671" path="/stream-settings" method="get" %}
[edge-rtsp-simulator.yaml](https://1826078061-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/a3f00c5f2efc8e280da1039b61807567944d8671" path="/stream-settings" method="post" %}
[edge-rtsp-simulator.yaml](https://1826078061-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 %}

## 구성

### 환경 변수

기기의 Configuration 탭에서 서비스에 이 값을 설정합니다. 다음을 참조하세요. [기기 구성 업데이트](/deployment/ko/self-hosted/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>최대 업로드 크기(바이트, 5GB)</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>웹 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>
