Low-Latency HLS

Apple은 확장성을 유지하면서 저지연 비디오 스트리밍을 가능하게 하는 Low-Latency HLS (LLHLS)를 지원합니다. LLHLS를 사용하면 종단 간(end-to-end) 지연 시간이 약 2초에서 5초 사이인 방송이 가능합니다. OvenMediaEngine은 v0.14.0부터 LLHLS를 공식적으로 지원합니다.

LLHLS는 HLS의 확장이므로, 기존 HLS 플레이어에서도 LLHLS 스트림을 재생할 수 있습니다. 단, 기존 HLS 플레이어는 저지연 기능을 사용하지 않고 스트림을 재생하게 됩니다.

Title
Descriptions

Container

fMP4 (Audio, Video)

Security

TLS (HTTPS)

Transport

HTTP/1.1, HTTP/2

Codec

H.264, H.265, AAC

Default URL Pattern

http[s]://{OvenMediaEngine Host}[:{LLHLS Port}]/{App Name}/{Stream Name}/master.m3u8

Configuration

LLHLS를 사용하려면 아래 예시와 같이 설정의 <Publishers><LLHLS> 엘리먼트를 추가해야 합니다.

<Server>
    ...
    <Bind>
        <Publishers>
            <LLHLS>
                <!-- 
                    OME only supports h2, so LLHLS works over HTTP/1.1 on non-TLS ports. 
                    LLHLS works with higher performance over HTTP/2, 
                    so it is recommended to use a TLS port.
                -->
                <Port>80</Port>
                <TLSPort>443</TLSPort>
                <WorkerCount>1</WorkerCount>
            </LLHLS>
        </Publishers>
    </Bind>
    ...
    <VirtualHosts>
        <VirtualHost>
            <Applications>
                <Application>
                    <Publishers>
                        <LLHLS>
                            <ChunkDuration>0.2</ChunkDuration>
                            <SegmentDuration>6</SegmentDuration>
                            <SegmentCount>10</SegmentCount>
                            <CrossDomains>
                                <Url>*</Url>
                            </CrossDomains>
                        </LLHLS>
                    </Publishers>
                </Application>
            </Applications>
        </VirtualHost>
    </VirtualHosts>
    ...
</Server>
Element
Decscription

Bind

LLHLS를 제공할 HTTP 포트를 설정합니다.

ChunkDuration

부분 세그먼트(partial segment) 길이를 초 단위 소수점으로 설정합니다. 이 값은 저지연 HLS 플레이어에 영향을 줍니다. 이 값은 0.2초를 권장합니다.

SegmentDuration

세그먼트의 길이를 초 단위로 설정합니다. 따라서 값이 짧을수록 스트림이 더 빨리 시작될 수 있습니다. 하지만 값이 너무 짧으면 기존 HLS 플레이어가 불안정해집니다. Apple은 이 값을 6초로 권장합니다.

SegmentCount

재생 목록(playlist)에 나열되는 세그먼트의 수입니다. 이 값은 LLHLS 플레이어에 거의 영향을 미치지 않으므로 Apple에서 권장하는 10을 사용하십시오. 기존 HLS 플레이어의 경우 5를 권장합니다. 3 미만으로 설정하지 마십시오. 이는 실험용으로만 사용할 수 있습니다.

CrossDomains

<CrossDomain>을 통해 플레이어가 작동하는 도메인을 제어합니다. 자세한 내용은 CrossDomain 섹션을 참조하십시오.

circle-info

HTTP/2는 HTTP/1.1보다 성능이 뛰어나며, 특히 LLHLS에서 더 그렇습니다. 현재 모든 브라우저는 h2만 지원하므로 HTTP/2는 TLS 포트에서만 지원됩니다. 따라서 TLS 포트에서 LLHLS를 사용하는 것을 강력히 권장합니다.

Adaptive Bitrates Streaming (ABR)

LLHLS는 적응형 비트레이트 스트리밍을 제공할 수 있습니다. OME는 동일한 소스를 여러 품질(rendition)로 인코딩하여 플레이어에 전송합니다. 그리고 OvenPlayer를 포함한 LLHLS 플레이어는 네트워크 환경에 따라 최상의 품질을 선택합니다. 물론 이러한 플레이어들은 사용자가 수동으로 품질을 선택할 수 있는 옵션도 제공합니다.

품질(renditions) 구성 방법에 대한 내용은 Adaptive Bitrates Streaming 섹션을 참조하십시오.

CrossDomain

CrossDomains에 대한 정보는 CrossDomains 챕터를 참조해 주십시오.

Streaming

라이브 소스가 입력되고 스트림이 생성되면 LLHLS가 준비됩니다. 시청자는 OvenPlayer 또는 다른 플레이어를 사용하여 스트리밍할 수 있습니다.

입력 스트림이 이미 h.264/aac인 경우, 아래와 같이 입력 스트림을 그대로 사용할 수 있습니다. 그렇지 않거나 인코딩 품질을 변경하고 싶은 경우 트랜스코딩을 수행할 수 있습니다.

위와 같이 스트림을 생성하면, 다음 URL로 LLHLS를 재생할 수 있습니다:

http[s]://{OvenMediaEngine Host}[:{LLHLS Port}]/{App Name}/{Stream Name}/master.m3u8

기본 설정을 사용하는 경우, 다음 URL로 스트리밍을 시작할 수 있습니다:

http://{OvenMediaEngine Host}:3333/app/{Stream Name}/master.m3u8

Live Rewind

아래와 같이 LLHLS 퍼블리셔에 <DVR>을 설정하여 원하는 만큼 긴 재생 목록을 생성할 수 있습니다. 이를 통해 플레이어는 라이브 스트림을 되감고 이전 세그먼트를 재생할 수 있습니다. 과도한 메모리 사용을 방지하기 위해 OvenMediaEngine은 이전 세그먼트를 <DVR>/<TempStoragePath>의 파일에 저장하고 사용합니다. <DVR>/<MaxDuration> 만큼 저장되며, 단위는 초입니다.

ID3v2 Timed Metadata

ID3 Timed metadata는 Send Event API를 통해 LLHLS 스트림으로 전송될 수 있습니다.

Dump

VoD를 위해 LLHLS 스트림을 덤프할 수 있습니다. <Application>/<Publishers>/<LLHLS>에 다음을 설정하여 활성화할 수 있습니다. 덤프 기능은 Dump API를 통해서도 제어할 수 있습니다.

<TargetStreamName> 덤프할 스트림의 이름입니다. *?를 사용하여 스트림 이름을 필터링할 수 있습니다.

<Playlists> 함께 덤프할 마스터 재생 목록(master playlist) 파일의 이름입니다.

<OutputPath> 출력할 폴더입니다. <OutputPath>에는 아래 표에 표시된 매크로를 사용할 수 있습니다. 지정된 폴더에 대한 쓰기 권한이 있어야 합니다.

Macro
Description

${VHostName}

Virtual Host Name

${AppName}

Application Name

${StreamName}

Stream Name

${YYYY}

Year

${MM}

Month

${DD}

Day

${hh}

Hour

${mm}

Minute

${ss}

Second

${S}

Timezone

${z}

UTC offset (ex: +0900)

${ISO8601}

Current time in ISO8601 format

Multiple Audio Track (Multilingual Audio)

OvenMediaEngine은 LLHLS에서 다중 오디오 트랙을 지원합니다. Provider를 통해 여러 오디오 신호가 입력되면, LLHLS Publisher는 이를 활용하여 여러 오디오 트랙을 제공할 수 있습니다.

SRT 또는 Scheduled Channel을 통해 여러 오디오 신호를 보내기만 하면, LLHLS Publisher는 다중 오디오 트랙을 제공할 수 있습니다. 예를 들어 OBS에서 SRT를 통해 여러 오디오 신호를 전송하려면, 여러 오디오 트랙을 선택하고 고급 오디오 속성(Advanced Audio Properties)을 구성하여 각 트랙에 적절한 오디오를 할당해야 합니다.

수신되는 오디오 신호에는 레이블이 없으므로, 다음과 같이 각 오디오 신호에 레이블을 할당하여 사용성을 향상시킬 수 있습니다.

Labeling in SRT Provider

SRT 프로바이더의 오디오 신호에 레이블을 할당하려면, 아래와 같이 <AudioMap>을 구성하십시오:

Labeling in Scheduled Channel

DRM

OvenMediaEngine은 버전 0.16.0부터 간단한 설정으로 LLHLS에서 Widevine과 Fairplay를 지원합니다.

circle-exclamation

LLHLS Publisher 구성에 DRM 정보를 포함하려면 다음 단계를 따르십시오. <InfoFile> 경로는 Server.xml이 위치한 디렉터리를 기준으로 한 상대 경로나 절대 경로로 설정할 수 있습니다.

<DRM>/<InfoFile>을 분리한 것은 파일의 동적 변경을 허용하기 위함입니다. <DRM>/<InfoFile>의 모든 수정 사항은 새로운 스트림이 생성될 때 적용됩니다.

DRM Info File의 구조는 다음과 같습니다:

여러 개의 <DRM>을 설정할 수 있습니다. DRM이 적용되어야 할 <VirtualHostName>, <ApplicationName>, 그리고 <StreamName>을 지정합니다. <StreamName>은 와일드카드 정규식을 지원합니다.

현재 <CencProtectScheme>"cbcs""cenc"만 지원합니다. 가까운 시일 내에 다른 스킴이 추가될 가능성은 제한적입니다.

<KeyId>, <Key>, <Iv>, <Pssh> 값은 필수이며 DRM 제공업체로부터 받아야 합니다. <FairPlayKeyUrl>은 FairPlay에만 필요하며 스트림에서 FairPlay를 활성화하려면 필수입니다. 이 또한 DRM 제공업체에서 제공합니다.

OvenPlayer에는 이제 DRM 관련 옵션이 포함되어 있습니다. DRM을 활성화하고 License URL을 입력하십시오. 이제 콘텐츠가 안전하게 보호됩니다.

Pallycon DRM

triangle-exclamation

OvenMediaEngine은 Pallyconarrow-up-right과 통합되어 LLHLS 스트림에 DRM을 더 쉽게 적용할 수 있습니다.

Pallycon을 연동하려면 DRMInfo.xml 파일을 다음과 같이 구성하십시오.

<DRMProvider>Pallycon으로 설정합니다. 그런 다음 예시와 같이 필요한 정보를 설정합니다. <KMSUrl><KMSToken>은 Pallycon 콘솔에서 제공되는 값입니다. <ContentId>${VHostName}, ${AppName}, ${StreamName} 매크로를 사용하여 생성할 수 있습니다.

Last updated