Freigeben über


Media Foundation: Grundlegende Konzepte

Wenn Sie mit digitalen Medien noch nicht vertraut sind, werden in diesem Thema einige Konzepte vorgestellt, die Sie verstehen müssen, bevor Sie eine Media Foundation-Anwendung schreiben.

Datenströme

Ein Stream ist eine Sequenz von Mediendaten mit einem einheitlichen Typ. Die häufigsten Typen sind Audio und Video, aber ein Stream kann fast jede Art von Daten enthalten, einschließlich Text, Skriptbefehlen und Standbildern. Der Begriff Stream in dieser Dokumentation impliziert keine Übermittlung über ein Netzwerk. Eine Mediendatei, die für die lokale Wiedergabe vorgesehen ist, enthält auch Streams.

In der Regel enthält eine Mediendatei entweder einen einzelnen Audiodatenstrom oder genau einen Videostream und einen Audiostream. Eine Mediendatei kann jedoch mehrere Datenströme desselben Typs enthalten. Beispielsweise kann eine Videodatei Audiostreams in verschiedenen Sprachen enthalten. Zur Laufzeit wählt die Anwendung den zu verwendenden Stream aus.

Komprimierung

Komprimierung bezieht sich auf jeden Prozess, der die Größe eines Datenstroms reduziert, indem redundante Informationen entfernt werden. Komprimierungsalgorithmen lassen sich in zwei allgemeine Kategorien einteilen:

  • Verlustfreie Komprimierung. Mithilfe eines verlustfreien Algorithmus sind die rekonstruierten Daten mit dem Original identisch.
  • Verlustbehaftete Komprimierung. Bei Verwendung eines Verlustalgorithmus sind die rekonstruierten Daten eine Näherung des Ursprünglichen, aber keine exakte Übereinstimmung.

In den meisten anderen Domänen ist eine verlustbehaftete Komprimierung nicht akzeptabel. (Stellen Sie sich vor, sie erhalten eine "Näherung" einer Kalkulationstabelle!) Aber verlustbehaftete Komprimierungsschemas eignen sich aus verschiedenen Gründen gut für Audio und Video.

Der erste Grund hat mit der Physik der menschlichen Wahrnehmung zu tun. Wenn wir einen komplexen Klang wie eine Musikaufnahme hören, sind einige der darin enthaltenen Informationen für das Ohr nicht wahrnehmbar. Mit Hilfe der Signalverarbeitungstheorie ist es möglich, die nicht wahrnehmbaren Frequenzen zu analysieren und zu trennen. Diese Frequenzen können ohne Wahrnehmungseffekt entfernt werden. Obwohl das rekonstruierte Audio nicht genau mit dem Original übereinstimmt, klingt es für den Listener gleich. Ähnliche Prinzipien gelten für Videos.

Zweitens kann je nach Verwendungszweck eine gewisse Beeinträchtigung der Klang- oder Bildqualität akzeptabel sein. In der Telefonie ist audio beispielsweise häufig stark komprimiert. Das Ergebnis ist gut genug für ein Telefongespräch – aber Sie möchten einem Sinfonieorchester nicht am Telefon zuhören.

Komprimierung wird auch als Codierung bezeichnet, und ein Gerät, das codiert, wird als Encoder bezeichnet. Der umgekehrte Prozess ist die Decodierung, und das Gerät wird natürlich als Decoder bezeichnet. Der allgemeine Begriff für Encoder und Decoder ist Codec. Codecs können in Hardware oder Software implementiert werden.

Seit dem Aufkommen digitaler Medien hat sich die Komprimierungstechnologie schnell verändert, und heute werden viele Komprimierungsschemas verwendet. Dies ist eine der Standard Herausforderungen für die digitale Medienprogrammierung.

Mediencontainer

Es ist selten, einen rohen Audio- oder Videodatenstrom als Computerdatei zu speichern oder direkt über das Netzwerk zu senden. Zum einen wäre es unmöglich, einen solchen Stream zu decodieren, ohne im Voraus zu wissen, welcher Codec verwendet werden soll. Daher enthalten Mediendateien in der Regel mindestens einige der folgenden Elemente:

  • Dateiheader, die die Anzahl der Streams, das Format jedes Datenstroms usw. beschreiben.
  • Ein Index, der den zufälligen Zugriff auf den Inhalt ermöglicht.
  • Metadaten, die den Inhalt beschreiben (z. B. künstler oder titel).
  • Paketheader, um die Netzwerkübertragung oder den zufälligen Zugriff zu ermöglichen.

In dieser Dokumentation wird der Begriff Container verwendet, um das gesamte Paket von Streams, Headern, Indizes, Metadaten usw. zu beschreiben. Der Grund für die Verwendung des Begriffs Container anstelle von Datei ist, dass einige Containerformate für die Liveübertragung konzipiert sind. Eine Anwendung könnte den Container in Echtzeit generieren und nie in einer Datei speichern.

Ein frühes Beispiel für einen Mediencontainer ist das AVI-Dateiformat. Weitere Beispiele sind MP4 und Advanced Systems Format (ASF). Container können durch die Dateinamenerweiterung (z. B. .mp4) oder durch den MIME-Typ identifiziert werden.

Das folgende Diagramm zeigt eine typische Struktur für einen Mediencontainer. Das Diagramm stellt kein bestimmtes Format dar. die Details der einzelnen Formate variieren stark.

Diagramm eines typischen Mediencontainers

Beachten Sie, dass die im Diagramm dargestellte Struktur hierarchisch ist, wobei Kopfzeileninformationen am Anfang des Containers angezeigt werden. Diese Struktur ist typisch für viele (aber nicht alle) Containerformate. Beachten Sie auch, dass der Datenabschnitt verschachtelte Audio- und Videopakete enthält. Diese Art der Verschachtelung ist in Mediencontainern üblich.

Der Begriff Multiplexing bezieht sich auf den Prozess der Paketierung der Audio- und Videodatenströme und die Verschachtelung der Pakete in den Container. Der umgekehrte Prozess, der die Datenströme aus den paketierten Daten neu zusammenfügt, wird als Demultiplexing bezeichnet.

Formate

In digitalen Medien ist der Begriff Format mehrdeutig. Ein Format kann auf den Codierungstyp verweisen, z. B. H.264-Video, oder auf den Container, z. B. MP4. Diese Unterscheidung ist für gewöhnliche Benutzer oft verwirrend. Die Namen, die Medienformaten zugewiesen werden, helfen nicht immer. MP3 bezieht sich beispielsweise sowohl auf ein Codierungsformat (MPEG-1 Audio Layer 3) als auch auf ein Dateiformat.

Die Unterscheidung ist jedoch wichtig, da das Lesen einer Mediendatei tatsächlich zwei Phasen umfasst:

  1. Zunächst muss der Container analysiert werden. In den meisten Fällen können die Anzahl der Streams und das Format der einzelnen Datenströme erst bekannt werden, wenn dieser Schritt abgeschlossen ist.
  2. Wenn die Datenströme komprimiert werden, müssen sie mit den entsprechenden Decodern decodiert werden.

Diese Tatsache führt ganz natürlich zu einem Softwaredesign, bei dem separate Komponenten verwendet werden, um Container zu analysieren und Datenströme zu decodieren. Darüber hinaus eignet sich dieser Ansatz für ein Plug-In-Modell, sodass Dritte ihre eigenen Parser und Codecs bereitstellen können. Unter Windows bietet das Component Object Model (COM) eine Standardmethode, um eine API von ihrer Implementierung zu trennen. Dies ist eine Anforderung für jedes Plug-In-Modell. Aus diesem Grund verwendet Media Foundation (unter anderem) COM-Schnittstellen.

Das folgende Diagramm zeigt die Komponenten, die zum Lesen einer Mediendatei verwendet werden:

Diagramm der Komponenten zum Lesen einer Mediendatei

Das Schreiben einer Mediendatei erfordert auch zwei Schritte:

  1. Codieren der unkomprimierten Audio-/Videodaten.
  2. Platzieren sie die komprimierten Daten in ein bestimmtes Containerformat.

Das folgende Diagramm zeigt die Komponenten, die zum Schreiben einer Mediendatei verwendet werden:

Diagramm, das die Komponenten zum Schreiben einer Mediendatei zeigt.

Programmierhandbuch für Media Foundation