CS/네트워크

[네트워크] Http Live Streaming - HLS

hojak99 2017. 9. 7. 10:32

HLS 에 대해서 이야기 하기 전에 스트리밍에 정의 대해서 알아야 할 것 같다.



스트리밍(streaming)은 주로 음악이나 동영상 등의 멀티미디어 파일을 전송하고 재생하는 방식의 하나이다.


보통 파일은 내려받고 난 뒤에 열리는 작업을 하지만, 동영상과 같이 크기가 큰 파일을 재생할 때에는 내려 받는데에 시간이 오래 걸릴 수 있다. 파일을 다운로드 하는 것과 더불어 재생을 함으로써 기다리는 시간을 줄일 수 있다.


이 기술을 이용하여, 컴퓨터 네트워크 위에 스트리밍하여 실시간 중계도 가능하다.


[출처 : https://ko.wikipedia.org/wiki/스트리밍]




우선 스트리밍 서버를 구현해보려고 검색을 조금 많이 해보았는데 스트리밍을 위한 프로토콜이 몇 가지 있었다. 

그 중 RTSP(Real-Time Streaming Protocol), RTP(Real-Time Transport Protocol), RTMP(Real-Time Messaging Protocol) 등과 같은 프로토콜이 있는데 RTSP와 RTP가 서로 다른 네트워크 연결을 통해 데이터를 교환하기 때문에 방화벽이나 Network Address Translator - NAT 를 많이 쓰고 있는 환경에서는 서비스가 원할하지 않다고 한다. 


그렇기 때문에 그 대안으로 HTTP를 전송 채널로 사용하는 방식이 나온 것인데, 알고 있다시피 HTTP 는 양방향 통신이 아니다. 음.. 그냥 그렇다는 것이다.


위에서 말했던 RTSP, RTP, RTMP 와 달리 HLS는 방화벽에서 HTTP 서버로의 요청만 통과시키면 되기 때문에 방화벽 설정이 단순해지며, 요청과 응답이 1:1 이기 대문에 NAT 환경에서도 통신하기 쉽다고 한다.





그렇다면 HLS 와 기존에 있던 라이브 스트리밍 방식은 무엇일 다를까?


우선  공통점은 HLS 와 기존의 라이브 스트리밍 방식 모두 동영상을 끊김 없이 전달한다는 점에선 같다. 


다른 점은 동영상 정보를 전달하는 방식과 HLS에서 만든 스트림 세그먼트이다. 


서버는 HTTP 를 통해 클라이언트한테 요청을 받고, 응답을 해주는 역할만 하기 때문에, 저장되어 있는 파일을 읽어 HTTP 응답과 같이 데이터를 보낼 수 있는 아무 웹 서버에서 HLS 를 사용할 수 있다. 위에서 말한 스트림 세그먼트로 일정한 시간 간격마다 입력 받은 미디어 데이터를 분할하여 파일로 만들고, 이 파일에 접근할 수 있는 m3u8(메타데이터)를 생성하는 역학을 한다.


즉, 동영상 -> 인코더 -> 스트림 세그먼터 -> 웹 서버 -> 클라이언트 라는 방식이다.




반응형