Ich bin also ein Software-Ingenieur, der versucht, einige Details über die Funktionsweise von Streaming Media zu verstehen. Ich habe den Löwenanteil des Tages damit verbracht, die verschiedenen Codecs, Containerformate und Streaming-Protokolle zu verstehen, die für meine Anwendung relevant sind. Soweit ist hier mein Verständnis, wie es funktioniert, was sehr gut irregeführt werden könnte:
- Streaming-Medien beschränken sich auf das Containerformat und das Streaming-Protokoll :
- Alle Audiodaten werden (über den Audio-Codec) in einen Audio-Bitstream codiert
- Alle Videodaten werden (wiederum über einen Codec) in einen Videobitstream codiert
- Die beiden Streams werden zu einem Container zusammengeführt ( gemultiplext? ) , Der letztendlich zu einer Datei (wie z. B. MP4 usw.) wird.
- Ein spezieller Medienserver stellt diesen Container (MP4-Datei oder ein anderes Format) einem Client (möglicherweise einem HTML5-Videoplayer, der in einem anderen Browser ausgeführt wird) über ein Standard-Streaming-Protokoll wie RTSP zur Verfügung
- Im Fall eines Browser-Clients gehe ich davon aus, dass der Browser selbst einen RTSP-Client hat, den er dann dem HTML5-Video-Player des Benutzers irgendwie präsentiert
- Ich könnte eine MP4-Datei von einem Webserver wie nginx oder httpd hosten, aber da diese Server keine RTSP-Server sind, wäre ich nur in der Lage, Anforderungen für MP4 als Download-Anforderungen zu behandeln , und wäre daher nicht in der Lage, die zu streamen Media-Dateien
- Ebenso, wenn ich
curl
zum Abrufen der Dateien von einem Nginx-Server verwendencurl
würde, würde es als Dateidownload behandelt , da weder Nginx noch RTSP sprechen
- Ebenso, wenn ich
- Wenn ich jedoch eine MP4-Datei von einem Streaming Media-Server (VideoLAN, Red5, Wowza usw.) hoste und einen RTSP-Client (oder einen unterstützten Streaming Media-Client) verwende, um einen Stream von diesem Server anzufordern , dann und nur Tritt dann ein tatsächliches Streaming auf ?
- Obwohl YouTube- oder Vimeo-"Videos" auf HTML-Seiten gehostet werden, die über HTTP (S) von HTTP-Servern bereitgestellt werden, gehe ich davon aus, dass die eingebetteten Videoplayer auf diesen Seiten (auf denen die Videos tatsächlich abgespielt werden) tatsächlich eine Sekunde beginnen , anschließende Verbindung zu einem Streaming-Server und das Streaming erfolgt über RTSP oder ein anderes Nicht-HTTP-Protokoll
Das ist mein Verständnis, und ich denke, ich würde zuerst fragen, ob etwas, das ich oben angegeben habe, falsch ist. Bitte korrigieren Sie mich zuerst! Vorausgesetzt, ich habe mehr oder weniger recht:
Wie stellen Streaming-Media-Player, die in HTML-Seiten ausgeführt und von HTML-Servern bereitgestellt werden, Streaming-Verbindungen (RTSP usw.) mit Streaming-Media-Servern her (die RTSP-Anforderungen bereitstellen)?
Antworten:
Allgemeine Anwendungen
RTSP scheint derzeit eher für Anwendungen / Geräte-Schnittstellen verwendet zu werden, die direkt Live-Streaming (z. B. IP-Kamera) oder Re-Streaming (wie eine Engine) ausführen, als für das Streaming gespeicherter Mediendateien von einem physischen Speicherort über eine HTTP-Web-Wiedergabeschnittstelle mit einem eingebetteter Player.
Es scheint, dass RTSP ein statusbehaftetes Protokoll ist und beim Streaming mehr UDP als TCP verwendet und eher als Servergerät (wie eine IP - Kamera) verwendet wird, das mit einem TCP / IP - Netzwerk verbunden ist und Streams über UDP usw. ausgibt Sie stellen dann eine Verbindung zu diesen Feeds (dem Server) als Client im selben Netzwerk her und können RTSP-Anforderungen ausgeben , um sie entsprechend zu nutzen.
Logischer Ablauf
Ich verstehe den Fluss von Streaming-Medien in dieser Form wie folgt:
Im folgenden Abschnitt über Streaming-Technologien finden Sie einen allgemeinen Vergleich von HTTP und RTSP.
Außerdem
In den folgenden 10 Gründen, warum Sie niemals Ihre eigenen Videos hosten sollten, habe ich die Teile zitiert, die auf den Punkt kommen, um Ihnen zu helfen, Ihre Frage "allgemein" zu beantworten, ohne zu spezifisch zu sein.
Im Wesentlichen heißt es, dass die Website mit den eingebetteten Media Player-Steuerelementen:
quelle
Ich werde im Folgenden hauptsächlich Ihre Frage behandeln, was passiert, wenn ein Video im Browser angezeigt wird. Das Thema ist sehr umfangreich, daher werde ich nur auf die relevanten Punkte eingehen.
HTML5 hat das
<VIDEO>
Tag eingeführt, mit dem das Problem der Integration des angezeigten Videos in den Browser unter Verwendung von JavaScript und CSS behoben wurde. Das vorherige<OBJECT>
Tag erforderte externe Software und war schlecht in die Seite integriert. Das neue Tag erforderte, dass der Browser auch ein Videoplayer wurde, obwohl keine Standards auferlegt wurden. Das Ergebnis war eine vollständige Fragmentierung der Standards. Die einzige Lösung besteht darin, dass der Videoserver mehrere Videoformate zur Verfügung stellt und dass alle diese alternativen Quellen in dem<VIDEO>
Tag angegeben werden, aus dem der Browser die unterstützte auswählt.Ein Beispiel für ein Tag mit mehreren Quellen:
Das
<VIDEO>
Tag selbst ist protokollunabhängig und kann daher jedes vom Browser unterstützte Protokoll einschließlich RTSP verwenden. Die Unterstützung des MPEG-DASH-Protokolls (Dynamic Adaptive Streaming über HTTP) ist in letzter Zeit sehr umfangreich geworden. Daher wird es auf den meisten Geräten und Browsern nativ oder unter Verwendung von HTML5 wiedergegeben, sodass keine zusätzlichen Plugins erforderlich sind. Siehe diese Geräte- und Browserkompatibilitätstabelle . Lesen Sie auch diesen Mozilla-Artikel zur Vorbereitung Ihres Servers für die Bereitstellung von MPEG-DASH. DASH funktioniert über HTTP. Dies funktioniert also, solange Ihr HTTP-Server Bytebereichsanforderungen unterstützt und so eingerichtet ist, dass er MPD-Dateien mit unterstütztmimetype="application/dash+xml"
.Die normale Interaktion zwischen Client und Server sieht wie folgt aus. Bei HTML5 VIDEO ist der Browser auch der Player, obwohl möglicherweise eine neue Verbindung zum Abspielen geöffnet wird.
Die ursprüngliche Verbindung liefert die Metadaten, die der Client zur Anzeige des Videos verwendet. Wenn das RTSP-Protokoll zum Abrufen dieser Metadaten verwendet wurde, wird später eine RTP-Verbindung zum Übertragen der Video- und Audiodaten erstellt. Das RTCP-Protokoll wird verwendet, um zusätzliche Befehle an den Server zu übertragen.
RTP, RTCP und RTSP arbeiten alle an verschiedenen Ports. Wenn sich RTP auf Port N befindet, befindet sich RTCP normalerweise auf Port N + 1. Eine RTP-Sitzung kann mehrere Streams enthalten, die am Ende des Empfängers kombiniert werden müssen. Audio und Video können sich beispielsweise auf getrennten Kanälen befinden.
Damit niemand von Ihren Inhalten ausgeschlossen wird, sollten Sie sowohl lizenzfreie Codecs, webM oder Theora als auch H.264-Video sowie Vorbis- und MP3-Audio zur Verfügung stellen. (Einfach gesagt, schwer zu tun.)
Folgendes passiert im Detail für RTSP:
Der Client stellt eine TCP-Verbindung zu den Servern her, normalerweise über den TCP-Port 554, den bekannten Port für RTSP.
Der Client beginnt dann mit der Ausgabe einer Reihe von RTSP-Header-Befehlen, die ein HTTP-ähnliches Format aufweisen und vom Server jeweils bestätigt werden. In diesen RTSP-Befehlen beschreibt der Client dem Server Details zu den Sitzungsanforderungen, z. B. die unterstützte RTSP-Version, den für den Datenfluss zu verwendenden Transport und alle zugehörigen UDP- oder TCP-Portinformationen. Diese Informationen werden mit den Headern DESCRIBE und SETUP übergeben und auf der Serverantwort mit einer Sitzungs-ID ergänzt, die der Client und alle vorübergehenden Proxy-Geräte verwenden können, um den Stream in weiteren Austauschen zu identifizieren.
Sobald die Aushandlung der Transportparameter abgeschlossen ist, gibt der Client einen PLAY-Befehl aus, um den Server anzuweisen, mit der Übermittlung des RTP-Datenstroms zu beginnen.
Sobald der Client entscheidet, den Stream zu schließen, wird ein TEARDOWN-Befehl zusammen mit der Sitzungs-ID ausgegeben, der den Server anweist, die mit dieser ID verknüpfte RTP-Übermittlung zu beenden.
Weitere Lektüre:
quelle
Hier ist eine schnelle und schmutzige Antwort.
Es gibt einen Unterschied zwischen der Wiedergabe von Videos im Web und dem Streaming in Echtzeit.
Die Wiedergabe erfolgt mit einem Player, der auf der Webseite enthalten ist (möglicherweise mit Flash, JS oder einem HTML5-Videoobjekt). Der Client (Browser) lädt diesen Player herunter und führt ihn aus. Der Player ruft seinerseits das Video über eine einfache Download-URL ab. Selbst bei Youtube gibt es Programme, mit denen Sie direkt auf die gehosteten Videodateien zugreifen und sie herunterladen können, wie Sie es bei jeder anderen Datei tun würden. Da das System einen regulären alten Download-Link verwendet, sind keine komplexen Streaming-Protokolle wie RTSP erforderlich
Echtzeit-Streaming (etwa von einer Webcam) ist ... schwieriger. In Flash ist diese Funktionalität bereits integriert, sie sollte jedoch nicht mehr verwendet werden. HTML5-Video unterstützt kein Echtzeit-Streaming, aber die Leute konnten es "austricksen", indem der Datei-Hosting-Server die angebotene Videodatei ständig ändert.
quelle