134 votes

WebRTC - diffusion évolutive de flux en direct / multidiffusion

PROBLÈME :

WebRTC nous permet d'établir des connexions vidéo/audio de pair à pair. C'est parfait pour les appels p2p, les hangouts. Mais qu'en est-il de la diffusion (one-to-many, par exemple, 1-to-10000) ?

Disons que nous avons un diffuseur "B" et deux participants "A1", "A2". Bien sûr, le problème semble pouvoir être résolu : il suffit de connecter B à A1, puis B à A2. B envoie donc un flux vidéo/audio directement à A1 et un autre flux à A2. B envoie les flux deux fois.

Imaginons maintenant qu'il y ait 10000 participants : A1, A2, ..., A10000. Cela signifie que B doit envoyer 10000 flux. Chaque flux est de ~40KB/s, ce qui signifie que B a besoin d'un débit Internet sortant de 400MB/s pour maintenir cette diffusion. Inacceptable.

QUESTION INITIALE (OBSOLÈTE)

Est-il possible de résoudre ce problème en faisant en sorte que B n'envoie qu'un seul flux sur un serveur et que les participants n'extraient que ce flux de ce serveur ? Oui, cela signifie que la vitesse de sortie sur ce serveur doit être élevée, mais je peux la maintenir.

Ou peut-être cela signifie-t-il la ruine de l'idée de WebRTC ?

NOTES

Flash ne répond pas à mes besoins, car l'interface utilisateur est médiocre pour les clients finaux.

SOLUTION (PAS VRAIMENT)

26.05.2015 - Pour l'instant, il n'existe pas de solution de diffusion évolutive pour WebRTC, dans laquelle vous n'utilisez pas du tout de serveurs de médias. Il existe des solutions côté serveur ainsi que des solutions hybrides (p2p + côté serveur en fonction de différentes conditions) sur le marché.

Il y a quand même quelques technologies prometteuses comme https://github.com/muaz-khan/WebRTC-Scalable-Broadcast mais ils doivent répondre à ces problèmes éventuels : latence, stabilité globale de la connexion au réseau, formule d'extensibilité (ils ne sont probablement pas extensibles à l'infini).

SUGGESTIONS

  1. Réduisez l'unité centrale et la bande passante en réglant les codecs audio et vidéo ;
  2. Obtenez un serveur de médias.

5 votes

"La seule façon de construire une application évolutive est d'utiliser une solution côté serveur." Cela semble assez clair... Quant à WebRTC, il n'a jamais été prévu pour des diffusions à grande échelle. Utilisez quelque chose qui prend en charge la multidiffusion pour cela, ou si vous devez passer par Internet, une connexion individuelle basée sur un serveur, car les FAI ne routent pas la multidiffusion.

0 votes

Merci pour la réponse, c'est assez clair pour moi et... malheureusement ce que j'attendais. En ce qui concerne HLS, est-il possible d'utiliser, disons, getUserMedia() pour capturer la vidéo de la webcam, la poster sur le serveur en temps réel et permettre à d'autres personnes de l'extraire du serveur ?

0 votes

Clause de non-responsabilité : j'en ai assez de Flash, donc Flash ne fonctionne pas pour moi.

6voto

Angel Genchev Points 36

La diffusion "évolutive" n'est pas possible sur Internet, car la multidiffusion IP UDP n'y est pas autorisée. Mais en théorie, c'est possible sur un réseau local.
Le problème avec les Websockets est que vous n'avez pas accès à RAW UDP par conception et qu'il ne sera pas autorisé.
Le problème avec WebRTC est que ses canaux de données utilisent une forme de SRTP, où chaque session a sa propre cryptage clé. Donc à moins que quelqu'un "invente" ou qu'une API permette un moyen de action une seule clé de session entre tous les clients, le multicast est inutile.

1 votes

Mais les chats fonctionnent déjà avec WebRTC, de sorte que tout le monde voit chaque message, donc le one-to many devrait aussi fonctionner pour la vidéo d'une manière ou d'une autre.

0 votes

@rubo77 Les données envoyées avec un message texte ne sont rien du tout comparées au taux et à la quantité de données envoyées avec les flux vidéo. Les chats peuvent donc facilement contenir beaucoup plus d'utilisateurs en même temps.

5voto

flavioribeiro Points 33

Ma maîtrise porte sur le développement d'un protocole hybride de diffusion en direct cdn/p2p utilisant WebRTC. J'ai publié mes premiers résultats à http://bem.tv

Tout est open source et je recherche des contributeurs ! :-)

0 votes

Utilisez-vous un logiciel côté serveur comme le MCU ?

0 votes

J'utilise en fait des composants côté serveur des gens de rtcio : github.com/rtc-io

1 votes

On dirait que vous utilisez leurs composants pour la signalisation. Et pour le streaming vidéo côté serveur ? Ou votre solution est absolument P2P ?

5voto

user1674942 Points 63

Il existe la solution de la livraison assistée par les pairs, ce qui signifie que l'approche est hybride. Le serveur et les pairs aident à distribuer la ressource. C'est l'approche peer5.com y peercdn.com ont pris.

Si nous parlons spécifiquement de la diffusion en direct, cela ressemblera à quelque chose comme ceci :

  1. Le diffuseur envoie la vidéo en direct à un serveur.
  2. Le serveur enregistre la vidéo (généralement, il la transcende également dans tous les formats pertinents).
  3. Une métadonnée sur ce flux en direct est en cours de création, compatible avec HLS, HDS ou MPEG_DASH.
  4. Les consommateurs naviguent jusqu'au flux en direct correspondant, où le lecteur reçoit les métadonnées et sait quelles parties de la vidéo il faut lire ensuite.
  5. En même temps, le consommateur est connecté à d'autres consommateurs (via WebRTC).
  6. Ensuite, le joueur télécharge le morceau correspondant, soit directement depuis le serveur, soit depuis des pairs.

L'application d'un tel modèle permet d'économiser jusqu'à 90 % de la bande passante du serveur, en fonction du débit binaire du flux en direct et de la liaison montante collaborative des téléspectateurs.

avertissement : l'auteur travaille chez Peer5

0 votes

Merci. Je connais peer5 et je trouve que c'est une solution assez intéressante. Cependant, le but de cette question était de trouver une solution absolument sans serveur (uniquement STUN/TURN autorisé).

2voto

igorpavlov Points 382

La réponse d'Angel Genchev semble correcte, mais il existe une architecture théorique qui permet une diffusion à faible latence via WebRTC. Imaginons que B (diffuseur) diffuse un flux vers A1 (participant 1). Puis A2 (participant 2) se connecte. Au lieu de diffuser de B à A2, A1 commence à diffuser la vidéo reçue de B à A2. Si A1 se déconnecte, A2 commence à recevoir la vidéo de B.

Cette architecture pourrait fonctionner s'il n'y a pas de latences et de délais de connexion. En théorie, elle est donc correcte, mais pas en pratique.

Pour l'instant, j'utilise une solution côté serveur.

0 votes

Qu'en est-il de la vitesse du flux dans la solution côté serveur ? Veuillez partager.

0 votes

La solution côté serveur signifie ? Qu'avez-vous utilisé ? Cela me serait utile pour mes recherches. Veuillez partager. Merci.

0 votes

La solution côté serveur est Opentok de Tokbox. Je n'en fais pas la publicité, il y a des tonnes de solutions de ce type sur le marché, mais je m'en tiens à celle-ci. Elle fonctionne comme un serveur multimédia. P.S. Que voulez-vous dire par communication multipartite ? Je ne comprends pas.

1voto

stoiczek Points 416

C'est un problème vraiment difficile à résoudre. Je pense que les meilleurs résultats peuvent être obtenus avec une approche hybride, où vous avez des nœuds de type serveur et des clients.

Les nœuds de type serveur-a fonctionneront en tant que pairs "puissants" et pour les cas où le p2p n'est pas une option (traversée NAT du pare-feu).

En outre, vous pouvez utiliser certains des destinataires pour transmettre les données à d'autres pairs dans l'arbre de distribution.

Nous ( http://www.addlive.com ) prévoient de travailler à l'ajout d'une telle fonctionnalité à notre plateforme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X