Nasıl çalışır: oda, kod, ortak saat

Bu sayfa uzantının ne yaptığını sayılarıyla anlatır. Kısa cevap: iki tarayıcı saniyede bir konumunu söyler; geride kalan yetişir.

Oda ve kod

Oda, 8 karakterlik bir koddan ibarettir. Alfabe 32 sembol: a'dan z'ye harfler ve 2'den 9'a rakamlar; l, o, 0 ve 1 hariç, çünkü sesli okurken ya da elle yazarken karışıyorlar. 32 üzeri 8, yaklaşık 1,1 trilyon olasılık eder; kodu bilmeyen odayı bulamaz.

Oda koduk7mq2xw4

Hesap yok, parola yok; kod odanın kendisidir. Odayı ilk açan kişi kurucudur. Kurucu “Odayı kapat” ya da “Ayrıl” derse herkes çıkarılır. Bağlantı kopması odayı kapatmaz: uzantı 1 ile 30 saniye arasında artan aralıklarla yeniden bağlanır.

Yanlış yazılan kod boş bir oda açmaz. Sunucu “Böyle bir oda yok” der; iki tarafın farklı odalarda birbirini beklemesi böyle önlenir.

Ortak saat

Bağlanınca uzantı sunucuya 250 ms arayla 5 ping atar. En hızlı gidiş-dönüş, yerel saatle sunucu saati arasındaki farkı verir. Bu fark 5 dakikada bir yenilenir; iki makinenin saati zamanla kayar.

Panelde gördüğün gecikme bu gidiş-dönüş süresidir. Videoyla ilgisi yoktur; sunucuya olan uzaklığını gösterir.

Oynat'a basınca hemen başlamaz: sunucu saatine göre 3 saniye sonrası için ortak bir an belirlenir, iki taraf da o anı bekler ve aynı anda başlar. Arka plandaki sekmelerde tarayıcı zamanlayıcıyı yarım saniyeye kadar geciktirebilir; geç ateşlenen taraf konumu o kadar ileri alarak telafi eder.

Oynat'a basıldığı an t = 0. İki taraf da t = 3 s'de, sunucu saatine göre başlar.

Saniyelik nabız

Oynatma sırasında her taraf saniyede bir küçük bir mesaj gönderir: konum, oynuyor mu, sunucu saati, reklamda mı, atlama sürüyor mu. Alıcı, mesajın yoldaki yaşını hesaba katarak karşı tarafın şu anki konumunu tahmin eder ve kendi konumuyla arasındaki farkı bulur.

Reklam ya da atlama sırasında konum asıl videoya ait olmadığı için o nabızlar karşılaştırmada kullanılmaz. Üç ve daha fazla kişide karar en öndeki eşe göre verilir: yalnız geride kalan hızlanır, herkes en öndekine yakınsar.

21:04:12.001  nabiz                      drift=0.031 kim=Uykulu Tilki age=39
21:04:13.003  nabiz                      drift=0.028 kim=Uykulu Tilki age=42
21:04:14.000  nabiz                      drift=0.036 kim=Uykulu Tilki age=40
Üç nabız: fark 30 ms civarında, dokunulmaz.

Dürtme ve atlama

Fark 50 ms'nin altındaysa dokunulmaz; tek karenin altındadır. 50 ms ile 1 saniye arasında geride kalan taraf hızlanır: fark 200 ms'ye kadarsa yüzde 2, 500 ms ve üstünde yüzde 5, arası orantılı. Kurulan hız en az 3 saniye tutulur; her hız değişimi oynatmadan yaklaşık 10 ms yuttuğu için sık açıp kapamak net hızı düşürüyordu.

1 saniyenin üstünde doğrudan atlanır. Bunun altında atlamak fayda vermiyor: bir günlükte 0,318 saniye farkta atlandı, sonuç 0,304 oldu. Atlamanın kendisi 90 ile 163 ms sürüyor; oynarken hedef o kadar ileri alınır, ölçülen süre bir sonraki atlamada kullanılır.

0,08 s · yeşil
0,41 s · sarı, dürtme
1,30 s · kırmızı, atlandı
21:04:17.002  nabiz                      drift=0.312 kim=Uykulu Tilki age=38
21:04:17.004  durtme-basladi             drift=0.312 hiz=1.031
21:04:18.001  nabiz                      drift=0.281 kim=Uykulu Tilki age=41
21:04:19.003  nabiz                      drift=0.250 kim=Uykulu Tilki age=39
21:04:20.998  durtme-hizi                drift=0.187 hiz=1.020
21:04:30.412  durtme-bitti
0,312 s fark: 1,031× ile dört saniyede 0,187'ye iniyor; hız 1,020×'e düşüyor, 0,02'nin altında dürtme biter.

Tamponlama ve reklam

Bir taraf 700 ms'den uzun tamponlarsa karşı taraf duraklatılır; tamponlama bitince ikisi birlikte devam eder. Daha kısa takılmalar, özellikle oynatmanın ilk anındaki, gürültü sayılır.

Reklam çoğu sitede asıl videoyla aynı elemanda oynar; bu yüzden videoya bakmak yetmez, oynatıcı kabının sınıfına bakılır. 400 ms'de bir yoklanan işaretler:

OynatıcıReklam sırasında eklenen sınıf
YouTube.ad-showing, .ad-interrupting
JW Player.jw-flag-ads
Video.js.vjs-ad-playing

Reklam olan tarafta reklam oynamaya devam eder; duraklatılan yalnızca karşı tarafın asıl videosudur. İki tarafın reklamı da bitince birlikte devam edilir. Bu üç oynatıcı dışındaki reklamlar algılanmaz; o durumda karşı taraf normal bir duraklama görür.

Karşı tarafta reklam var

Sohbet

Mesajlar sunucudan geçerken saat damgası alır ve odadakilere iletilir. Panel kapalıysa ya da video tam ekrandaysa mesaj videonun sağ altında 6 saniye görünür; en fazla 3 balon üst üste biner. Panel kapalıyken ayrıca Chrome bildirimi gelir.

Mesajlar cihazında yalnızca tarayıcı oturumu boyunca tutulur, en fazla 200 tane; tarayıcı kapanınca silinir. Sunucuda saklanmaz.

Sunucu

Sunucu bir WebSocket aktarıcısıdır: odadaki tarayıcılar arasında küçük JSON mesajlarını taşır ve ortak saat sağlar. Video içeriğine hiç dokunmaz. Oda kayıtları bellektedir; son kişi çıkınca silinir. Her istemci saniyede en fazla 40 mesaj gönderebilir, tek mesaj 32 KB'ı geçemez.

Bağlantı başına yaklaşık 155 KB bellek ve bir çekirdeğin yüzde 0,017'si tüketilir; bin eş zamanlı bağlantı 200 MB civarıdır. Bu yüzden ücretsiz kalabiliyor.

Kendi sunucunu da gösterebilirsin: Ayarlar › Sunucu alanına wss:// ile başlayan adresini yaz. Odadaki herkes aynı sunucuyu kullanmalı.

Sınırlar

  • Bir odada en fazla 5 kişi. Daha fazlası çalışır ama herkesin tamponlaması ve reklamı tüm odayı durdurur.
  • Chrome 116 ve üstü; Manifest V3 ve yan panel gerekir. Chromium tabanlı tarayıcılar denenmedi.
  • İki taraf aynı sayfada değilse eşitleme bekler; panel sayfayı açmayı önerir, kendiliğinden yönlendirmez.
  • DRM'li servisler (Netflix, Disney+, Prime Video) denenmedi.
  • YouTube, JW Player ve Video.js dışındaki oynatıcılarda reklam algılanmaz.

Denemek için bir oda yeter.