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
- Réduisez l'unité centrale et la bande passante en réglant les codecs audio et vidéo ;
- 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.
1 votes
Pourquoi ne pas utiliser WebRTC du client au serveur ? Le problème réside dans la distribution, dans la mesure où la connexion du client ne peut pas le gérer. Il faut donc envoyer un seul flux au serveur et le diffuser aux clients à partir de là. La bande passante va être chère, mais vous ne pouvez pas éviter d'envoyer un seul flux à chaque utilisateur ou de faire en sorte que l'utilisateur envoie un flux aux autres utilisateurs.
1 votes
À ma connaissance, il existe au moins deux sociétés qui tentent de faire de la diffusion vidéo p2p basée sur le webrtc : affovi.com/rtcplayer.html - principalement pour la vidéo en direct ; et peer5.com - principalement pour la VOD.
0 votes
"Pourquoi ne pas utiliser WebRTC du client au serveur ?" - coûteux, goulots d'étranglement, non évolutif. D'autres raisons ?
0 votes
@SvetlinMladenov affovi.com est indisponible. Connaissez-vous une alternative ?
0 votes
@RamilAmr le voici : viblast.com/demo
1 votes
@igorpavlov Vous devriez vérifier : github.com/muaz-khan/WebRTC-Scalable-Broadcast Bien que cela ne fonctionne qu'en chrome, et pas encore de diffusion audio.
0 votes
Très beau projet. Que se passe-t-il si le relayeur a une mauvaise connexion internet (juste votre avis) ?
0 votes
Je pense que la meilleure façon d'implémenter ceci est d'utiliser d'autres pairs comme serveurs pour les nouveaux arrivants, par exemple si je me joins comme 6ème personne à cette diffusion, le serveur signalera avec les autres clients et me connectera à n'importe quel autre client joint et enverra son flux à venir au nouveau venu comme trafic de pair à pair. Ce système peut être mis à l'échelle horizontalement, chaque nouveau venu se connectant à son ancêtre. Et si votre connexion est interrompue, le serveur envoie simplement la connexion à un autre pair, comme il le faisait auparavant.
0 votes
Melih, y a-t-il un service/une mise en œuvre agréable qui fonctionne ? En outre, c'est un bon schéma en théorie, mais considérez-vous également les latences comme un problème majeur ?
0 votes
À quels "changements récents" faites-vous référence ?
0 votes
Les réponses actuelles sont peut-être dépassées. Cette technologie est à la pointe du progrès et les dernières réponses ont été fournies il y a au moins un semestre.
4 votes
Il n'y a aucun moyen d'atteindre cette évolutivité sans une sorte de MCU. WebRTC est conçu pour être un système Peer-to-Peer. Il n'est pas possible de diffuser à partir de ce système sans mettre à mal votre diffuseur (avec une connexion peer unique pour chaque flux, qui, en interne, est un autre flux en cours d'encodage). Quant à relayer le média de pair à pair, cela pourrait être possible, mais bien sûr, cela entraînerait une latence supplémentaire pour chaque pair ajouté au flux par la suite. Pour la qualité, et l'évolutivité, avoir un serveur MCU webrtc est la seule solution réaliste.
0 votes
Je suis tombé sur ce site en cherchant un sujet connexe. Hier, j'ai assisté à un discours étonnant, qui peut vous aider, regardez ça. greta.io
0 votes
Cela semble bien, mais je n'arrive pas à comprendre comment ils résolvent un problème de connexion instable des pairs. Je leur parlerai probablement bientôt.
0 votes
Avez-vous une solution pour 2017 ?
0 votes
Pas encore de solution. Je pense que cela est dû aux limites fondamentales des protocoles de réseau.
0 votes
@igorpavlov : peut-être que le WebRTC-Scalable-Broadcast est le meilleur choix du moment, non ?