# Multicast

OvenMediaEngine은 `UDP` Multicast로 전달되는 MPEG-2 TS Input을 Pull할 수 있습니다. Multicast Provider는 `multicast://` URL Scheme을 사용하며, `StreamMap` 또는 [Stream Creation API](/guide/ko-kr/features/rest-api/v1/virtual-host/application/stream.md#create-stream-pull)를 통해 Stream을 생성할 수 있습니다.

<table><thead><tr><th width="217.22216796875">Item</th><th>Description</th></tr></thead><tbody><tr><td>Container</td><td>MPEG-2 TS</td></tr><tr><td>Transport</td><td>UDP Multicast</td></tr><tr><td>Codec</td><td>H.264, H.265, AAC</td></tr><tr><td>Additional Features</td><td>SCTE-35 event forwarding</td></tr></tbody></table>

## Configuration

Multicast를 사용하려면 `<Application>` 내 `<Provider>`를 활성화해야 합니다.

### Bind

Bind 설정은 선택 사항이며, Input Socket 처리 방식이나 UDP 수신 버퍼 크기를 조정해야 할 때 사용합니다:

```xml
<!-- /Server/Bind -->
<Bind>
    <Providers>
        ...
        <Multicast>
            <WorkerCount>1</WorkerCount>
            <ThreadPerSocket>false</ThreadPerSocket>
            <ReceiveBufferSize>8388608</ReceiveBufferSize>
        </Multicast>
        ...
    </Providers>
</Bind>
```

<table><thead><tr><th width="217">Property</th><th>Description</th></tr></thead><tbody><tr><td><code>WorkerCount</code></td><td>Input Socket을 처리하는 Worker Thread 수입니다.</td></tr><tr><td><code>ThreadPerSocket</code></td><td><p>각 Socket마다 전용 Thread를 사용할지 여부를 설정합니다.</p><p><code>true</code>로 설정하면 <code>WorkerCount</code> 대신 Socket별 Thread가 사용됩니다.</p></td></tr><tr><td><code>ReceiveBufferSize</code></td><td>UDP 수신 버퍼의 크기입니다. 높은 Bitrate나 큰 Burst가 발생하는 환경에서는 이 값을 조정하십시오.</td></tr></tbody></table>

### Application

아래와 같이 Application별로 Multicast Provider를 활성화할 수 있습니다:

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

## `StreamMap`

아래 예제처럼 Multicast Stream을 `StreamMap`에 등록하면 Application이 시작될 때 자동으로 생성됩니다:

```xml
<!-- /Server/VirtualHosts/VirtualHost/Applications/Application -->
<Providers>
    <Multicast>
        <StreamMap>
            <Stream>
                <Name>news_hd</Name>
                <Source>multicast://239.1.1.10:5000</Source>
                <ProbeTimeoutMsec>3000</ProbeTimeoutMsec>
            </Stream>
            <Stream>
                <Name>sports_hd</Name>
                <Source>multicast://239.1.1.11:5000?interface=eth1</Source>
                <ProbeTimeoutMsec>5000</ProbeTimeoutMsec>
            </Stream>
        </StreamMap>
    </Multicast>
</Providers>
```

<table><thead><tr><th width="217">Property</th><th>Description</th></tr></thead><tbody><tr><td><code>Name</code></td><td>OvenMediaEngine 내부에 생성될 Stream 이름입니다.</td></tr><tr><td><code>Source</code></td><td>Multicast Input URL입니다.</td></tr><tr><td><code>ProbeTimeoutMsec</code></td><td><p>Input Metadata를 기다리는 최대 시간 (밀리초)입니다.</p><ul><li>기본값은 <code>3000</code>입니다.</li></ul></td></tr></tbody></table>

또한, 같은 Application 내의 여러 Stream이 동일한 Multicast Source를 참조할 수 있습니다.

## Pull timeout and retry

Input timeout과 retry 횟수를 `Origins/Properties`에서 설정할 수 있습니다:

```xml
<!-- /Server/VirtualHosts/VirtualHost -->
<Origins>
    <Properties>
        <NoInputFailoverTimeout>3000</NoInputFailoverTimeout>
        <RetryCount>3</RetryCount>
    </Properties>
</Origins>
```

<table><thead><tr><th width="217">Property</th><th>Description</th></tr></thead><tbody><tr><td><code>NoInputFailoverTimeout</code></td><td>설정된 시간 동안 Input Packet이 도착하지 않으면 Stream을 중지하고 재연결을 시도합니다.</td></tr><tr><td><code>RetryCount</code></td><td>재연결을 시도하는 최대 횟수입니다.</td></tr></tbody></table>

## Source URL format

다음 URL 형식을 지원합니다:

```
multicast://239.1.1.1:5000
multicast://239.1.1.1:5000?interface=eth0
multicast://[ff05::111]:5000
multicast://[ff05::111]:5000?interface=eth0
```

지원하는 Query Parameter는 `interface` 하나입니다:

<table><thead><tr><th width="217">Property</th><th>Description</th></tr></thead><tbody><tr><td><code>interface</code></td><td>Multicast 그룹에 참여할 때 사용할 <code>NIC</code> 이름입니다. 이를 생략하면 OS가 Interface를 자동으로 선택합니다.</td></tr></tbody></table>

#### 제한 사항:

* Path는 지원하지 않습니다. 따라서, URL Path는 비어 있거나 `/`여야 합니다.
* Hostname을 사용할 수 있습니다. 이 경우 OvenMediaEngine이 Hostname을 해석한 뒤 첫 번째 결과를 사용합니다.
* 해석된 Hostname 결과는  Multicast IP 대역에 있어야 합니다.

## Stream Creation API를 사용하여 Pull Stream 생성하기 <a href="#pulling-streams-using-the-stream-creation-api" id="pulling-streams-using-the-stream-creation-api"></a>

앞서 설명한 것과 같이, Multicast Stream은 [Stream Creation API](/guide/ko-kr/features/rest-api/v1/virtual-host/application/stream.md#create-stream-pull)를 이용해서 생성할 수 있습니다:

```json
{
  "name": "channel1",
  "urls": [
    "multicast://239.1.1.1:5000"
  ],
  "properties": {
    "persistent": false
  }
}
```

자세한 내용은 [REST API](/guide/ko-kr/features/rest-api.md) 문서를 참조하십시오.

## Notes

* 동일한 Group과 Port에서 새로운 Sender가 시작되면, Provider가 이를 감지하고 재연결을 시도합니다.
* 재연결 중에는 새로운 Input Track Layout을 기존에 Publish된 Layout과 비교합니다.
* Stream이 Publish되려면 Input Metadata가 `ProbeTimeoutMsec` 시간 내에 준비되어야 합니다.


---

# 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/multicast.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.
