Realtime Streming Service, devLive

Realtime Streming Service, devLive

이번 포스트에서는 작년 말부터 꾸준히 개발해온 토이 프로젝트에 대한 소개와 그 원리 및 구조에 대해 설명하는 내용을 적어볼까 한다.

실시간 스트리밍 서비스는 요즘 세대에 아주 친근한 서비스로써 ‘Youtube Live’, ‘Twitch’, ‘AfreecaTV’ 등이 있다.

필자 또한 이런 인터넷 방송을 즐겨보는 편인데, 비동기 방식 처리에 훌륭한 노드를 이용하여 직접 개발해보면 어떨까? 라는 아주 작은 생각으로부터 개발은 시작되었다.

소재 파악

특정 서비스를 개발하기 위해서는 그 서비스의 특성에 대해 잘 살펴보고 조사하는 과정이 필요하다.

개발하고자 하는 서비스와 같은 특성을 가진 서비스에 적용되고 있는 개념과 기술에 대한 이해도가 필요하다는 의미로 필자는 방송(Broadcast)에 대한 개념을 전혀 모르고 있었기에 실시간 스트리밍 서비스의 구조나 동작 원리와 같은 기초 단계부터 학습이 필요했다.


(실시간 스트리밍 서비스에 사용되고 있는 프로토콜 점유율, wowza.com)

그렇게 실시간 스트리밍 서비스에 적용되고 있는 스트리밍 프로토콜에 대해 알아보던 중 HLS(HTTP Live Streaming)을 눈여겨 보게 되었다.

HLS(HTTP Live Streaming)은 2019년 통계상 실시간 스트리밍 서비스에 제일 많은 점유율을 보유하고 있는 프로토콜로써, HTTP 통신을 이용하기에 프록시와 방화벽에서 차단 당할 확률이 적고, HTML5 플레이어를 구현하는 데에 있어 유리한 부분이 있어 HLS를 택하게 되었다.

그럼 HLS의 동작 원리에 대해 자세히 알아보도록 하자.

HLS(HTTP Live Streaming) 동작 원리


(hls 서버의 동작 원리)

먼저 HLS는 작은 단위로 영상을 잘게 잘라놓은 '*.ts' 파일들과 영상들의 재생 목록 및 순서가 작성되어 있는 '*.m3u8' 파일을 통해 실시간 스트리밍이 가능하도록 지원해준다.

이를 시나리오로 설명하면 스트리머(방송인)가 방송을 시작하면 일정 단위로 방송중인 화면이 .ts 파일로 나뉘어 계속해서 서버에 저장된다.

또한 이 영상 파일들의 목록과 재생 순서가 기록되는 *.m3u8 파일에 계속해서 작성된다.

이후 시청자의 클라이언트는 영상 파일들과 영상 리스트를 서버로부터 내려받아 시청자에게 순차적으로 재생시켜줌으로써 이어지는 영상으로 방송을 볼 수 있는 것이다.


(theoplayer.com)

위 이미지와 같이 다른 시간에서 같은 수평선으로 시간이 흘러가기에 방송이 실시간처럼 느껴지는 것이다.

물론 어느 정도의 시간 차이는 존재하는데 그 이유는 위와 같은 스트리머와 시청자 간의 업로드, 다운로드 과정이 필요하기 때문이다.

이 시간차 중 영상 목록 중 재생하여야 하는 영상 파일이 시청자에게 다운로드가 지연되거나 완료가 되지 않았을 경우 우리는 흔히 '버퍼링에 걸린다' 라고 표현하는 것이다.

Realtime Streming Service, devLive

그럼 위 방식으로 필자가 직접 개발해본 사이드 프로젝트를 엿보도록 하자.

Video: https://www.youtube.com/watch?v=0vmk-YUuGH4
Repo: https://github.com/dev4us/devLive

마무리

이번 프로젝트를 진행하면서 또 다른 새로운 영역에 도전을 한 것 같아 큰 보람을 느꼈다.

또한 사이드 프로젝트를 위와 같이 repository만이 아닌 영상으로 촬영하여 기록하는 방식을 처음 시도해보았고 이 또한 매우 흡족했다.

앞으로는 계속해서 사이드 프로젝트에 대한 영상을 촬영하여 기록할 것 같다.

하지만 당분간은 지루한 알고리즘 공부를 진행할 예정이라 잠시 이 즐거운 사이드 프로젝트 개발에는 잠시 휴식을 고해야될 것 같다.

다음 시간에도 유익한 정보와 함께 사이드 프로젝트를 소개하는 시간을 갖도록 하겠다.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×