Configuration Structure

OvenMediaEngine은 XML 설정 파일을 사용합니다. 만약 systemctl start ovenmediaengine 명령어로 OvenMediaEngine을 시작했다면, 설정 파일은 다음 경로에서 로드됩니다.

/usr/share/ovenmediaengine/conf/Server.xml

커맨드 라인에서 직접 실행하는 경우, 다음 경로에서 설정 파일을 로드합니다:

/<OvenMediaEngine Binary Path>/conf/Server.xml

Docker 컨테이너에서 실행하는 경우, 설정 파일의 경로는 다음과 같습니다:

# For Origin mode
/opt/ovenmediaengine/bin/origin_conf/Server.xml
# For Edge mode
/opt/ovenmediaengine/bin/edge_conf/Server.xml

Server

<Server>는 설정 파일의 루트 엘리먼트입니다. version 속성은 설정 파일의 버전을 나타냅니다. OvenMediaEngine은 이 버전 정보를 사용하여 설정 파일이 호환 가능한 버전인지 확인합니다.

<?xml version="1.0" encoding="UTF-8"?>
<Server version="8">
    <Name>OvenMediaEngine</Name>
    <IP>*</IP>
    <PrivacyProtection>false</PrivacyProtection>
    <StunServer>stun.l.google.com:19302</StunServer>
    <Bind>...</Bind>
    <VirtualHosts>...</VirtualHosts>
</Server>

IP

IP address는 OvenMediaEngine이 바인딩될 주소입니다. *로 설정하면 시스템의 모든 IP 주소를 사용합니다. 특정 IP를 입력하면 해당 Host는 해당 IP만 사용합니다.

PrivacyProtection

PrivacyProtection은 모든 기록에서 클라이언트의 개인 정보(IP, Port)를 삭제하여 GDPR, PIPEDA, CCPA, LGPD 등을 준수하기 위한 옵션입니다. 이 옵션을 켜면 모든 로그와 REST API에서 클라이언트의 IP와 Port가 xxx.xxx.xxx.xxx:xxx로 변환됩니다.

StunServer

OvenMediaEngine은 WebRTC를 통해 플레이어에 연결하기 위해 자신의 공인 IP(Public IP)를 알아야 합니다. 서버는 시그널링 시 플레이어에게 <IceCandidates>와 TURN 서버 주소를 알려줘야 하며, 이 정보는 플레이어가 접속할 수 있는 IP여야 합니다. 그러나 Docker나 AWS와 같은 환경에서는 로컬 인터페이스를 통해 공인 IP를 얻을 수 없으므로, STUN 서버를 사용하여 공인 IP를 얻는 방법을 제공합니다 (버전 0.11.1부터 사용 가능).

OvenMediaEngine이 설정된 STUN 서버와의 통신을 통해 공인 IP를 획득하면, <IceCandidate><TcpRelay>에서 * 또는 ${PublicIP}를 사용하여 공인 IP를 설정할 수 있습니다.

Bind

<Bind>는 사용할 서버 포트에 대한 설정입니다. Bind는 <Providers><Publishers>로 구성됩니다. Providers는 스트림 입력을 위한 서버이고, Publishers는 스트리밍 출력을 위한 서버입니다.

각 엘리먼트의 의미는 다음 표와 같습니다:

Element
Description

Managers/API

REST API 서버 포트

RTMP

RTMP 스트림 입력을 위한 RTMP 포트

SRT

SRT 스트림 입력을 위한 SRT 포트

MPEGTS

MPEGTS/UDP 스트림 입력을 위한 MPEGTS 포트

WebRTC

WebRTC를 위한 포트. 자세한 정보는 WebRTC IngestWebRTC Streaming 챕터를 참조하세요.

OVT

Origin 서버를 위한 OVT 포트. OVT는 Origin-Edge 통신을 위해 OvenMediaEngine에서 정의한 프로토콜입니다. 자세한 정보는 Origin-Edge Clustering 챕터를 참조하세요.

LLHLS

LLHLS 스트리밍을 위한 HTTP(s) 포트

Virtual Host

<VirtualHosts>는 단일 머신에서 하나 이상의 스트리밍 서버를 실행하는 방법입니다. OvenMediaEngine은 IP 기반 가상 호스트와 도메인 기반 가상 호스트를 지원합니다. "IP 기반"은 서로 다른 IP 주소를 설정하여 스트리밍 서버를 여러 개로 분리하는 것을 의미하며, "도메인 기반"은 스트리밍 서버가 동일한 IP 주소를 사용하더라도 서로 다른 도메인 이름을 설정하여 분리하는 것을 의미합니다.

<VirtualHosts><Name>, <Host>, <Origins>, <SignedPolicy>, 그리고 <Applications>로 구성됩니다.

Host

Domain은 <Names><TLS>를 가집니다. <Names>는 도메인 이름이나 IP 주소가 될 수 있습니다. *로 설정하면 모든 도메인과 IP 주소를 허용함을 의미합니다.

SignedPolicy

SignedPolicy는 사용자의 권한과 시간을 제한하는 모듈입니다. 예를 들어, 운영자는 인증된 사용자에게 60초 동안 접속 가능한 RTMP URL을 배포하고 RTMP 전송을 1시간으로 제한할 수 있습니다. 제공된 URL은 60초 후에 파기되며, 1시간 후에 전송이 자동으로 중단됩니다. SignedPolicy URL을 제공받은 사용자는 인증되었기 때문에 제공된 URL 이외의 리소스에는 접근할 수 없습니다. 자세한 내용은 SignedPolicy 챕터를 참조하세요.

Origins

Origins(우리는 OriginMap이라고도 부름)은 외부 서버에서 스트림을 가져오는(Pull) 기능입니다. 현재 Pull 프로토콜로 OVT와 RTSP를 지원합니다. OVT는 Origin-Edge 통신을 위해 OvenMediaEngine에서 정의한 프로토콜로, OVP Publisher가 켜진 다른 OvenMediaEngine으로부터 스트림을 중계할 수 있게 해줍니다. RTSP를 사용하면 외부 RTSP 서버에서 스트림을 가져와 스트림을 생성합니다. 이렇게 가져온 스트림은 WebRTC, HLS, MPEG-DASH로 스트리밍 될 수 있습니다.

Origin은 <Location><Pass> 엘리먼트를 가집니다. Location은 들어오는 요청에 대한 URI 패턴입니다. 요청 URL이 Location과 일치하면 OvenMediaEngine은 Pass 엘리먼트에 따라 스트림을 가져옵니다. Pass 엘리먼트에서 원본 스트림의 프로토콜과 URL을 설정할 수 있습니다.

Edge 서버를 실행하기 위해, Origin은 사용자 요청 시 Application이나 스트림이 없는 경우 이를 생성합니다. Origin-Edge에 대한 자세한 내용은 Live Source 챕터를 참조하세요.

Application

<Application>은 스트림 입력, 인코딩, 스트림 출력을 포함하여 스트림의 동작을 정의할 수 있는 다양한 엘리먼트로 구성됩니다. 즉, 원하는 만큼 많은 <Application>을 생성하고 다양한 스트리밍 환경을 구축할 수 있습니다.

<Application>은 다음과 같이 <Name><Type>을 설정해야 합니다:

  • <Name>은 스트리밍 URL을 구성하는 데 사용됩니다.

  • <Type><Application>의 동작을 정의합니다. 현재는 live 타입만 존재합니다.

OutputProfiles

<OutputProfile>은 출력 스트림을 생성하는 설정입니다. 출력 스트림 이름은 <OutputStreamName>으로 설정할 수 있으며, 트랜스코딩 속성은 <Encodes>를 통해 설정할 수 있습니다. 하나의 입력을 여러 출력 스트림으로 스트리밍하려는 경우 여러 개의 <OutputProfile>을 설정할 수 있습니다.

<OutputProfiles>에 대한 자세한 정보는 트랜스코딩 챕터를 참조하세요.

Providers

<Providers>는 미디어 소스에서 들어오는 스트림을 수신(Ingest)합니다. 자세한 정보는 Live Source 챕터를 참조하세요.

Publishers

<Publishers>에서 출력 스트림 동작을 설정할 수 있습니다. <Publishers>/<ThreadCount>는 각 프로토콜 구성 요소에서 사용하는 스레드 수입니다.

circle-info

동시에 많은 사용자에게 스트림을 전송하려면 많은 스레드가 필요합니다. 따라서 코어 수가 많은 CPU를 사용하고 <ThreadCount>를 CPU 코어 수와 동일하게 설정하는 것이 좋습니다.

OvenMediaEngine은 현재 WebRTC, Low-Latency DASH, MPEG-DASH 및 HLS를 지원합니다. 특정 프로토콜을 사용하지 않으려면 해당 설정을 삭제할 수 있으며, 그러면 해당 프로토콜을 위한 구성 요소가 초기화되지 않습니다. 결과적으로 사용하지 않는 프로토콜 설정을 삭제함으로써 시스템 리소스를 절약할 수 있습니다.

WebRTC에 대해 자세히 알아보려면 WebRTC Streaming 챕터를, LL-DASH, MPEG-DASH, HLS에 대한 정보는 HLS & MPEG-DASH Streaming 챕터를 참조하세요.

Configuration Example

최종적으로 Server.xml은 다음과 같이 구성됩니다:

circle-info

향후 업데이트를 통해 OvenMediaEngine Enterprise의 웹 콘솔(Web Console)에서 모든 기능과 설정을 제어할 수 있게 될 예정입니다.

Last updated