- 스트리밍 서비스 프로토콜의 종류
- What is HLS?
스트리밍 서비스란 인터넷에서 음성,미디어 컨텐츠를 실시간으로 재생하는 방식으로 왓챠,쿠팡플레이, 유투브, 넷플릭스 같은 서비스가 있다.
스트리밍 프로토콜이란 위의 스트리밍서비스를 위해 데이터를 전달하기 위한 방식이라고 할 수 있다.
– Progressive download
– RTSP, RTMP 스트리밍
- Adaptive HTTP Streaming
웹 서버로부터 동영상을 다운로드하면서 파일이 도착하는 대로 재생해주는 방식이다.
유투브에서 사용하는 방식(현재는 Adaptive HTTP streaming방식으로 서비스하고 있다.)으로 웹서버에 비디오를 올려놓고 유저에게 url을 알려주면 그 url을 통해 볼 수 있는 방식이다. 충분한 데이터가 있을 때 까지 다운로드를 진행하고, 이후에 동영상 재생을 시작한다. 전체를 다운로드 할 때 까지 계속 다운로드를 진행한다.
장점으로는 웹 서버에 비디오를 올려놓고 url링크에 비디오를 걸면 되는 점이 있으나, 동영상을 다운로드 하기 때문에 보안에 취약하며, bandwidth 효율성이 떨어진다고 할 수 있다.
bandwidth(대역폭)의 traffic 소모가 유저가 시청한 만큼이 아닌 다운로드 한 만큼 소모된다는 점이다. 예를 들어, 1시간 반 가량의 영화인 2GB 사이즈의 동영상을 본다고 할 때, 사용자가 일부분이 20분정도(1GB) 만 시청하고 나갔을 경우라도 나머지 용량의 영상도 이미 다운로드 완료되어 실제 시청한 데이터에 비해 전송 비용이 많이 들어간다는 것이다.
웹폴더에 있는 파일을 다운받아 진행하는 방식 이다.
Progressive download(프로그레시브) 방식과는 달리 사용자가 현재 시청하고 있는 비디오 프레임만을 전송해주는 방식이다. 유저가 보는 장면을 찾아 그 프레임부터 시작이 되며, 지나간 프레임 데이터는 자동 삭제되는 방식이다.
특징으로는 다운로드가 없어 보안에 문제가 상대적으로 적고, 필요한 부분만 전송하므로 bandwidth 효율성이 높아지는 장점이 있다.
RTMP/RTSP(대역표 효율성 증가) 와 Progressive Download(전용서버와 프로토콜의 불필요)의 장점을 결합한 방식이다.
미디어 컨텐츠를 동영상 컨텐츠 하나로 저장하는게 아니라 잘게 쪼개서 저장한다. 사용자가 동영상을 플레이할 때 네트워크 상황에 따라서 적절하게 컨텐츠 해상도를 조절하여 최적의 스트리밍 서비스를 제공하는 방식이다. 클라이언트의 bandwidth의 상황에 맞게 그에 맞는 화질을 전송하는 방식이다.
종류는 아래가 대표적인 Adaptive HTTP Streaming이라고 할 수 있다.
(1) HSL (HTTP Live Streaming, Apple)
(2) HDS (HTTP Dynamic Streaming, Adobe)
(3) SSS(Silverlight Smooth Streaming, MS)
공급사마다 다른 프로토콜이 존재하여 표준화가 부족한 것이 단점이라고 볼 수 있는데, 대중적으로 애플사가 만든 HLS를 많이 사용한다.
HLS(HTTP Live Streaming)은 Apple에서 iOS 3.0과 QuickTime X를 위해 2009년에 내놓은 프로토콜이다. 이 프로토콜에서는 스트리밍 데이터를 MPEG-2 Transport Stream에 담아 시간 단위로 잘게 쪼개서 전송한다.
HTTP 프로토콜을 사용하는 실시간 스트리밍 방식으로 스트리밍 데이터를 m3u8의 확장자를 가진 재생목록 파일과 잘게 쪼갠 다수의 ts파일을 http을 통해 전송하는 방식이다.
기존의 스트리밍 프로토콜이 지닌 단점을 극복하고 스트리밍 서비스를 위한 인프라를 단순화시키려는 의도에서 나온 규격이다.
[그림 1:Apple의 HLS구성]: AppleHLS
[그림 2 기존 스트리밍 서버를 이용한 스트리밍 서비스 구성]:
HLS이 기존 스트링밍 방식과의 차이는 크게 동영상을 전달하는 방식
과 HLS에서 만든 스트림 세그먼트
라 할 수 있다. 기존의 스트리밍 방식은 그림2처럼 스트리밍 서버에 연결한 스트리밍 규격에 맞게 다시 데이터를 변형해 보내는 작업을 해야 한다. 반면에 HLS은 그림1과 같은 방식으로 미디어를 전달한다.
스트림세그먼트에서는 기존의 구조의 "원본 > 인코더 > 스트리밍 서버 > 플레이어"라는 데이터 흐름에서 "원본 > 인코더 > 스트림 세그먼터 > 웹 서버 > 플레이어"라는 흐름이라 할 수 있다. 스트림 세그먼트는 원본 데이터를 화질별로 데이터를 잘게 분할하여, ts파일을 만들고 그 분할한 파일에 접근할수 있도록 메타 데이터 파일인 m3u8 파일을 만듭니다.
HLS는 스트리밍에 .m3u8, .ts 형식의 파일로 구성되어있다.
Stream Segmenter역활을 해주는 AWS 솔루션으로 파일기반 컨텐츠를 여러 기기에 송출 할 수 있도록 파일을 변환해주는 AWS의 Media 트랜스코더이다.
스트리밍의 흐름은 클라이언트가 요청하면, 서버는 m3u8을 응답해주고 그걸 받아서 재생시간에 맞춰서 ts파일을 순차적으로 요청하면 서버는 그에 맞는 .ts파일을 응답해준다.
참고자료:
HLS 프로토콜 파일의 구조
HLS
HLS.js