Je suis donc un ingénieur logiciel essayant de comprendre quelques détails concrets sur le fonctionnement du streaming multimédia. J'ai passé la majeure partie de la journée à essayer de comprendre les différents codecs, formats de conteneurs et protocoles de streaming qui sont pertinents pour mon application. Jusqu'à présent, voici ma compréhension de son fonctionnement, qui pourrait très bien être induit en erreur:
- Le streaming multimédia se résume vraiment au format de conteneur et au protocole de streaming :
- Toutes les données audio sont encodées (via un codec audio) dans un train de bits audio
- Toutes les données vidéo sont encodées (encore une fois, via un codec) dans un train de bits vidéo
- Les deux flux sont fusionnés ( multiplexés? ) Ensemble dans un conteneur qui devient finalement un fichier (tel que MP4, etc.)
- Un serveur multimédia spécial sert ensuite ce conteneur (fichier MP4 ou autre format) à un client (peut-être un lecteur vidéo HTML5 exécuté dans le navigateur de quelqu'un) via un protocole de streaming standard, tel que RTSP
- Dans le cas d'un client de navigateur, je suppose que le navigateur lui-même a un client RTSP qu'il présente ensuite aux utilisateurs HTML5 Video Player
- Je pourrais héberger un fichier MP4 à partir d'un serveur Web , tel que nginx ou httpd, mais comme ces serveurs ne sont pas des serveurs RTSP, je ne pourrais traiter les demandes de MP4 que comme des demandes de téléchargement et, par conséquent, je ne pourrais pas diffuser le fichiers multimédias
- De même, si je devais utiliser
curl
pour récupérer les fichiers d'un serveur nginx, puisque nicurl
ni ni nginx ne parlent RTSP, il serait traité comme un téléchargement de fichier
- De même, si je devais utiliser
- Mais, lorsque j'héberge un fichier MP4 à partir d'un serveur multimédia en streaming (VideoLAN, Red5, Wowza, etc.), et que j'utilise un client RTSP (ou tout client multimédia en streaming pris en charge) pour demander un flux à partir de ce serveur, cela alors et seulement puis tout streaming réel se produit
- Par conséquent, même si les "vidéos" YouTube ou Vimeo sont hébergées sur des pages HTML servies sur HTTP (S) par des serveurs HTTP, je suppose que les lecteurs vidéo intégrés sur ces pages (où les vidéos sont effectivement lues ) commencent en fait une seconde , une connexion ultérieure à un serveur de streaming et un streaming se produit via RTSP ou un autre protocole non HTTP
C'est ma compréhension, et je suppose que je demanderais d'abord que si quelque chose que j'ai dit ci-dessus est incorrect, veuillez commencer par me corriger! En supposant que j'ai plus ou moins raison:
Comment les lecteurs multimédias en streaming, fonctionnant à l'intérieur des pages HTML et servis par des serveurs HTML, établissent-ils des connexions de streaming (RTSP, etc.) avec des serveurs de streaming multimédia (servant les requêtes RTSP)?
Réponses:
Applications courantes
Le RTSP semble actuellement être utilisé davantage avec des applications / interfaces de périphérique qui diffusent directement en direct (par exemple une caméra IP) ou redistribuent (comme un moteur) que pour diffuser des fichiers multimédias enregistrés à partir d'un emplacement physique via une interface de lecture Web HTTP avec un lecteur intégré.
Il semble que RTSP soit un protocole avec état et qu'il utilise plus UDP que TCP lors de la diffusion, et il est davantage utilisé comme un périphérique serveur (comme une caméra IP) qui est connecté à un réseau TCP / IP, et alimente les flux via UDP, etc. Vous vous connectez ensuite à ces flux (le serveur) en tant que client sur le même réseau et vous pouvez émettre des demandes RTSP à utiliser en conséquence.
Flux logique
La façon dont je comprends le flux de médias en streaming sous cette forme est:
Veuillez consulter la section Technologies de streaming ci-dessous pour une comparaison générale de HTTP par rapport à RTSP.
en outre
Dans les 10 raisons ci-dessous pour lesquelles vous ne devriez jamais héberger vos propres vidéos , j'ai cité les parties qui vont au point d'aider à répondre à votre question en «général» sans être trop spécifique.
Essentiellement, il dit que le site Web qui contient les commandes du lecteur multimédia intégré:
la source
Je traiterai ci-dessous principalement votre question de savoir ce qui se passe lorsqu'une vidéo est affichée dans le navigateur. Le sujet est vaste, je n'aborderai donc que les éléments pertinents.
HTML5 a introduit la
<VIDEO>
balise qui a résolu le problème d'intégration de la vidéo affichée dans le navigateur lors de l'utilisation de JavaScript et CSS. La<OBJECT>
balise précédente nécessitait un logiciel externe et était mal intégrée à la page. Le nouveau tag en vigueur obligeait le navigateur à devenir également un lecteur vidéo, bien qu'aucune norme n'ait été imposée. Le résultat a été une fragmentation totale des normes, à laquelle la seule solution est que le serveur vidéo mettra à disposition plusieurs formats vidéo et que toutes ces sources alternatives soient spécifiées dans la<VIDEO>
balise, à partir de laquelle le navigateur choisira celle qu'il prend en charge.Un exemple de balise avec plusieurs sources:
La
<VIDEO>
balise elle-même est indépendante du protocole, elle peut donc utiliser n'importe quel protocole pris en charge par le navigateur, y compris RTSP. La prise en charge du protocole MPEG-DASH (Dynamic Adaptive Streaming sur HTTP) est récemment devenue très complète, donc il jouera sur la plupart des appareils et navigateurs natifs, ou en utilisant HTML5, ce qui signifie qu'aucun plugin supplémentaire n'est requis. Voir ce tableau de compatibilité des appareils et du navigateur . Consultez également cet article Mozilla pour préparer votre serveur à servir MPEG-DASH. DASH fonctionne via HTTP, donc cela fonctionnera tant que votre serveur HTTP prend en charge les demandes de plage d'octets et qu'il est configuré pour servir les fichiers .mpd avecmimetype="application/dash+xml"
.L'interaction normale entre le client et le serveur ressemble à ce qui suit. Pour HTML5 VIDEO, le navigateur est également le lecteur, bien qu'il puisse ouvrir une nouvelle connexion pour la lecture.
La connexion initiale fournit les métadonnées que le client utilise pour afficher la vidéo. Si le protocole RTSP a été utilisé pour obtenir ces métadonnées, une connexion RTP est ensuite créée pour transférer les données vidéo + audio. Le protocole RTCP est utilisé pour transférer des commandes supplémentaires au serveur.
RTP, RTCP et RTSP fonctionnent tous sur des ports différents. Habituellement, lorsque RTP est sur le port N, RTCP est sur le port N + 1. Une session RTP peut contenir plusieurs flux à combiner à l'extrémité du récepteur; par exemple, l'audio et la vidéo peuvent être sur des canaux séparés.
Pour que personne ne soit exclu de votre contenu, vous devez mettre à disposition à la fois des codecs libres de droits, webM ou Theora, et de la vidéo H.264, ainsi que du Vorbis et de l'audio MP3. (Facile à dire, difficile à faire.)
Voici ce qui se passe en détail pour RTSP:
Le client établit une connexion TCP avec les serveurs, généralement sur le port TCP 554, le port bien connu de RTSP.
Le client commencera alors à émettre une série de commandes d'en-tête RTSP qui ont un format similaire à HTTP, dont chacune est reconnue par le serveur. Dans ces commandes RTSP, le client décrira au serveur les détails des exigences de session, telles que la version de RTSP qu'il prend en charge, le transport à utiliser pour le flux de données et toutes les informations de port UDP ou TCP associées. Ces informations sont transmises à l'aide des en-têtes DESCRIBE et SETUP et sont augmentées sur la réponse du serveur avec un ID de session que le client et tout périphérique proxy transitoire peuvent utiliser pour identifier le flux dans d'autres échanges.
Une fois la négociation des paramètres de transport terminée, le client émettra une commande PLAY pour demander au serveur de commencer la livraison du flux de données RTP.
Une fois que le client décide de fermer le flux, une commande TEARDOWN est émise avec l'ID de session demandant au serveur de cesser la livraison RTP associée à cet ID.
Lectures complémentaires:
la source
Voici une réponse rapide et sale-
Il y a une différence entre lire une vidéo sur le Web et la diffuser en temps réel.
La lecture se fait au moyen d'un lecteur qui est inclus dans la page Web (peut utiliser Flash, JS ou un objet vidéo html5). Le client (navigateur) télécharge ce lecteur et l'exécute. Le joueur, à son tour, récupère la vidéo à partir d'une simple URL de téléchargement. En fait, même avec Youtube, il existe des programmes qui vous permettent d'accéder directement aux fichiers vidéo hébergés et de les télécharger comme vous le feriez pour n'importe quel fichier. Étant donné que le système utilise un ancien lien de téléchargement classique, il n'est pas nécessaire de recourir à des protocoles de streaming complexes tels que RTSP
Le streaming en temps réel (par exemple, à partir d'une webcam) est ... eh bien, plus compliqué. Flash a cette fonctionnalité intégrée, mais elle ne devrait plus être utilisée. La vidéo HTML5 ne prend pas en charge la diffusion en temps réel, mais les gens ont pu la "tromper" en obligeant le serveur d'hébergement de fichiers à changer constamment le fichier vidéo qu'il propose.
la source