본문 바로가기
TIL/Media

HLS(HTTP Live Streaming) - HTTP Streaming Architecture

by DandyU 2016. 4. 8.

HTTP Streaming Architecture

 

HTTP Live Streaming(HLS)은

일반적인 서버로 HTTP 기반 재생을 위해 오디오와 비디오를 전송할 수 있다. Live broadcast와 Prerecorded content(Video on demand)를 지원한다. Different bit rates로 Multiple alternate streams을 지원한다, 그리고 클라이언트 소프트웨어는 네트워크 Bandwidth에 따라 스트림을 지능적으로 변경(Switch)한다. 또한, HLS는 Publisher가 그들의 저작물을 보호할 수 있도록 HTTPS 에서 Media encryption과 User authentication을 제공한다.

 

 

HLS는 3가지의 파트로 구성된다.

- Server component

: Media의 Input stream, 디지털 Encoding, 배포용 포맷으로 압축, 배포를 위한 압축 미디어 준비를 한다.

 

- Distribution component

: Standard web servers로 되어있다. 클라이언트의 요청의 수신, 준비된 미디어와 관련 리소스를 Client에 배포한다.

 

- Client software

: 적절한 미디어 요청의 식별, 리소스 다운로드, 리어셈블링을 한다. 그래서 미디어는 연속적인 스트림으로 사용자에게 보여진다.

 

일반적인 방법으로 하드웨어 인코더는 Audio-Video 입력을 받고 H.264 video, AAC audio로 인코딩 하고 MPEG-2 Transport Stream(TS)로 출력한다. 이것은 Software stream segmenter에 의해 short media files로 나뉜다(Broken). 이 파일들은 Web server에 저장된다. Segmenter는 또한, Media file 들의 리스트 index file을 생성하고 유지한다. Index file의 URL은 Web server에서 발행된다. Client software는 index를 읽고, 리스트의 Media file들을 순서대로 요청한다. 그리고 Media file들을 어떠한 멈춤 또는 세그먼트 사이의 갭이 없이 Display 한다.

 

Input은 Live 또는 Prerecord된 소스이다. 이것은 일반적으로 off-the-shelf hardware를 통해서 MPEG-4(H.264 video and AAC audio)로 인코딩 되고

MPEG-2 TS로 패키징 된다. MPEG-2 TS는 세그먼트들로 나뉘고 하나 또는 여러 개의 연속된 .ts 미디어 파일로 저장된다. 이건 Apple stream segmenter 같은 소프트웨어 툴을 통해서 수행된다.

 

Audio-only 스트림은 AAC(with ADTS headers), MP3, AC-3 포맷의 연속된 MPEG elementary audio files일 수 있다.

 

Segmenter는 또한 Index 파일을 생성한다. Index 파일은 Media 파일들의 리스트를 포함한다. Index 파일은 또한 Metadata를 포함한다.

Index 파일은 .M3U8 playlist이다. Index 파일의 URL은 Client로부터 Access 된다. 그다음 그것운 인덱스된 파일을 순서대로 요청한다.

 

Server Components

Server는 Media 인코더가 필요하다, 이것은 Off-the-shelf hardware일 수 있다, 그리고 Encoded media를 segments로 나누고

이것을 파일로 저장하는 방법일 수 있다. 이것은 Apple에서 제공하는 Media stream segmenter 같은 소프트웨어나 Third-party 솔루션일 수 있다.

(The server requires a media encoder, which can be off-the-shelf hardware, 

and a way to break the encoded media into segments and save them as files, 

which can either be software such as the media stream segmenter provided by Apple 

or part of an integrated third-party solution.)

 

Media Encoder

Media encoder는 audio-video 디바이스로부터 실시간 신호를 받고, 미디어를 encode함 그리고 전송을 위해 압축한다.

Encoding은 Client 디바이스가 지원하는 포맷으로 Set 되어야한다. 예를 들어 H.264 video and HE-AAC audio.

현재 Audio-Video를 지원하는 전달 포맷은 MPEG-2 TS 또는 Audio-only는 MPEG elementary streams이다.

 

Encoder는 MPEG-2 TS에 인코딩된 media를 Local network를 통해서 Stream segmenter에 전달한다.

MPEG-2 TS를 MPEG2 video compression과 혼동하지 않아야 한다. TS는 패키징 포맷이다. 이것은 다른 압축 포맷의 number로 사용될 수 있다.

Audio Technologies와 Video Technologies 리스트는 압축 포맷을 지원했다.

 

Stream Segmenter

Stream Segmenter는 Transprot Stream(TS)을 로컬 네트워크로부터 읽고 동일한 재생시간을 가진 작은 미디어 파일의 연속(series)으로 분할하는 프로세스다.  뿐만 아니라 각각의 세그먼트는 분할 파일이다, 비디오 파일은 연속적인 스트림으로부터 만들어진다. 스트림은 부드럽게(seamlessly) 재구성 될 수 있다.

 

또한 Segmenter는 Index 파일을 생성한다. Index 파일은 각각의 미디어 파일의 참조 정보들을 포함하고 있다. Segmenter가 새로운 미디어 파일을 완료할 때 마다 Index 파일은 업데이트 된다. Index는 미디어 파일들의 유효성(Availability)과 위치(Location)를 추적할 때 사용한다. 또한, Segmenter는 미디어 세그먼트를 암호화(encrypt)하고 프로세스 일부로서 Key 파일은 생성한다.

 

미디어 세그먼트들은 .ts 파일(MPEG-2 transport stream files)들로 저장되고, Index 파일은 .M3U8 플레이리스트들로 저장된다.

 

File Segmenter

만약 당신이 지원되는 코덱들로 인코딩된 미디어 파일을 가지고 있다면, 당신은 File segmenter를 미디어 파일을 MPEG-2 TS에 압축하는데(encapsulate) 사용할 수 있다. 그리고, 동일한 길이의 세그먼트들에  나눌 수(break) 있다. File segmenter는 HTTP Live Streaming을 통해 주문형 비디오(VOD)를 보내기 위한 기존의 오디오 와 비디오 파일의 라이브러리를 사용할 수 있다. File segmenter는 Stream segmenter 같이 동일한 작업을 수행한다. 하지만 스트림 대신에 파일을 입력한다.

 

Media Segment files

Media Segment files은 보통 Stream segmenter로부터 생성된다. 인코더의 입력을 기반으로, 그리고 MPEG-2 TS 세그먼트(H.264 video, AAC, MP3 or AC-3 audio)가 들어있는 연속된 .ts 파일들로 구성되어 있다. 오직 Audio 전송(broadcaset)을 위해서 Segmenter는 MPEG elementary audio 스트림(containing either  AAC audio with ADTS headers, MP3 audio, or AC-3 audio)을 생성할 수 있다.

 

Index Files (Playlists)

Index files은 보통 Stream segmenter나 File segmenter로부터 생성되고 .M3U8 플레이리스트들로 저장된다. 확장자는 MP3 플레이리스트에 사용하기 위한 .m3u 포맷이다.

 

아래는 간단한 Index 파일의 예제이다. 

 



#EXT-X-VERSION:3
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1


# Old-style integer duration; avoid for newer clients.
#EXTINF:10,
http://media.example.com/segment0.ts


# New-style floating-point duration; use for modern clients.
#EXTINF:10.0,
http://media.example.com/segment1.ts
#EXTINF:9.5,
http://media.example.com/segment2.ts
#EXT-X-ENDLIST

 

 

정확도(Accuracy)를 위해서 플레이리스트를 클라이언트들(프로토콜 Version 3 또는 이후 버전을 지원하는)에 보낼 때 모든 재생 시간(duration)들을 Floating-point 값으로 명시해라(SHOULD)(오래된 클라이언트 들은 Integer 값만 지원한다.). Floating-point length를 사용할 때 Protocol version을 명시해야만 한다.(MUST) 만약 버전이 생략되면 플레이리스트는 Protocol version 1을 따라야한다.(Conform)

 

Index 파일은 Encryption key 파일들과 다른 Bandwidth의 Index 파일을 위한 URL들을 포함할 수 있다.

자세한건 IETF Internet-Draft of the HTTP Live Streaming specification 문서를 봐라

 

Index 파일들은 보통 미디어 세그먼트 파일들을 생성한 Segmenter에서 생성된다. 아니면, .M3U8 파일과 미디어 세그먼트 파일은 독립적으로 생성도 가능하다. 

 

Distribution Components

분배(Distribution) 시스템은 웹 서버 또는 웹 캐싱 시스템이다. 이것들은 미디어 파일들과 인덱스 파일들을 HTTP를 통해서 클라이언트에 배달(Deliver)한다. 콘텐츠 배달을 위해서 Custom Server는 필요하지 않다. 그리고 보통 매우 적은 설정이 서버에 필요하다. 

 

권장 설정은 보통 .M3U8 파일들과 .ts 파일들에 관련된 MIME-type 명시로 제한되어 있다.

 

Client Component

클라이언트 소프트웨어는 스트림 식별하는 URL을 기초하여 Index 파일을 패치하는 것으로 시작한다. 

인덱스 파일은 차례로 유효한 미디어 파일들, 복호화(Decryption) 키, 그리고 모든 대체 가능한 스트림들의 위치를 명시한다. 선택된 스트림을 위해서 클라이언트는 각각의 유효한 미디어 파일을 차례로 다운로드 한다. 각각의 파일은 연이은 스트림 세그먼트를 포함한다. 데이터 다운로드가 충분한 양이 되자마자 클라이언트는 사용자에게 리어셈블된 스트림을 보여주기 시작한다.

 

클라이언트는 모든 복호화 키의 패치, 인증 또는 인증 요청을 위한 UI Presenting, 그리고 미디어 파일의 복호화(필요하다면)를 책임진다.

 

이 프로세스는 Index 파일 내에서 #EXT-X-ENDLIST 태그를 맞닥뜨릴 때까지 계속된다. 만약 #EXT-X-ENDLIST 태그가 존재하지 않다면 Broadcast 중인 일부 index 파일이다.. Broadcast 진행 동안 Client는 인덱스 파일의 새로운 버전을 주기적으로(Periodically) 로드한다. 클라이언트는 업데이트된 인덱스에서 새로운 미디어 파일과 암호화 키를 찾는다 그리고 이것들의 URL을 큐에 추가한다.

 

 

'TIL > Media' 카테고리의 다른 글

[SDL] 오디오 볼륨 조절하기  (0) 2015.01.14

댓글