Streaming A / V: Wer wird gemultiplext und codiert, wo und wann?

963
pnongrata

Ich habe die Liste der von VLC unterstützten Video- / Audioformate durchgelesen , und mir wurde klar, dass ich eigentlich sehr wenig über Streaming Media weiß.

Wenn ein Streaming-Media-Feed sowohl Audio als auch Video enthält, wie werden diese separaten Signale in ein Signal integriert / integriert? Ich gehe irgendwann davon aus, dass ein Videoframe (von einer Kamera) und ein Soundframe (von einem Mikrofon) zusammen in das gleiche Signal gemultiplext werden?

Würde ich davon ausgehen, dass das integrierte A / V-Signal von dort verschlüsselt wird?

Oder werden beide separat codiert und dann miteinander kombiniert / multipliziert?

Und ist Multiplexing sogar das richtige Wort, um zu beschreiben, wie sie integriert sind?

Danke im Voraus.

1

1 Antwort auf die Frage

1
slhck

Zunächst müssen Sie zwischen einem Video- / Audio- Codec und einem Multimedia- Container unterscheiden . Ich habe in einer anderen Super User-Antwort ausführlicher über den Unterschied zwischen Codecs und Containern gesprochen . Kurz gesagt: In einem Container können verschiedene Audio- und Video-Bitströme (und Untertitel, Daten, Bilder usw.) gespeichert werden.

Dieser Vorgang des Zusammenführens von Bitströmen in einen Container wird in der Tat oft als "Multiplexing" bezeichnet. Sie könnten den Prozess des Verschachtelns von Audio / Video zu einem Multiplexing von Containern bezeichnen, aber streng genommen gilt dieser Begriff für MPEG-2-Transportstream-Multiplexing. Wir kommen später dazu.

Nun gibt es verschiedene Containerformate, die jedoch alle denselben Zweck haben: Die Synchronisierung der Streams im Inneren erledigen. Sie möchten sicherstellen, dass zusammengehörige Teile gleichzeitig abgespielt werden. Der Container enthält Metainformationen, die einem Wiedergabegerät genau sagen, wo es suchen und was abgespielt werden soll, beispielsweise 00: 02: 01.250.

Andere Dinge, die Sie in Containern ausführen können, umfassen Informationen zum Stream selbst. In vielen Streaming-Kontexten muss der Player beispielsweise die Größe des Videos, seine Bildrate und verschiedene andere Dinge kennen. Wenn Sie eine MP4-Datei streamen (MPEG-4 Part 14 ist ein Container und kein Codec), möchten Sie, dass das MOOV-Atom am Anfang der Datei platziert wird, damit der Player es sofort analysieren kann. Normalerweise befindet sich dieses "Atom" von Daten am Ende der Datei, wo es nicht wirklich nützlich ist, da Sie vor dem Streaming die gesamte Datei herunterladen müssen. Aus diesem Grund gibt es Tools, um es an den Anfang zu bringen, wie zB qt-faststart .

Wichtig ist jedoch, dass in jeder Multimedia-Anwendung, die Container aus einzelnen Bitstreams multiplext, diese Streams zuerst codiert werden. Es gibt kein "integriertes A / V-Signal", das codiert wird - der Container wird einfach das vorhandene umbrechen und die eigentlichen Audio- und Videodaten nicht berühren. Ihr Video wird also einem Video-Encoder zugeführt, Ihr Audio wird einem Audio-Encoder zugeführt. Das Ergebnis dieser beiden Aufgaben wird im Container zusammengeführt / verschachtelt. Der Container sorgt dafür, dass der endgültige Bitstream zusammengestellt wird, der in einem Streaming-Kontext übertragen oder als Datei gespeichert werden kann.

Nun gibt es viele Behälter, die für verschiedene Anwendungen geeignet sind. MPEG-2-Transportströme werden üblicherweise bei Fernsehübertragungen verwendet. Hier werden mehrere TV-Kanäle in einen Container gemultiplext, der dann über Funk, Kabel oder Satellit übertragen wird. Das Multiplexverfahren ist das Zeitmultiplexverfahren . "Multiplexing" ist hier auch der korrekte Fachbegriff. Für andere Behälter wird es nicht so oft verwendet. MPEG-4 Part 14 (MP4, das haben wir zuvor kurz erwähnt) ist dagegen im Web- und Mobile-Bereich sehr verbreitet und wird immer mehr zum Standard für den Austausch von Dateien, auch im professionellen Bereich.

Es gibt andere Container wie MKV, Ogg, MPEG-Programmstreams, FLV und viele mehr. Welche Sie wählen, hängt von der Anwendung ab, wie Sie sehen können, dies würde jedoch den Rahmen sprengen.

Wow - das sind zwei erstaunliche Antworten @slhck (+1 für beide!). Ein paar Folgemaßnahmen: Nun, da ich das etwas besser verstehe, ist es für mich offensichtlich, dass ich einen Video-Bitstream mit x264 (also h.264-Codec), einen Audiostream mit faac (also AAC) und Multiplex / Merge kodieren möchte sie in einen MP4-Container. Dies wird tatsächlich auf einer kleinen MCU (Raspberry Pi) geschehen, auf der Debian läuft. Ich möchte das Gerät hartcodieren, um den MP4-Bitstream über UDP / IP an eine bestimmte IP-Adresse, z. B. 1.2.3.4, zu senden. Würde VLS mir das alles erlauben? Wenn nicht, was ist mit FFMPEG? Wenn nicht, was sind meine Optionen? Danke noch einmal! pnongrata vor 11 Jahren 0
Mit anderen Worten, ich schätze, ich sehe einfach nicht, wo x264, faac, FFMPEG und VLS in eine Architektur "einrasten" würden, in der Sie ein Gerät haben, das einen Videostream von einer Kamera und einen Audiostrom von einem Mikrofon codiert komprimiert und fügt sie zusammen und überträgt dann den endgültigen Bitstrom. pnongrata vor 11 Jahren 0
Das ist alles in Ordnung :) Ich weiß nichts über VLC, aber ich weiß, dass FFmpeg Video von einer Web-Kamera in Linux kodieren kann und gleichzeitig auch Audio im laufenden Betrieb kodieren, in MP4 einbetten und streamen kann sie an das Netzwerk. Werfen Sie einen Blick auf [`ffserver`] (http://ffmpeg.org/ffserver.html) und [hier] (http://www.moreno.marzolla.name/software/linux-webcam-server/). für eine beispielhafte Anwendung. VLC sollte das auch können, obwohl ich das noch nie probiert habe. slhck vor 11 Jahren 0