Interlaced Video Encoding (Microsoft Media Foundation)
Videodaten, die für die Verwendung mit Computern vorgesehen sind, sind in der Regel progressiv, was bedeutet, dass jeder Frame als einzelnes Bild codiert ist. Einige Geräte, wie Fernseher, zeigen keinen Rahmen auf einmal, sondern als zwei Bilder an. Eines der Bilder oder Felder enthält alle geraden nummerierten Zeilen. Das andere Feld enthält die Daten für alle ungeraden zeilen. Video, das mit mehr als einem Feld pro Frame codiert ist, wird als Interlaced bezeichnet, da es durch Wechseln zwischen dem geraden Feld und dem ungeraden Feld gerendert wird.
In der Vergangenheit wurden interlacierte Videoinhalte vor der Codierung mit dem Windows Media Video-Codec immer aufgehoben. Ab der Windows Media 9-Serie unterstützt der Videoencoder jedoch die Komprimierung von Interlaced-Inhalten, ohne sie zuerst in progressive zu konvertieren. Die Beibehaltung von Interlacing in einer codierten Datei ist wichtig, wenn der Inhalt jemals auf einem interlaced Display wie einem Fernseher gerendert wird. Dieses Feature ist von zunehmender Bedeutung, da die Unterstützung für Windows Media-basierte Inhalte auf DVD-Player, Set-Top-Boxen und andere Heimelektronik übertragen wird.
Die einfachste Möglichkeit zum Codieren und Bereitstellen von Interlaced-Videos besteht darin, Ihre Anwendung mithilfe des Windows Media Format SDK zu entwickeln und den Inhalt in ASF-Dateien zu speichern. Die interlaced-Informationen zu Frames werden mithilfe von Dateneinheitserweiterungen an den Codec übergeben, die für ASF-Inhalte gut funktionieren, aber in anderen Containern etwas schwieriger zu unterstützen sind. Weitere Informationen zu Dateneinheitenerweiterungen finden Sie unter Verwenden von Dateneinheitserweiterungen.
Die Unterstützung von Interlaced Encoding umfasst zwei Hauptschritte: Das Abrufen der Frameinformationen an den Encoder und die Übermittlung der Informationen an die Renderinganwendung. Diese Schritte werden in den folgenden Absätzen beschrieben.
Interlaced Video und der Encoder
Der erste Schritt bei der Codierung von Video mit beibehaltener Interlacing besteht darin, den Encoder für die Codierung von Interlaced-Feldern zu konfigurieren. Legen Sie hierzu die MFPKEY_INTERLACEDCODINGENABLED-Eigenschaft auf TRUE fest. Dadurch wird der Encoder auf den Empfang von Beispielen mit Interlaces vorbereitet. Jedes Eingabebeispiel muss beide Felder enthalten.
Für jedes Beispiel, das Sie mit dem Encoder nach der Aktivierung der Interlaced Encoding verarbeiten, sollte eine Dateneinheitserweiterung angefügt sein. Es wird angenommen, dass Beispiele ohne die erwartete Dateneinheitserweiterung progressiv sind. Die GUID, die die Erweiterung identifiziert, ist D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC. Die von den Objekten des Windows Media Format SDK übergebenen Werte werden in der folgenden Tabelle definiert.
Wert | BESCHREIBUNG |
---|---|
0x00000020 | Gibt an, dass das Beispiel zuerst mit dem unteren Feld codiert wird. Dieser Wert ist nur dann sinnvoll, wenn er mit dem Wert für die Verschachtelung kombiniert wird. |
0x00000040 | Gibt an, dass das Beispiel zuerst mit dem oberen Feld codiert wird. Dieser Wert ist nur dann sinnvoll, wenn er mit dem Wert für die Verschachtelung kombiniert wird. |
0x00000080 | Gibt an, dass das Beispiel interlaced ist. Dies ist der einzige Wert, der für die Codec-DMOs von Bedeutung ist. |
Einer der ersten beiden Werte wird immer mit 0x80 kombiniert, die ein bitweises OR verwenden, bevor er für das Beispiel festgelegt wird. Der Encoder überprüft jedoch nur auf 0x80 und ignoriert den Rest der Erweiterung. Wenn die Erweiterung das Beispiel als Interlaced identifiziert, behält der Encoder die Beispiel-Interlacing im komprimierten Datenstrom bei und bettet ein Hinweisflag in den Stream ein, sodass der Decoder interlaced Frames identifizieren kann. Jedes Interlaced Sample ist markiert, sodass Quellinhalte, die eine Mischung aus progressiven und interlaced sind, zusammen in einen Stream codiert werden können.
Das Windows Media Format SDK Writer-Objekt enthält die Inhaltstypdateneinheitenerweiterungen in den Beispielen, die in den Datenabschnitt des ASF-Containers zur Verwendung zum Zeitpunkt des Renderings geschrieben werden.
Lesen und Rendern von Interlaced Video
Der Decoder identifiziert interlaced Samples basierend auf dem Flag, das vom Encoder im Stream festgelegt wurde. Standardmäßig deinterlaciert der Decoder die Beispiele und liefert progressive Ausgaben. Die Playeranwendung kann den Decoder für die Verarbeitung von Ausgaben mit interlacing konfigurieren, indem die eigenschaft MFPKEY_DECODER_DEINTERLACING festgelegt wird.
Die Schwierigkeit bei der Wiedergabe von interlaced Video tritt auf, nachdem der Decoder die Beispiele übermittelt hat. Der Renderer (Video Karte oder Chip in einem Gerät) kann den Videoinhalt nicht ordnungsgemäß anzeigen, ohne zu wissen, welches Feld welches ist. In Anwendungen, die das Windows Media Format SDK verwenden, wird die Inhaltstypdateneinheitserweiterung aus den nicht komprimierten Beispielen abgerufen und kann an das Gerät übergeben werden.
Bei direkter Verwendung der Codecobjekte erfolgt keine dieser Datenübertragungen automatisch. Sie müssen die Unterstützung der Dateneinheitserweiterung implementieren, sowohl in Ihren Pufferobjekten als auch in dem Container, den Sie für Ihre codierten Inhalte verwenden. Die meisten gängigen Typen von Mediencontainern (wie AVI) unterstützen keine Metadaten auf Beispielebene. Sie können Ihr eigenes System implementieren, um die Daten in der Datei zu speichern und sie einzelnen Beispielen zuzuordnen, aber nur ein angepasster Leser kann sie abrufen.
Hinweis
Wenn Sie die MFPKEY_INTERLACEDCODINGENABLED-Eigenschaft auf TRUE festlegen und dann keine Beispiele mit der angefügten Inhaltstypdateneinheitserweiterung senden, kann dies zum Absturz des Encoders führen. Legen Sie den Encoder nur für die Interlaced-Codierung fest, wenn Sie Beispiele mit Interlaces liefern möchten.
Zugehörige Themen