2013-12-19 6 views
8

Ich habe eine Karte, die einen H264-Stream mit einem SPS (Sequenzparametersatz) und einem PPS (Bildparametersatz) erzeugt, in dieser Reihenfolge, direkt vor jedem I-Frame. Ich sehe, dass die meisten H264-Streams ein PPS und SPS am ersten I-Frame enthalten.H264 mit mehreren PPS und SPS

Wird dies empfohlen? Unterstützen Decoder/Muxer typischerweise mehrere PPS und SRS?

Antwort

20

H.264 ist in verschiedenen Stream-Formaten verfügbar. Eine Variante heißt "Anhang B".

(AUD) (SPS) (PPS) (I-Slice) (PPS) (P-Slice) (PPS) (P-Slice) ... (AUD) (SPS) (PPS) (I-Slice).

Normalerweise sehen Sie SPS/PPS vor jedem I-Frame und PPS vor anderen Slices.

Die meisten Decoder/Muxer sind zufrieden mit "Annex B" und der Wiederholung von SPS/PPS.

Die meisten Decoder/Muxer werden nichts Sinnvolles tun, wenn Sie das Format und SPS/PPS Midstream ändern.

Die meisten Decoder/Muxer parsen das erste SPS/PPS als Teil eines Setup-Prozesses und ignorieren nachfolgende SPS.

Einige Decoder/Muxer bevorzugen H.264 ohne (AUD), Startcodes und SPS/PPS. Dann müssen Sie SPS/PPS Out-of-Band als Teil der Einrichtung der Decoder/Muxer füttern.

+2

Das MP4-Format kann mit in-mdat SPS und PPS verwendet werden, aber fast jede Datei, die ich gesehen habe, bringt die SPS und PPS in die Trackbeschreibung unter stsd.avc1.avcC und dann enthält die mdat nur Beispieldaten. Das Ändern von SPS und PPS in der Mitte des Streams ist die einfachste verrückte Sache, die passieren kann. Ich bin mir ziemlich sicher, dass es für einen einzelnen Stream möglich ist, verschiedene Samples zu haben, die auf unterschiedlichen SPS und PPS basieren. Betrachten Sie die Felder slice_header.pic_parameter_set_id und picture_parameter_set.seq_parameter_set_id. Ich vermute, die meisten Decoder unterstützen das ab 2013 nicht. –

16

Ein IDR-Frame oder ein I-Slice kann ohne SPS und PPS nicht decodiert werden. Im Fall eines Containers wie mp4 wird die SPS und PPS von den Videodaten im Dateiheader gespeichert. Bei der Wiedergabe wird der mp4 analysiert, der SPS/PPS wird verwendet, um den AVC-Decoder einmal zu konfigurieren, dann kann das Video ab jedem IDR/I-Slice abgespielt werden.

Es gibt ein zweites Szenario, Live-Video. Bei Live-Videos gibt es keinen Dateiheader, da keine Datei vorhanden ist. Wenn also ein Fernsehgerät einen Kanal anwählt, wo bekommt es dann die SPS/PPS? Weil Fernsehen gesendet wird, was bedeutet, dass das Fernsehen keine Möglichkeit hat, die SPS/PPS anzufordern, wird es in dem Strom wiederholt.

Wenn Sie mit dem Kodieren beginnen, weiß Ihr Encoder nicht, was Sie mit dem Video machen wollen. Nun, wenn die zusätzlichen SPS/PPS in einem mp4 erscheinen, ignoriert der Decoder sie einfach, aber wenn Sie zu einem TV streamen, würde der Stream nie ohne sie spielen. Also die meisten der Standard zu wiederholen SPS/PPS für alle Fälle.

1

Ich weiß über Matroska (MKV) -Spezifikation, also hier SPS und PPS sind nur einmal als Codec private Daten Abschnitt gespeichert. Sie wiederholen sich also nicht mit jedem i-Frame oder IDR-Frame.

Wenn Ihr h264-Stream in jedem i-Frame/IDR-Frame SPS/PPS hat, dann speichert matroska muxer nur 1 Kopie in privaten Codec-Daten.

Während beim Speichern von Usecase-basierten Containerformaten nur eine Kopie von SPS/PPS empfohlen wird, empfehlen Broadcast- und Streaming-basierte Containerformate, SPS/PPS vor jedem iFrame/IDR-Frame zu senden oder wenn sich Codec-Änderungen im h264-Stream ändern Zeit

Verwandte Themen