# RTMP

RTMP는 라이브 스트리밍에서 가장 널리 사용되는 프로토콜 중 하나입니다.

<table><thead><tr><th width="216.6666259765625">Item</th><th>Description</th></tr></thead><tbody><tr><td>Container</td><td>FLV</td></tr><tr><td>Transport</td><td>TCP</td></tr><tr><td>Codec</td><td>H.264, AAC / H.265 (E-RTMP only)</td></tr></tbody></table>

## Configuration

`<Providers>`는 미디어 소스로부터 들어오는 스트림을 수신합니다. OvenMediaEngine은 RTMP 프로토콜을 지원하며, 다음과 같이 설정할 수 있습니다:

### Bind

```xml
<!-- /Server/Bind/Providers -->
<Providers>
    ...
    <RTMP>
        <Port>1935</Port>
        <WorkerCount>1</WorkerCount>
        <ThreadPerSocket>false</ThreadPerSocket>
    </RTMP>
    ...
</Providers>
```

<table><thead><tr><th width="217.5556640625">Property</th><th>Description</th></tr></thead><tbody><tr><td><code>Port</code></td><td>들어오는 RTMP 연결을 수신하는 TCP 포트 번호를 지정합니다.</td></tr><tr><td><p><code>WorkerCount</code></p><ul><li>Default : 1</li></ul></td><td>RTMP 소켓 처리를 위한 워커 스레드 수를 정의합니다. RTMP 세션 수가 증가하면 이 값을 늘려 트래픽을 보다 효율적으로 분산할 수 있습니다.</td></tr><tr><td><p><code>ThreadPerSocket</code></p><ul><li>Default : false</li></ul></td><td>각 소켓에 대해 전용 스레드를 사용할지 여부를 결정합니다. true로 설정하면 <code>WorkerCount</code>는 무시되며, 각 세션 연결 시마다 새로운 스레드가 생성되고 세션 종료 시 종료됩니다.</td></tr></tbody></table>

{% hint style="warning" %}
`ThreadPerSocket`을 사용하면 AdmissionWebhooks 처리 중 Control Server의 응답을 기다리는 동안 특정 세션 스레드가 블로킹되어 다른 세션이 지연되는 문제를 방지할 수 있습니다. 하지만 너무 많은 세션이 연결되면 스레드 컨텍스트 스위칭 오버헤드가 매우 커질 수 있습니다. 실제 16코어 시스템 기준으로 약 100개의 세션까지는 문제없이 동작하는 사례가 있습니다.
{% endhint %}

### Application

RTMP 입력은 각 애플리케이션 단위로 활성화/비활성화할 수 있습니다. 아래 설정은 해당 애플리케이션에서 RTMP 입력 기능을 활성화합니다.

```xml
<!-- /Server/VirtualHosts/VirtualHost/Applications/Application -->
<Providers>
    ...
    <RTMP />
    ...
</Providers>
```

## RTMP live stream

RTMP 기반 인코더를 사용하여 라이브 스트림을 구성하려면 `Server.xml`에서 다음 설정이 필요합니다:

```xml
<!-- /Server/VirtualHosts/VirtualHost/Applications/Application -->
<Providers>
    <RTMP>
        <BlockDuplicateStreamName>true</BlockDuplicateStreamName>
        ...
    </RTMP>
</Providers>
```

* `<BlockDuplicateStreamName>`은 중복된 스트림 입력에 대한 정책입니다.

`<BlockDuplicateStreamName>`은 다음 규칙으로 동작합니다.

<table><thead><tr><th width="217.3333740234375">Value</th><th>Description</th></tr></thead><tbody><tr><td><code>true</code></td><td><code>Default</code> 중복으로 입력된 새로운 스트림을 거부하고 기존 스트림을 유지합니다.</td></tr><tr><td><code>false</code></td><td>중복으로 입력된 새로운 스트림을 허용하고 기존 스트림을 종료합니다.</td></tr></tbody></table>

{% hint style="info" %}
중복 스트림 이름을 허용할 경우 여러 문제가 발생할 수 있습니다. 새로운 스트림이 입력되면 플레이어 연결이 끊어질 수 있습니다. 대부분의 인코더는 서버 연결이 끊어지면 자동 재연결 기능을 가지고 있기 때문에, 두 인코더가 서로 연결/해제를 반복하며 경쟁하게 되고 이는 재생에 심각한 문제를 초래할 수 있습니다.
{% endhint %}

## Publish

소스 스트림을 퍼블리시하려면 인코더에서 다음과 같이 설정해야 합니다:

* URL: `rtmp://{OME Host}[:{RTMP Port}]/{App Name}`
* Stream Key: `{Stream Name}`

기본 설정을 사용하는 경우 `{RTMP Port}`는 기본값인 `1935`이므로 생략할 수 있습니다. 또한 기본 설정에서는 `app`이라는 Application이 생성되어 있으므로 `{App Name}`에 `app`을 사용할 수 있습니다. Stream Key는 자유롭게 정의할 수 있으며, 이에 따라 스트리밍 URL이 변경됩니다.

또한 일부 인코더는 URL에 Stream Key를 포함할 수 있으며, 이 경우 다음과 같이 설정해야 합니다:

* URL: `rtmp://{OME Host}[:{RTMP Port}]/{App Name}/{Stream Name}`

### Example with OvenLiveKit (OvenStreamEncoder)

기본 설정을 사용하는 경우, OvenStreamEncoder 우측 상단의 URL 버튼을 클릭한 후 아래와 같이 URL을 입력합니다:

<figure><img src="/files/0jw39svtYxZ4bWKRWXk1" alt=""><figcaption></figcaption></figure>

또한 `{App Name}`과 `{Stream Name}`은 설정에 따라 원하는 값으로 변경하여 사용할 수 있습니다.

### Example with OBS

기본 설정을 사용하는 경우 OBS를 다음과 같이 설정합니다:

<figure><img src="/files/tnRG2nizSe4l1RyhypT3" alt=""><figcaption></figcaption></figure>

Stream Key는 언제든지 원하는 이름으로 설정할 수 있습니다.

## E-RTMP

Enhanced RTMP(E-RTMP)는 기존 RTMP 프로토콜의 기능을 확장한 실험적인 스트리밍 기능입니다. 주요 장점 중 하나는 기존 RTMP에서 지원하지 않는 H.265(HEVC)와 같은 최신 비디오 코덱을 지원한다는 점입니다. 이를 통해 더 높은 화질과 낮은 비트레이트를 동시에 달성할 수 있어 고효율 스트리밍 워크플로우에 적합합니다. 지원 코덱 목록은 향후 계속 확장될 예정입니다.

<table><thead><tr><th width="217.333251953125">Title</th><th>Functions</th></tr></thead><tbody><tr><td>Container</td><td>FLV</td></tr><tr><td>Transport</td><td>TCP</td></tr><tr><td>Codec</td><td>H.264, H.265, AAC</td></tr><tr><td>Additional Features</td><td>Simulcast, Multitrack</td></tr></tbody></table>

E-RTMP는 아직 실험 단계이므로 기본적으로 비활성화되어 있으며, 서버 설정에서 수동으로 활성화해야 합니다.

### How to Enable E-RTMP

E-RTMP를 활성화하려면 `Server.xml` 설정 파일을 수정하여 다음 설정을 추가해야 합니다.

```xml
<Server>
    ...
    <Modules>
        ...
        <ERTMP>
            <Enable>true</Enable>
        </ERTMP>
        ...
    </Modules>
    ...
</Server>
```

### Publish with OBS

OBS에서 E-RTMP를 사용하여 스트리밍하려면, `Output` 설정의 `Video Encoder`에서 HEVC를 지원하는 인코더를 선택해야 합니다.

<figure><img src="/files/0iRzm6RrYMdT6eG3yNeu" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ovenmediaengine-enterprise.gitbook.io/guide/ko-kr/features/live-source/rtmp.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
