HTTP Live Streaming -1

박노정·2021년 6월 17일
0

호기심

목록 보기
1/1

싸피에서 마지막 프로젝트를 하면서 동영상 스트리밍기능을 개발했다.
나는 프론트엔드를 맡아 HLS플레이어로 m3u8 데이터를 보여주면 됐었다.
하지만 HLS가 무엇이고 어떻게 돌아가는것인지 한번 알아보려한다.

https://d2.naver.com/helloworld/7122

이 글을 통해 학습하고 정리해보려한다.

HTTP Live Streaming

HTTP Live Streaming(HLS)는 HTTP를 이용해 원활한 스트리밍 서비스를 제공하고 방화벽 문제 등을 해결하려는 시도로 만들어졌다. 이 전의 라이브 스트리밍은 RTSP라는 것을 통해 했다고하는데 도입비용이 높고 방화벽환경에서 서비스가 원활히 이루어지지않아 HLS가 나오게 돼었다.

HTTP를 사용하는 라이브 스트리밍

온 디맨드 스트리밍(On-Demand Streaming)에서는 촬영과 편집을 거쳐 동영상 파일을 제작한 다음 사용자의 요구가 있을 때 동영상을 재생할 수 있도록 하지만, 라이브 스트리밍에서는 비디오와 오디오를 실시간으로 인코딩해 많은 사용자에게 동시에 보낼 수 있어야 한다.

(온 디맨드 스트리밍(On-Demand Streaming)은 넷플릭스와같은 OTT서비스나 유튜브를 떠올리면될것같다. 라이브스트리밍은 인스타라이브!)

HLS는 스트리밍 데이터를 MPEG-2 Transport Stream에 담아 시간 단위로 잘게 쪼개서 전송한다. 그리고 어떤 파일을 재생해야 하는 지에 대한 정보는 m3u8 파일을 이용하여 플레이어에 전달한다.

내가 했던 프로젝트에 대입해보면 비디오태그 url에 m3u8 파일주소를 입력했는데 주소를 요청함으로써 해당하는 쪼개어진 스트리밍 데이터들을 받을 수 있었던것이다.

HTTP Live Streaming 구성

HLS에서 서버는 HTTP요청을 받아서 플레이어에 응답을 주는 역할만 한다. 어떠한 변형도 하지 않는다.
스트림 세그먼터(Stream Segmenter)는 일정한 시간 간격마다 입력받은 미디어 데이터를 분할해 파일을 만들고, 그 분할한 파일에 접근할 수 있는 메타데이터(m3u8)를 생성하는 일을 한다.

비디오 업로드를 한다고 서버에 비디오를 보내면 스트림 세그먼터(Stream Segmenter)를 통해서 데이터를 분할해서 파일을 하나 만들고, 그 분할한 파일에 접근 할 수 있는 메타데이터(m3u8)를 생성하여 비디오서버의 주소값으로 클라이언트로 넘겨주는 방식으로 프로젝트를 진행했다.

하지만 HTTP요청은 양방향 방식이 아니다. 그래서 클라이언트에서 서버에 요청을 해야 응답을 받을 수 있는데, 이는 서버에서 클라이언트에 쪼갠 동영상 파일을 보낼 때, 동영상 정보를 함께 전달하고 때에 맞춰 다음 동영상 정보를 클라이언트가 서버로 요청하는 방식으로 스트리밍이 진행된다.

1편을 마치며

생각보다 복잡하지만 클라이언트에서는 그냥 요청만해서 모르고있던 서버의 내용까지 알게되어 정리가되는 기분이라 좋다! 또 시간을 내어 2편으로 마저 공부를 해봐야겠다.

profile
성장스택 쌓고있는 개발자🏋

0개의 댓글