1 Punkte von previewapp 7 시간 전 | Noch keine Kommentare. | Auf WhatsApp teilen

Ich habe es mit dem Konzept gebaut, nicht algorithmische Empfehlungen zu nutzen, sondern auf „Videos zu treffen, die jemand direkt ausgewählt und gestartet hat“. Das frühere Segelboot-Konzept.

Wenn ein anonymer Nutzer einen YouTube-Link plus einen kurzen Brief als „Segelboot“ losschickt, kann ein anderer anonymer Nutzer darauf klicken und es öffnet sich ein 1:1-Watchroom. Die YouTube-Player beider Personen werden auf dieselbe Szene synchronisiert, und sie schauen gemeinsam mit anonymem Chat. In dem Moment, in dem eine der beiden Personen geht, verschwinden der Raum und der gesamte Chat.

Am Anfang war das Konzept so, dass der Raum nach dem Ende des Videos nach einem 3-Minuten-Countdown gesprengt wird. Beim tatsächlichen Nutzen hat sich aber gezeigt: Wenn man jemanden trifft, mit dem es gut passt, fühlt sich „noch eins“ ganz natürlich an — deshalb bleibt der Raum jetzt auch nach dem Video bestehen, und der Host wechselt das Video, damit man weiterschauen kann.

Teile, die beim Bauen spannend waren / bei denen ich mich abgearbeitet habe:

  • Synchronisierung: Der Server setzt die Referenzzeit fest (mit RTT-Korrektur), Drift innerhalb von 0,5 Sekunden wird ignoriert, innerhalb von 2 Sekunden wird unauffällig über eine Wiedergabegeschwindigkeit von 0,95~1,05x aufgeholt, und darüber hinaus wird mit seekTo zwangsweise korrigiert. Während Werbung läuft, wird die Korrektur gestoppt.
  • Die eigentliche Plackerei waren Live-Streams. Bei Live funktioniert seekTo nur innerhalb des DVR-Fensters, aber die DVR-Fenster der beiden Zuschauer unterscheiden sich voneinander, deshalb musste die Absicht „der Host befindet sich an der Live-Edge“ in das Fenster des Gegenübers übersetzt werden. Dazu kam noch eine unendliche Echo-Schleife aus loading→play→loading — im Commit-Log sehe ich, dass es allein für Live-Sync-Fixes 7 Commits gab.
  • Matching-Race: Dass mehrere Personen gleichzeitig auf dasselbe Segelboot aufspringen, habe ich mit einem atomaren Lock per Redis-Lua-Skript verhindert (bei einem Test mit 5 gleichzeitigen Joins wurde bestätigt, dass nur 1 Person gewinnt).
  • Bei Videos mit blockiertem Embed (Fehler 153) feuert die IFrame API kein onError, sodass nur ein schwarzer Bildschirm bleibt. Das habe ich mit einem 8-Sekunden-Playback-Watchdog erkannt, damit ein Hinweis „Wiedergabe nicht möglich“ angezeigt wird.
  • Weil es anonymes 1:1 ist, habe ich viele Sicherheitsmechanismen eingebaut: vollständige serverseitige Sanitize-Verarbeitung des Chats, automatisches Maskieren externer Kontaktangaben, AI-Moderation + Sperre bei kumulierten Meldungen, sowie Hinweise auf Beratungshotlines bei erkannten Krisen-Keywords.

Stack: Next.js 15 / Fastify 5 / Socket.io / Redis 7 / Postgres 16, mobil mit Expo(RN)

Es lässt sich sofort ohne Registrierung ausprobieren. Diese Woche ist auch die iOS-App im App Store erschienen: https://apps.apple.com/kr/app/float/id6777661839
Feedback ist willkommen.

Noch keine Kommentare.

Noch keine Kommentare.