Float의 1:1 시청방에서 두 사람은 같은 유튜브 영상을 “같은 순간”에 봅니다. 멀리 떨어진 두 화면이 어긋나지 않고 같은 장면을 비추려면, 보이지 않는 곳에서 끊임없이 시각을 맞추는 동기화 기술이 돌아가고 있어야 해요. 이 글에서는 두 플레이어가 어떻게 맞춰지는지(웹에서는 0.5초 단위, 앱에서는 조금 더 넓은 기준), 차이가 벌어졌을 때 어떤 방식으로 보정하는지, 그리고 광고와 라이브 방송에서는 동기화가 어떻게 다르게 흘러가는지를 설명합니다.
기준은 “방장 화면 + 서버 시각”
동기화의 핵심은 서버 기준 시각입니다. 두 사람의 인터넷 속도와 기기 성능이 제각각이라, 각자의 시계만 믿으면 화면이 금방 어긋나요. 그래서 Float은 방장의 YouTube IFrame 플레이어가 지금 영상의 몇 초 지점을 재생하고 있는지를 서버 시각과 함께 기록합니다(일반 영상은 약 5초마다 갱신). 게스트의 플레이어는 서버와 자기 시계의 차이를 30초마다 다시 재 가며, 그 기록에서 흐른 시간까지 더해 “방장이 지금 있을 지점”을 계산하고, 자기 위치를 거기에 맞춰 끌어당겨요. 기준은 언제나 방장 쪽 한 곳입니다.
0.5초의 기술 — 차이에 따라 다르게 보정한다
모든 어긋남을 똑같이 처리하지는 않습니다. 차이가 얼마나 벌어졌는지에 따라 보정 방식을 단계적으로 다르게 적용해요. 사용자가 보정이 일어나는지조차 느끼지 못하게 만드는 것이 목표입니다.
- 0.5초 미만: 사람이 인지하기 어려운 미세한 차이라, 그냥 무시합니다. 불필요하게 화면을 건드리지 않아요.
- 0.5초 ~ 2초: 재생 속도를 0.95배에서 1.05배 사이로 살짝 조절해 자연스럽게 따라잡거나 기다리게 합니다. 뒤처졌으면 살짝 빠르게, 앞섰으면 살짝 느리게 흐르며 무감하게 보정돼요. 영상이 끊기거나 튀지 않습니다.
- 2초 초과: 너무 많이 벌어졌을 때는 속도 조절로는 부족하므로, seekTo로 정확한 지점으로 강제 이동해 한 번에 맞춥니다.
대부분의 경우 0.5초 미만이거나 재생 속도로 조용히 보정되기 때문에, 사용자는 그저 같은 장면을 함께 보고 있다고만 느끼게 됩니다. 이것이 Float이 말하는 “0.5초의 기술”이에요.
위의 단계별 보정은 웹 브라우저로 들어온 게스트 기준입니다. iPhone·Android 앱의 게스트 플레이어는 재생 속도를 조절하지 않고, 차이가 일정 이상 벌어지면 방장 위치로 바로 이동(seek)해 맞춰요. 방장이 구간을 옮겼거나 게스트가 방에 막 들어왔을 때는 1초 넘게, 그 밖의 재생 신호(방장 쪽에서 약 5초마다 오는 위치 신호 포함)에서는 3초 넘게 벌어졌을 때 이동합니다. 그래서 앱에서는 3초 이하의 작은 차이가 그대로 남을 수 있어요.
방장의 재생·일시정지·이동이 그대로 전달된다
동기화는 자동 보정만이 아닙니다. 방장이 직접 한 조작도 상대에게 즉시 전달돼요. 방장이 재생, 일시정지, 특정 지점으로의 이동(탐색)을 하면, 게스트의 화면도 같은 동작과 같은 지점으로 따라옵니다. “잠깐, 이 부분 다시 보자” 하고 방장이 영상을 되감으면 둘 다 그 장면으로 돌아가고, 방장이 멈추면 함께 멈춰요. 반대로 게스트가 혼자 멈추거나 다른 지점으로 옮기면, 화면은 곧 방장이 보고 있는 지점으로 되돌아갑니다. 그래서 “지금 이 장면 봤어?” 같은 어긋남 없이, 정말로 같은 화면을 보며 실시간으로 반응을 주고받을 수 있습니다. 다시 보고 싶은 장면이 있다면 채팅으로 방장에게 부탁해 보세요.
광고가 나오면 잠시 어긋날 수 있다
YouTube 광고는 사람마다 길이도, 나오는 타이밍도 다릅니다. 그래서 한쪽에만 광고가 나오면 그동안 두 화면이 잠시 어긋날 수 있어요. 광고가 끝나고 본편이 재생되면, 방장 쪽 위치를 기준으로 다시 같은 지점에 맞춰집니다.
무엇보다 Float은 광고를 스킵하거나 차단하지 않습니다. 이는 YouTube의 이용약관을 존중하기 위한 원칙이에요. 광고의 흐름을 건드리지 않고 그대로 두는 것이 창작자와 플랫폼에 대한 정당한 예의이며, 서비스가 지켜야 할 선입니다. 그래서 광고 때문에 생기는 잠깐의 어긋남은 감수하고, 광고가 온전히 제 역할을 하도록 둡니다.
라이브 방송에서는 play와 pause만
실시간 라이브 방송은 일반 영상과 사정이 다릅니다. 라이브는 “지금 이 순간”이 곧 재생 지점이라, 임의의 과거 시점으로 seek(이동)하는 것이 불가능하거나 제한적이에요. 그래서 라이브에서는 강제로 특정 초로 끌어당기는 방식 대신, 재생(play)과 일시정지(pause)만 동기화합니다. 두 사람이 같은 라이브 흐름 위에서 함께 보고, 함께 멈추는 거예요. 영상의 종류에 맞춰 동기화 방식을 달리하는 덕분에, 뮤직비디오든 라이브 스트림이든 자연스럽게 같이 볼 수 있습니다. 다만 라이브는 사람마다 받는 방송 구간이 조금씩 달라, 두 화면 사이에 수 초에서 수십 초의 시차가 남을 수 있어요.
정리하면, Float은 방장의 재생 위치를 서버 기준 시각으로 기록하고 게스트 플레이어를 거기에 비교합니다. 웹 게스트는 0.5초 미만은 무시, 0.5~2초는 재생 속도로 무감 보정, 2초 넘게 벌어지면 seekTo로 강제 보정하고, 앱 게스트는 1초(방장의 구간 이동·입장 직후) 또는 3초(그 밖의 재생 신호) 넘게 벌어질 때 seek로 맞춥니다. 방장의 재생·일시정지·이동은 상대에게 그대로 전달되고, 광고는 건너뛰거나 가리지 않아 YouTube 약관을 지키며(광고 중엔 잠시 어긋날 수 있어요), 라이브에서는 play와 pause만 맞춰요. 이 보이지 않는 0.5초의 기술이 있기에, 멀리 떨어진 두 사람이 정말로 같은 순간을 함께 볼 수 있습니다.