Was passiert, wenn ein komprimiertes Video wiedergegeben wird?

Ich habe mich über Videokomprimierung informiert. Ich verstehe, dass die Größe von „rohen“ Mediendateien für die praktische Verwendung zu groß ist, sodass sie komprimiert werden müssen, aber ich frage mich, was passiert, wenn das Video wiedergegeben wird.

Ich meine, wird das gesamte Video dekodiert (dekomprimiert) und irgendwo im Speicher gespeichert (dies scheint nicht möglich) oder werden die einzelnen Frames einzeln dekodiert und dann vergessen, sodass Sie, wenn Sie einen Teil des Videos wiedergeben möchten, Sie müssen Sie es erneut entschlüsseln?

Es ist wahrscheinlich eine sehr noob-Frage, und das liegt daran, dass ich einer bin, also würde ich mich über Informationen freuen.

Ja, der Player dekodiert Frames nur nach Bedarf. Der Puffer des Decoders speichert alle Frames, die für die aktuelle Warteschlange von wiedergegebenen Frames benötigt werden. Wenn Sie einen Teil wiedergeben, den Sie vor einiger Zeit abgespielt haben, wurde er neu dekodiert. Spieler können jedoch einen Cache unterhalten, sodass ein Teil, der sehr kurz nach dem letzten Spiel wiedergegeben wird, immer noch in diesem Cache sein kann.

Antworten (2)

In den meisten gebräuchlichen Komprimierungsschemata gibt es keine 1::1-Entsprechung zwischen „Video“-Frames und „Datei“- (oder Stream-) Frames**. Jeder bestimmte Videorahmen kann den Inhalt mehrerer Dateirahmen erfordern, um ein vollständiges sichtbares Bild zu werden. Ein Player liest und puffert also so viele Dateibilder wie nötig, um das betreffende Videobild zu rekonstruieren. Der Player kann viel mehr puffern, muss es aber nicht.

Wenn beispielsweise ein Videobild als P-Bild endet, wenn es in der Datei codiert wird, muss der Player zurückblicken, um das vorherige I-Bild zu finden, dieses zu decodieren und dann die in den dazwischenliegenden P-Bildern codierten Unterschiede anwenden, um das Ganze zu erhalten Ergebnis.

** BEARBEITEN: Natürlich gibt es für jedes Videobild ein Dateibild, aber der Punkt ist, dass Sie normalerweise kein Bild aus der Datei lesen und ein vollständiges Videobild erhalten können: Das gilt nur für I-Frames.

Die Idee ist, die Daten streamen und auf einem dummen Gerät (z. B. einem "DVD-Player") abspielen zu können. Das dumme Gerät verwendet im Allgemeinen so wenig Hardware wie möglich, sodass Sie mit Sicherheit nicht genügend Speicher haben, um den gesamten Film zu dekomprimieren und ihn dann abzuspielen. Außerdem würde es ewig dauern, um loszulegen. Das Streaming- Konzept bedeutet, dass die Daten so wiedergegeben werden sollen, wie sie eingehen.

Mein Verständnis von H.264 ist, dass Sie einen Frame namens I-Frame haben, den Sie selbst dekomprimieren können. Dies ist im Wesentlichen ein JPEG-Bild in Ihrer Filmdatei.

Die folgenden Frames werden P-Frames sein, die den vorherigen Frame verwenden, um den neuen Frame zu erzeugen. Mehr oder weniger, wenn sich nur eine Figur auf Ihrem Bildschirm bewegt, müssen Sie nur die Figur dort löschen, wo sie war, und sie dort rendern, wo sie jetzt ist. Der Rest des Bildschirms kann unverändert bleiben. In diesem Fall können Sie die Bilddaten dieses einen Frames stark komprimieren (dh ein I-Frame kann in einem 4K-Film 250 KB groß sein, während ein P-Frame nur 2 KB groß sein kann).

Außerdem unterstützt das H.264-Komprimierungsschema B-Frames (bidirektional). Das ist etwas komplizierter. Das bedeutet, dass ein Frame erst dekomprimiert werden kann, nachdem ein zukünftiger Frame dekomprimiert wurde. Dies bedeutet, dass das Gerät, das Frames dekomprimiert, in der Lage sein muss, mehr dekomprimierte Frames als nur den letzten I-Frame und den letzten P-Frame zwischenzuspeichern (und soweit ich weiß, können P-Frames auf ältere P-Frames verweisen als der gerade vorher ).

Jeder Decoder wird Grenzen haben, was er tun kann. Zum Beispiel verwende ich Jetsons, um ein eingebettetes System zu erstellen, und sie unterstützen nur in 4:2:0 komprimiertes Video (2 Chroma-Bytes für jeweils 4 Pixel). Die Anzahl der Puffer, die ein Decoder hat, und ob B-Frames unterstützt werden, sind weitere Funktionen, die je nach Decoder funktionieren können oder nicht.