Je travaille sur un site Web qui doit diffuser des vidéos en direct aux utilisateurs, et en tant que tel, j'ai dû me renseigner sur l'état désolant de la technologie actuelle de streaming vidéo sur navigateur. Les solutions les plus populaires pour la diffusion en direct à l'heure actuelle ont toutes des problèmes de compatibilité; RTMP nécessite Flash, HLS est uniquement pris en charge nativement sur Safari et Chrome pour Android, DASH n'est pris en charge nativement nulle part et l'utilisation de dash.js nécessite des extensions de source multimédia , qui ne sont pas encore largement prises en charge.
Cela m'amène à une question qui me semble évidente: est-il possible d'utiliser le téléchargement progressif simple comme alternative aux protocoles tels que HLS, RTMP et DASH qui nécessitent soit un support de navigateur, soit des plugins?
L'idée d'utiliser le téléchargement progressif pour diffuser des médias en direct n'est pas sans précédent; les gens le font déjà pour l'audio. Des outils comme liveCaster vous permettent de diffuser de l'audio MP3 en direct via une seule réponse HTTP progressive sans avoir besoin d'un fichier MP3 préenregistré, et des bibliothèques comme AmplitudeJS ont fait tout leur possible pour ajouter des fonctionnalités liées à ce type de streaming audio en direct .
Je n'ai pas vu d'exemples de cette technique utilisée dans la nature pour la vidéo , cependant, et je ne peux pas dire pourquoi. Il semble que cela supprimerait une couche de problèmes de compatibilité difficiles et difficiles à gérer pour le navigateur pour un compromis relativement faible. (Et la compatibilité est toujours un énorme problème pour la diffusion en direct, même lorsque les pros le font; si j'essaie de regarder des vidéos en direct sur iPlayer de la BBC dans Firefox, cela me donne juste un message d'erreur me disant d'installer Flash.) Pourtant, personne n'utilise cette technique, et je n'ai jamais vu personne mentionner cette idée à part moi.
Pourquoi? Y a-t-il une limitation fondamentale que je ne vois pas qui rendrait impossible de simplement diffuser un fichier vidéo comme un MP4 via un téléchargement progressif lors de sa génération, et de le lire dans un <video>
élément lors du téléchargement?
la source
Réponses:
Votre question est valide et théoriquement, je pense que vous pouvez utiliser les téléchargements progressifs pour le streaming vidéo en direct. En fait, beaucoup de vidéos en ligne comme YouTube, etc. utilisent déjà HTTP. Je suppose que vous parlez strictement de live streaming et pas seulement le streaming.
Vous devrez cependant implémenter vous-même les cas d'utilisation de la diffusion en direct! Autrement, les protocoles de streaming (RTMP, etc.) font eux-mêmes. Voici quelques raisons de préférer ces protocoles et cette architecture:
1. Débit binaire variable
La plupart des vidéos en streaming en direct sont encodées en VBR et votre vidéo devra s'adapter rapidement à l'évolution de la congestion du réseau de votre client. Ainsi, votre vidéo peut passer de plusieurs résolutions en très peu de temps en fonction de la vitesse ou de la lenteur de la connexion client.
Selon Wikipedia
2. Contenu en direct
Le point le plus important est que le streaming en direct signifie du contenu en direct . Contrairement au téléchargement progressif HTTP, vous ne pouvez pas mettre en mémoire tampon à tout moment. L'utilisateur doit voir le dernier cadre destiné au monde entier et ne peut pas prendre de retard.
3. Désactiver la recherche
Un problème mineur, mais le protocole ne devrait spécifiquement pas permettre à l'utilisateur de rechercher en arrière (et évidemment en avant). Cela ne devrait pas seulement être contrôlé au niveau du lecteur vidéo mais également au niveau du réseau.
4. Déconnexions fréquentes / réseau peu fiable
Je ne suis pas certain de ce point, mais je sais qu'une fois qu'un téléchargement HTTP entrant est déconnecté, cela peut prendre un certain temps pour établir une autre poignée de main (même avec
keep-alive
). Les protocoles en direct sont beaucoup plus rapides à connecter et à déconnecter en raison du point suivant ->5. Latence
HTTP fonctionne par nature sur TCP, ce qui garantit la livraison des paquets. Comparez cela avec UDP utilisé dans de nombreux protocoles (en particulier les jeux multijoueurs en direct) où la vitesse est prioritaire sur les garanties.
Pour plus d'informations, voir ici -> https://en.wikipedia.org/wiki/Streaming_media#Protocols
6. Copie de contenu
La plupart des serveurs de diffusion en direct ne répondent qu'au contenu de l'heure actuelle. Bien qu'il soit toujours possible de copier le contenu des flux en direct, il faut recourir à la capture d'écran, etc. Donner un téléchargement progressif HTTP rend la tâche de copier du contenu assez triviale (d'où de nombreux téléchargeurs YouTube).
Maintenant, HTTP peut être modélisé pour fournir la plupart des éléments ci-dessus.
Le HTTP Live Streaming (HLS) d' Apple , vous l'avez mentionné, se rapproche le plus de ce que vous essayez d'atteindre.
Et des recherches actives sont en cours dans ce domaine, comme indiqué ici -> http://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=65749&PageNum=2
Je suis à la recherche de plus d'informations et mettrai à jour cette réponse.
la source