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

업로드합니다 `.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>
