1 points par previewapp 7 시간 전 | Aucun commentaire pour le moment. | Partager sur WhatsApp

Je l’ai conçu autour de l’idée de rencontrer non pas des vidéos recommandées par un algorithme, mais des « vidéos qu’une personne a réellement choisies et lancées ». Ancien concept du voilier

Un utilisateur anonyme envoie sur un « voilier » un lien YouTube accompagné d’un petit mot, puis un autre utilisateur anonyme clique dessus pour ouvrir une salle de visionnage 1:1. Les lecteurs YouTube des deux personnes sont synchronisés sur la même scène, et elles regardent ensemble tout en discutant dans un chat anonyme. Dès que l’une des deux s’en va, la salle et l’historique du chat disparaissent entièrement.

Au début, le concept prévoyait qu’à la fin de la vidéo, un compte à rebours de 3 minutes se lance avant la disparition de la salle. Mais à l’usage, quand on tombe sur quelqu’un avec qui le courant passe bien, enchaîner avec « encore une » vient naturellement — j’ai donc changé le fonctionnement pour que la salle reste active après la fin de la vidéo et que l’hôte puisse changer de vidéo pour continuer.

Les parties amusantes / galères pendant le développement :

  • Synchronisation : le serveur fixe l’heure de référence (avec correction RTT), ignore un drift inférieur à 0,5 seconde, rattrape discrètement les écarts de moins de 2 secondes via une vitesse de lecture entre 0,95x et 1,05x, et au-delà force la correction avec seekTo. Pendant les publicités, la correction est suspendue.
  • La vraie galère, c’était les live streams. Sur un live, seekTo ne fonctionne qu’à l’intérieur de la fenêtre DVR, mais les fenêtres DVR des deux spectateurs peuvent être différentes ; il a donc fallu traduire l’intention « l’hôte est au live edge » selon la fenêtre de l’autre personne. Sans parler de la boucle d’écho infinie loading→play→loading — à voir l’historique des commits, il y a eu 7 correctifs rien que pour la synchro live.
  • Course au matching : pour éviter que plusieurs personnes montent en même temps sur le même voilier, j’ai utilisé un verrou atomique Redis via script Lua (test avec 5 personnes rejoignant simultanément : une seule a gagné).
  • Vidéos dont l’intégration est bloquée (erreur 153) : l’API IFrame ne déclenche pas onError, donc l’écran reste simplement noir ; je les détecte avec un watchdog de lecture de 8 secondes afin d’afficher un message « lecture impossible ».
  • Comme c’est de l’anonyme en 1:1, j’ai mis beaucoup de garde-fous : sanitation côté serveur de tout le chat, masquage automatique des coordonnées externes, modération IA + blocage selon l’accumulation de signalements, et affichage d’un numéro d’assistance en cas de détection de mots-clés liés à une situation de crise.

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

On peut l’essayer immédiatement sans inscription. L’app iOS est aussi sortie cette semaine sur l’App Store : https://apps.apple.com/kr/app/float/id6777661839
Les retours sont les bienvenus.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.