유튜브 영상 싱크(동기화)는 어떻게 맞춰지나 — 0.5초의 기술

26/06/05 18:02 · 약 7

Float의 1:1 시청방에서 두 사람은 같은 유튜브 영상을 “같은 순간”에 봅니다. 멀리 떨어진 두 화면이 어긋나지 않고 같은 장면을 비추려면, 보이지 않는 곳에서 끊임없이 시각을 맞추는 동기화 기술이 돌아가고 있어야 해요. 이 글에서는 두 플레이어가 어떻게 0.5초 단위로 정밀하게 맞춰지는지, 차이가 벌어졌을 때 어떤 방식으로 보정하는지, 그리고 광고와 라이브 방송에서는 동기화가 어떻게 다르게 동작하는지를 설명합니다.

기준은 “서버 시각” — 두 플레이어를 함께 본다

동기화의 핵심은 서버 기준 시각입니다. 두 사람의 인터넷 속도와 기기 성능이 제각각이라, 각자의 시계만 믿으면 화면이 금방 어긋나요. 그래서 Float은 두 사람의 YouTube IFrame 플레이어가 지금 영상의 몇 초 지점을 재생하고 있는지를 서버 기준 시각으로 비교합니다. 누가 더 앞서 있고 누가 뒤처져 있는지를 한 기준으로 판단해, 둘을 같은 지점으로 끌어당기는 거예요.

0.5초의 기술 — 차이에 따라 다르게 보정한다

모든 어긋남을 똑같이 처리하지는 않습니다. 차이가 얼마나 벌어졌는지에 따라 보정 방식을 단계적으로 다르게 적용해요. 사용자가 보정이 일어나는지조차 느끼지 못하게 만드는 것이 목표입니다.

대부분의 경우 0.5초 이내이거나 재생 속도로 조용히 보정되기 때문에, 사용자는 그저 같은 장면을 함께 보고 있다고만 느끼게 됩니다. 이것이 Float이 말하는 “0.5초의 기술”이에요.

재생·일시정지·이동이 그대로 전달된다

동기화는 자동 보정만이 아닙니다. 한 사람이 직접 한 조작도 상대에게 즉시 전달돼요. 재생, 일시정지, 특정 지점으로의 이동(탐색)을 한쪽이 하면, 상대방의 화면도 같은 동작과 같은 지점으로 따라옵니다. “잠깐, 이 부분 다시 보자” 하고 한 사람이 영상을 되감으면 둘 다 그 장면으로 돌아가고, 누군가 멈추면 함께 멈춰요. 그래서 “지금 이 장면 봤어?” 같은 어긋남 없이, 정말로 같은 화면을 보며 실시간으로 반응을 주고받을 수 있습니다.

광고 중에는 강제 동기화를 멈춘다

영상 중간에 광고가 나오는 순간, Float은 강제 동기화를 일시 중지합니다. 두 사람의 광고가 서로 길이도, 타이밍도 다를 수 있기 때문이에요. 광고가 흐르는 동안에는 차이를 억지로 맞추려 들지 않고, 광고가 끝난 뒤 본편에서 다시 동기화를 이어갑니다.

무엇보다 Float은 광고를 스킵하거나 차단하지 않습니다. 이는 YouTube의 이용약관을 존중하기 위한 원칙이에요. 광고의 흐름을 건드리지 않고 그대로 두는 것이 창작자와 플랫폼에 대한 정당한 예의이며, 서비스가 지켜야 할 선입니다. 그래서 광고 구간만큼은 동기화 로직이 한발 물러서서, 광고가 온전히 제 역할을 하도록 둡니다.

라이브 방송에서는 play와 pause만

실시간 라이브 방송은 일반 영상과 사정이 다릅니다. 라이브는 “지금 이 순간”이 곧 재생 지점이라, 임의의 과거 시점으로 seek(이동)하는 것이 불가능하거나 제한적이에요. 그래서 라이브에서는 강제로 특정 초로 끌어당기는 방식 대신, 재생(play)과 일시정지(pause)만 동기화합니다. 두 사람이 같은 라이브 흐름 위에서 함께 보고, 함께 멈추는 거예요. 영상의 종류에 맞춰 동기화 방식을 달리하는 덕분에, 뮤직비디오든 라이브 스트림이든 자연스럽게 같이 볼 수 있습니다.

정리하면, Float은 서버 기준 시각으로 두 플레이어를 비교해 0.5초 이내는 무시, 0.5~2초는 재생 속도로 무감 보정, 2초 이상은 seekTo로 강제 보정합니다. 한 사람의 재생·일시정지·이동은 상대에게 그대로 전달되고, 광고 중에는 강제 동기화를 멈춰 YouTube 약관을 지키며, 라이브에서는 play와 pause만 맞춰요. 이 보이지 않는 0.5초의 기술이 있기에, 멀리 떨어진 두 사람이 정말로 같은 순간을 함께 볼 수 있습니다.