2009-02-23 12 views
5

Ich möchte verstehen, wie Video-und Audio-Decodierung funktioniert, vor allem die Synchronisierung Timing (wie 30fps Video zu bekommen, wie man das mit Audio, etc.). Ich will nicht ALLE Details wissen, nur die Essenz davon. Ich möchte in der Lage sein, eine hochgradige Vereinfachung eines tatsächlichen Video/Audio-Decoders zu schreiben.mpeg 2 decoding

Könnten Sie mir Hinweise geben? Ein tatsächlicher C/C++ - Quellcode eines MPEG2-Video-/Audio-Decoders wäre der schnellste Weg, diese Dinge zu verstehen, die ich denke.

Antwort

6

Quellcode von einem Codec lesen, der funktioniert, scheint der richtige Weg zu sein. Ich schlage vor, die folgenden:

http://www.mpeg.org/MPEG/video/mssg-free-mpeg-software.html

Da es auf der mpeg.org Website erwähnt ist, würde ich sagen, Sie finden, was Sie hier benötigen.

In der Vergangenheit hatte ich einige Zeit, um MPEG-Videos zu entschlüsseln (kein Audio), und die Prinzipien sind ziemlich einfach. Es sind einige reine Bilder enthalten, einige Zwischenbilder, die relativ zu den nächsten Hauptbildern beschrieben werden, und der Rest wird unter Verwendung der nächsten Haupt-/Zwischenbilder beschrieben.

Ein Zeitschlitz, ein Bild. Aber die letzten Codecs sind viel komplizierter, denke ich!

EDIT: Synchronisation

Ich bin kein Experte Audio und Video in Synchronisierung, aber das Problem scheint mit der Verwendung einer Sync-Schicht behandelt werden (siehe there für eine Definition).

+0

Ja, ich kenne diese Grundprinzipien der Videodekodierung, intra pred dct usw. Aber es ist die Synchronisation, die mich interessiert. Hilfreiche Antwort, danke. –

3

für Audio/Video-Synchronisation, im Grunde sollte jeder Video- und Audiorahmen zeitgestempelt werden. Der Zeitstempel wird typischerweise als PTS (Presentation Time Stamp) bezeichnet. Sobald ein Video/Audio Decoder-Decoder ist, sollte der Audio/Video-Renderer den Frame zur richtigen Zeit so einstellen, dass Audio/Video synchronisiert wird.

Ich denke, dass Sie auf Kapitel "Timing Model" von MPEG2 Tutorial für Details verweisen können.

+1

nur um etwas hinzuzufügen: Es ist eine gute Idee, die Zeit aus dem Sound abzuleiten (z. B. Samples, die seit dem Anfang abgespielt wurden), da die Soundausgabe selten genau auf der spezifizierten Frequenz läuft. Die Verwendung des Sounds stellt sicher, dass Audio und Video bis zum Ende des Films synchron bleiben. –

1

@ Patric und Nils

So sagen Sie, dass es Zeitstempel sind, hein ... Diese sind für den Video-Teil nur, denke ich. Für Audio, denke ich, gibt es genug Informationen in der Kopfzeile (wie "Samples pro Sekunde"). Wie oft werden diese Zeitstempel benötigt? Ich stelle mir vor, dass die Verschachtelung von Audio- und Videopaketen dafür sorgt, dass Videodaten den Audiodaten immer voraus sind oder so etwas?

EDIT: Gefunden, was ich brauchte: http://www.dranger.com/ffmpeg/tutorial01.html

1

Helltone,

Zeitstempel für Audiodaten sind nach wie vor notwendig, da die Audio- und Video-Frame nicht an der gleichen Stelle ausgerichtet werden können. Zum Beispiel:

V: 1000 1040 1080 1120 ... A: 990 1013 1036 (verloren) 1082

Unter Umständen müssen Sie den Versatz zwischen dem ersten Video/Audio-Rahmen kompensieren. Wenn es möglich ist, dass Paketverluste auftreten (während Video-Streaming), benötigen Sie außerdem die Zeitstempel von beiden Video-/Audio-Dateien, um eine genaue Synchronisation zu gewährleisten.