HLS 레이턴시란?
“레이턴시”는 쉽게 말해서 어떤 일이 실제로 일어난 시점과, 우리가 그걸 보는 시점 사이의 시간 차이예요.
예를 들어, 축구 경기를 보고 있다고 해요. 선수가 골을 넣었어요. 그런데 내가 TV로 그걸 보는 데 5초가 걸렸어요. 이 5초가 바로 레이턴시예요.
왜 레이턴시가 생길까요?
레이턴시는 여러 단계에서 조금씩 생겨요. 우리가 “축구 골 장면”이 내 눈앞에 오기까지 어떤 과정이 있는지 단계별로 알아볼게요.
- 캡처 지연: 골 넣는 장면을 카메라가 찍어요. 찍는 순간 데이터가 만들어지는데, 이걸 디지털로 바꾸는 데 시간이 조금 걸려요.
-> “골 넣었는데, 카메라가 ‘잠깐만, 내가 이걸 데이터로 만들어야 돼’라고 말하는 순간이에요.” - 인코딩 지연: 이제 카메라가 찍은 영상을 인터넷으로 보내려면 데이터를 압축해야 해요.
-> “데이터가 너무 크면 인터넷이 힘들잖아요? 그래서 인코더라는 기계가 ‘이걸 작게 만들어야겠다’라고 생각해요.” - 세그먼트 만들기 지연: HLS는 영상을 잘게 잘라서(보통 2초~6초씩) 파일로 나눠요.
-> “큰 영상을 쪼개서, ‘첫 번째 2초’, ‘두 번째 2초’ 이렇게 만들어야 해요. 이 과정에도 시간이 조금 걸려요.” - 전송 지연: 쪼갠 데이터를 서버가 인터넷으로 보내요.
-> “여기서 인터넷이 느리거나, 서버가 멀리 있으면 시간이 더 걸릴 수 있어요.” - 버퍼링 지연: 데이터를 다 받은 후, 플레이어는 중간에 끊기지 않게 하려고 미리 조금 저장해 둬요.
-> “플레이어가 ‘아, 혹시 인터넷이 끊기면 안 되니까 미리 조금 챙겨놔야지!’라고 생각하는 거예요.” - 디코딩 지연: 마지막으로 플레이어가 데이터를 화면에 보여주기 전에 해석해야 해요.
-> “데이터가 압축된 상태니까, 플레이어가 ‘이걸 풀어서 제대로 보여줄게!’라고 하는 과정이에요.”
HLS 레이턴시를 어떻게 측정할 수 있을까요?
“우리가 지금 보고 있는 영상이 얼마나 늦었는지 알아내려면, 시간을 재야 해요.” 몇 가지 방법을 써볼게요.
- 시간 스탬프: 축구 경기 영상에 “이 장면은 12시 00분 05초에 찍혔다”라고 표시를 해요.
-> “플레이어가 이 표시를 보고, ‘지금 시간은 12시 00분 10초니까, 5초 늦었네!’라고 계산할 수 있어요.” - EXT-X-PROGRAM-DATE-TIME 태그: HLS에서는 영상이 방송된 시간을 파일에 기록할 수 있어요.
-> “플레이어가 이 파일을 보고, ‘아, 이 파일이 만들어진 시간은 12시였는데, 지금은 12시 10초니까, 10초 늦었네!’라고 알아차리는 거예요.” - 네트워크 핑 테스트: 네트워크가 데이터를 보내는 데 얼마나 걸리는지 확인해요.
-> “서버에 ‘데이터 줘!’라고 말하고, 서버가 ‘여기 있어!’라고 답하는 데 걸리는 시간을 재는 거예요.”
레이턴시를 줄이는 방법
“이제 레이턴시를 줄이는 방법을 찾아봐요. 우리 목표는 ‘골 넣는 순간이랑 내가 보는 순간을 최대한 가깝게 만드는 것’이에요.”
- 세그먼트 길이 줄이기: 한 번에 보내는 영상의 길이를 2초나 4초로 줄여요.
-> “쪼갠 영상이 작으면 더 빨리 보내고 빨리 받을 수 있어요!” - LL-HLS(Low Latency HLS) 사용하기: 영상을 더 잘게 쪼개고, 다 쪼개기 전에 미리 보내기 시작해요.
-> “영상이 다 준비되지 않아도, ‘조금씩 조금씩 보낼게!’라고 해서 시간을 절약하는 거예요.” - CDN(Content Delivery Network) 활용하기: 데이터를 여러 서버에 미리 저장해 두고, 사용자와 가까운 서버에서 보내요.
-> “멀리 있는 서버 대신 가까운 서버가 ‘여기 데이터 있어!’라고 빨리 전달해주는 거예요.” - 버퍼 크기 줄이기: 플레이어가 미리 저장하는 데이터 양을 줄여요.
-> “플레이어한테 ‘그렇게 많이 저장 안 해도 괜찮아!’라고 말하는 거예요.”
결론
HLS 레이턴시는 복잡한 과정에서 여러 단계로 쌓이는 시간이에요. 캡처, 인코딩, 전송, 디코딩 등 모든 과정에서 조금씩 시간이 걸리죠.
레이턴시를 줄이려면 영상을 더 빨리 처리하고, 더 빨리 보내고, 더 가까운 곳에서 가져오는 방법을 써야 해요. 마치 축구 중계를 더 실시간으로 보고 싶어서 모든 과정을 간소화하는 것처럼요!
이제 “레이턴시”가 무엇이고, 왜 발생하는지, 어떻게 해결할 수 있는지 명확해졌나요? 😊