HLS

circle-exclamation

MPEG-2 TS 컨테이너를 기반으로 하는 HLS는 구형 디바이스에 대한 지원을 포함하여 높은 호환성을 제공하기 때문에 여전히 유용합니다. 따라서 OvenMediaEngine은 MPEG-2 TS 컨테이너를 기반으로 하는 HLS 버전 3 이상뿐만 아니라, 조각화된(fragmented) MP4 컨테이너를 기반으로 하는 HLS 버전 7 이상(LL-HLS라고도 함)도 공식적으로 지원하기로 결정했습니다.

Title
Descriptions

Container

MPEG-2 TS

(Only supports Audio/Video muxed)

Security

TLS (HTTPS)

Transport

HTTP/1.1, HTTP/2

Codec

H.264, H.265, AAC

  • Apple Safari는 MPEG-TS 형식의 H.265(HEVC)를 지원하지 않습니다.

Default URL Pattern

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

http[s]://{OvenMediaEngine Host}[:{HLS Port}]/{App Name}/{Stream Name}/master.m3u8?format=ts

circle-info

LLHLS와 HLS 재생 주소를 구분하기 위해, HLS 재생 주소에 대해 다음 규칙을 만들었습니다:

http[s]://domain[:port]/<app name>/<stream name>/ts:<playlist file name>.m3u8

또는

http[s]://domain[:port]/<app name>/<stream name>/<playlist file name>.m3u8?format=ts

Configuration

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

<Server>
    <Bind>
        <Publishers>
            <HLS>
                <Port>13333</Port>
                <TLSPort>13334</TLSPort>
                <WorkerCount>1</WorkerCount>
            </HLS>
        </Publishers>
    </Bind>
    ...
    <VirtualHosts>
        <VirtualHost>
            <Applications>
                <Application>
                    <Publishers>
                        <HLS>
                            <SegmentCount>5</SegmentCount>
                            <SegmentDuration>4</SegmentDuration>
                            <DVR>
                                <Enable>true</Enable>
                                <EventPlaylistType>false</EventPlaylistType>
                                <TempStoragePath>/tmp/ome_dvr/</TempStoragePath>
                                <MaxDuration>600</MaxDuration>
                            </DVR>
                            <CrossDomains>
                                <Url>*</Url>
                            </CrossDomains>
                        </HLS>
                    </Publishers>
                </Application>
            </Applications>
        </VirtualHost>
    </VirtualHosts>
</Server>
Element
Decscription

Bind

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

SegmentDuration

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

SegmentCount

재생 목록(playlist)에 나열되는 세그먼트의 수입니다. HLS 플레이어의 경우 5를 권장합니다. 3 미만으로 설정하지 마십시오. 이는 실험용으로만 사용할 수 있습니다.

CrossDomains

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

DVR

Enable DVR을 켜거나 끌 수 있습니다.

EventPlaylistType m3u8 파일에 #EXT-X-PLAYLIST-TYPE: EVENT를 삽입합니다.

TempStoragePath 이전 세그먼트를 저장할 임시 폴더를 지정합니다.

MaxDuration 녹화된 파일의 최대 길이를 밀리초 단위로 설정합니다.

circle-exclamation

Playback

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

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

HLS 퍼블리셔는 기본적으로 첫 번째 비디오 트랙과 첫 번째 오디오 트랙을 사용하여 master.m3u8 재생 목록을 생성합니다. 위와 같이 스트림을 생성하면 다음 URL로 HLS를 재생할 수 있습니다:

http[s]://{OvenMediaEngine Host}[:{HLS Port}]/{App Name}/{Stream Name}/ts:mster.m3u8

http[s]://{OvenMediaEngine Host}[:{HLS Port}]/{App Name}/{Stream Name}/master.m3u8?format=ts

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

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

http://{OvenMediaEngine Host}:3333/{App Name}/{Stream Name}/master.m3u8?format=ts

Adaptive Bitrates Streaming (ABR)

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

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

HLS 퍼블리셔는 기본적으로 첫 번째 비디오 트랙과 첫 번째 오디오 트랙을 사용하여 master.m3u8 재생 목록을 생성합니다. ABR을 위한 새 재생 목록을 생성하려면 다음과 같이 Server.xml에 추가할 수 있습니다:

circle-info

HLS에서 사용되는 TS 파일은 오디오/비디오가 미리 멀티플렉싱(pre-muxed)되어 있어야 하므로, Playlist에서 EnableTsPackaging 옵션을 설정해야 합니다.

CrossDomain

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

Live Rewind

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

Dump

VoD를 위해 HLS 스트림을 덤프할 수 있습니다. <Application><Publishers><LLHLS>에 다음을 설정하여 활성화할 수 있습니다. LLHLS와 달리 현재 REST 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

Last updated