> 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 Simulator는 업로드한 비디오 파일을 실시간 RTSP 스트림으로 바꾸는 엣지 컨테이너 서비스입니다. 실제 카메라가 설치되기 전에 장치에서 추론 파이프라인을 구축하고 테스트하거나, 워크플로에 대해 알려진 클립을 다시 재생하는 데 사용할 수 있습니다.

업로드합니다 `.mp4` 파일을 웹 인터페이스나 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
* 오디오: 제거됨, 비디오만
* 최대 파일 크기: 기본값은 5GB

## 웹 인터페이스 사용

열기 `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/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 %}

### 일반적인 흐름

```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` 가 허용되며, 업로드가 시작되기 전에 활성 스트림이 중지됩니다. 선택적 `설정` 부분은 트랜스코딩 중 적용되는 변환 설정의 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/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 %}

## 구성

### 환경 변수

장치의 구성 탭에서 서비스에 이 값을 설정하세요. 참조: [디바이스 구성 업데이트](/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>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>
