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.
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
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.
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
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.
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.