Il y a 2 parties bien distinctes :
- la récupération et la rétention du flux
- la diffusion du flux différé
Cette dernière partie est la plus complexe, car différente pour chaque opérateur. Je dois limite réécrire le code qui gère la diffusion en fait.
Pour la récupération, c'est un "worker" qui lit le contenu TS et qui l'injecte dans un gestionnaire de queues style RabbitMQ, dans une file dédiée à la chaine avec un timecode en argument pour chaque morceau que j'injecte. Je mets une limite à cette file pour qu'elle supprime automatiquement les plus vieilles données pour laisser place à la nouvelle.
Dès qu'un worker qui écoute le zapping de sa chaine, voit un téléspectateur taper dans le différé, et qu'il est le premier, bah je demande au gestionnaire de me donner toutes les données entre 5min et 5min+1sec avant l'heure actuelle, et je diffuse vers une adresse multicast. Et c'est une boucle infinie qui s'opère, tant qu'il y a des gens qui regardent. La majorité du code source, c'est du feeder Newsoo. Si le peer est connecté, je lui lis ma file et je la vide, sinon je stocke les messages dans une file limitée, le temps qu'il remonte, pendant que de l'autre côté, je remplis mes files avec ce qui rentre. Je suis dessus depuis 1 an à peu près pour l'adapter à un système IPTV, c'est une belle reconversion
Après en pratique, ça dépend fortement des boxs TV et de l'infra. Par ex, là je compte combien de fois d'affilé tu demandes France2 (une fois, le live, 2x je te remonte 1min en arrière, 3x, 5min, etc), sans toucher aux boxs TV déjà en place. L'idée principale c'est de proposer du différé sur 1min, 5min, 10, 30, et 1h par défaut, des tranches définies par l'opérateur pour maximiser le visionnage et donc l'intérêt du multicast. C'est nettement plus pratique que le timeshifting local ou l'enregistrement qui demande au téléspectateur de configurer un disque ou autre, là il appuye 2x et pouf il revient en arrière. La seule modif d'infra est l'ajout d'un Mikrotik CCR qui me pousse les données de zapping pour démarrer mon worker de différé en temps réel pour ne pas avoir de délai de zapping supplèmentaire (si c'est le premier visionneur que je vois) et ça me permet aussi de remplacer via API le flux France2 live, par le mien en différé pour LA box concernée (l'adresse multicast provisionnée ne change pas, pas besoin de reboot la box, etc).
Maintenant que la solution est stable et qu'elle fonctionne bien, reste plus qu'à refaire une maquette-type pour les démos, écrire la doc puis à commercialiser le bordel pour le tout début d'année prochaine.
Et tu as combien de flux multicast à la fin ? Si on considere 1 flux time shifté toute les minutes sur une profondeur conséquente, ça va finir par en faire un sacré paquet de flux et ça pour une chaîne.
Le flux est créé à la demande. Si personne n'écoute, aucun flux n'est créé. Si une personne écoute, j'en créé un. Si une deuxième personne écoute, elle va taper sur la même adresse que la première et là commence le gain d'économies. Voilà voilà