CDN dynamique pour le streaming WebRTC à faible latence


Plus tôt, en analysant les possibilités de configurations de serveur standard dans Digital Ocean du point de vue du streaming WebRTC, nous avons noté qu'un serveur peut servir jusqu'à 2000 spectateurs. Dans la vraie vie, il y a souvent des cas où un serveur ne suffit pas.


Disons que les fans d'excitation en Allemagne regardent les courses de chevaux en temps réel en Australie. Étant donné que les courses de chevaux ne sont pas seulement des sports équestres, mais aussi de grandes victoires, avec des paris faits à temps, la vidéo doit être livrée dans les plus brefs délais.


Un autre exemple. Une entreprise mondiale, l'un des leaders du marché des FCMG avec des filiales en Europe, en Russie et en Asie du Sud-Est, organise des webinaires pour former des directeurs commerciaux avec traduction depuis le siège en Méditerranée. Les téléspectateurs devraient voir et entendre le présentateur en temps réel.


Ces exemples combinent les exigences: fournir des flux multimédias à un grand nombre de téléspectateurs avec une faible latence. Pour ce faire, vous devez déployer un réseau de diffusion de contenu - CDN.


Notez que la technologie classique de livraison de flux utilisant HLS ne convient pas, car elle peut donner des retards allant jusqu'à 30 secondes, ce qui est essentiel pour les émissions en temps réel. Imaginez que les chevaux aient déjà atteint la ligne d'arrivée, les résultats sont publiés sur le site, et les fans inspectent toujours la course. Cet inconvénient est privé de la technologie WebRTC, qui peut fournir des retards en 1 seconde, avec des canaux de communication modernes, cela est possible même entre les continents.


Voyons d'abord comment déployer le CDN le plus simple pour fournir des flux WebRTC, puis le faire évoluer.


Structure CDN


Un serveur dans un CDN peut jouer l'un des rôles suivants:


  • Origin est un serveur de publication de flux multimédias. Distribue des flux vers d'autres serveurs, il peut également distribuer aux abonnés.
  • Transcoder - un serveur dédié au transcodage de flux. Récupère les flux des serveurs Origin et distribue les flux transcodés vers Edge. Nous traiterons de ce rôle dans la prochaine partie.
  • Edge - un serveur conçu pour distribuer des flux aux abonnés. Il prend les flux des serveurs Origin ou Transcoder, ne distribue pas les flux aux autres serveurs CDN.

Vous pouvez publier des flux WebRTC et RTMP sur le serveur Origin ou capturer des flux à partir d'autres sources via RTMP, RTSP et d'autres méthodes possibles.


Les abonnés peuvent lire les flux des serveurs Edge via WebRTC, RTMP, RTSP, HLS


Entre les serveurs CDN, il est souhaitable de diffuser sur WebRTC pour réduire la latence.


Un CDN statique est entièrement décrit au stade de la configuration. En fait, la configuration d'un CDN statique est similaire à la configuration d'un équilibreur de charge: tous les récepteurs sont répertoriés dans les paramètres du serveur source de flux.


Par exemple, nous avons un serveur Origin à Francfort, un Edge à New York et un à Singapour



Dans ce cas, Origin est configuré quelque chose comme ceci:


<loadbalancer mode="roundrobin" stream_distribution="webrtc"> <node id="1"> <ip>edge1.thestaticcdn.com</ip> <wss>443</wss> </node> <node id="2"> <ip>edge2.thestaticcdn.com</ip> <wss>443</wss> </node> </loadbalancer> 

Voici le premier problème avec un CDN statique: pour ajouter un nouveau serveur Edge à un tel CDN, ou pour supprimer le serveur du CDN, vous devez modifier les paramètres et redémarrer tous les serveurs Origin.


Les flux publiés sur Origin sont diffusés sur tous les serveurs répertoriés dans les paramètres Edge. La décision concernant le serveur Edge auquel l'abonné se connectera est également prise sur le serveur Origin. Voici le deuxième problème: s'il n'y a pas de spectateurs ou très peu, par exemple à Singapour en début de soirée, et à New York en pleine nuit, les flux sont toujours diffusés vers Edge 1. Le trafic est passé au ralenti, et pas du tout gratuitement.


Le CDN dynamique peut résoudre ces deux problèmes.


Donc, nous voulons configurer CDN sans redémarrer tous les serveurs Origin, et nous ne voulons pas transférer de flux vers ces serveurs Edge où il n'y a pas d'abonnés. Dans ce cas, vous n'avez pas besoin de conserver la liste complète des serveurs CDN quelque part dans les paramètres. Chaque serveur doit lui-même créer une telle liste, et pour cela, il doit connaître l'état actuel des autres serveurs à un moment donné.


Idéalement, dans les paramètres, il devrait suffire de spécifier le point d'entrée, le serveur à partir duquel le CDN démarre. À ce point d'entrée, chaque serveur au démarrage doit envoyer une demande et recevoir une liste de nœuds CDN et une liste de flux publiés en réponse. Si le point d'entrée n'est pas disponible, le serveur doit attendre des messages d'autres serveurs.


Le serveur doit envoyer toute modification de son état à d'autres serveurs du CDN.


Le CDN le plus simple: au centre de l'Europe


Essayons donc de configurer et d'exécuter un CDN dynamique. Supposons que, pour commencer, nous devons distribuer des flux vidéo aux téléspectateurs européens, tandis que jusqu'à 5 000 utilisateurs doivent être pris en charge. Supposons que la source des flux se trouve également en Europe.



Nous déployons trois serveurs dans le centre de données européen. Nous utiliserons Flashphoner WebCallServer (serveur de streaming vidéo WebRTC) comme éléments pour construire un CDN.



Configuration:


  • Origine UE

 cdn_enabled=true cdn_ip=o-eu1.flashponer.com cdn_nodes_resolve_ip=false cdn_role=origin 

  • Edge 1 EU

 cdn_enabled=true cdn_ip=e-eu1.flashphoner.com cdn_point_of_entry=o-eu1.flashponer.com cdn_nodes_resolve_ip=false cdn_role=edge 

  • Edge 2 EU

 cdn_enabled=true cdn_ip=e-eu2.flashphoner.com cdn_point_of_entry=o-eu1.flashponer.com cdn_nodes_resolve_ip=false cdn_role=edge 

La messagerie entre les nœuds CDN dynamiques se produit via Websocket et, bien sûr, Secure Websocket est également pris en charge.


À l'intérieur du CDN, les flux sont diffusés via WebRTC. En règle générale, UDP est utilisé comme transport, mais vous pouvez basculer vers TCP si vous avez besoin d'assurer la qualité de la diffusion avec un canal pas très bon entre les serveurs. Hélas, dans ce cas les délais augmentent.


Nous redémarrons les serveurs, ouvrons l'exemple de streaming bidirectionnel sur le o-eu1 , publions une vidéo cyclique avec un compte à rebours de 10 minutes à 0



Ouvrez l'exemple Player sur le e-eu1 , lisez le flux



Et faites de même sur e-eu2



CDN fonctionne! Comme vous pouvez le voir sur les captures d'écran, le temps dans la vidéo coïncide du côté de la publication et des téléspectateurs jusqu'à une seconde, grâce à WebRTC et à de bonnes chaînes.


Plus loin partout: connecter l'Amérique


Nous allons maintenant diffuser des streams aux téléspectateurs du continent américain, et nous n'oublierons pas la publication.



Sans désactiver la partie européenne du CDN, nous déployons trois serveurs dans le centre de données américain



Configuration:


  • Origine US

 cdn_enabled=true cdn_ip=o-us1.flashponer.com cdn_point_of_entry=o-eu1.flashponer.com cdn_nodes_resolve_ip=false cdn_role=origin 

  • Edge 1 US

 cdn_enabled=true cdn_ip=e-us1.flashphoner.com cdn_point_of_entry=o-eu1.flashponer.com cdn_nodes_resolve_ip=false cdn_role=edge 

  • Edge 2 US

 cdn_enabled=true cdn_ip=e-us2.flashphoner.com cdn_point_of_entry=o-eu1.flashponer.com cdn_nodes_resolve_ip=false cdn_role=edge 

On redémarre les serveurs américains, on vérifie la publication



et reproduction



Dans le même temps, le segment européen continue de fonctionner. Vérifiez si les abonnés américains verront le flux publié depuis l'Europe. Nous publions le flux test_eu sur le o-eu1



et jouez sur e-us1



Et ça marche aussi! En ce qui concerne le retard, dans les captures d'écran, nous observons à nouveau la coïncidence du minuteur dans la vidéo côté publication et dans les téléspectateurs jusqu'à une seconde.


Veuillez noter que les flux publiés sur un autre serveur Origin ne peuvent pas être lus directement depuis le serveur Origin par défaut, mais si vous en avez besoin, vous pouvez le configurer comme ceci


 cdn_origin_to_origin_route_propagation=true 

À suivre


Nous avons donc déployé un CDN simple, puis l'avons mis à l'échelle avec succès sur deux continents, en publiant et en lisant des flux WebRTC à faible latence. Dans le même temps, nous n'avons pas modifié les paramètres des flux pendant la lecture, ce qui est souvent requis dans la vie réelle: tous les téléspectateurs ont des canaux différents, et afin de maintenir la qualité de la diffusion, il est nécessaire, par exemple, de réduire la résolution ou le débit binaire. C'est ce que nous ferons dans la partie suivante ...


Les références


Le CDN de streaming WebRTC à faible latence est un réseau de distribution de contenu basé sur le serveur d'appels Web.

Source: https://habr.com/ru/post/fr477310/


All Articles