Ich habe eine Karte, die einen H264-Stream mit einem SPS (Sequenzparametersatz) und einem PPS (Bildparametersatz) in dieser Reihenfolge direkt vor jedem I-Frame erzeugt. Ich sehe, dass die meisten H264-Ströme eine PPS und SPS am ersten I-Frame enthalten.
Wird das empfohlen? Unterstützen Decoder / Muxer typischerweise mehrere PPS und SRS?
H.264 gibt es in verschiedenen Stream-Formaten. Eine Variante heißt "Anhang B".
(AUD) (SPS) (PPS) (I-Scheibe) (PPS) (P-Scheibe) (PPS) (P-Scheibe) ... (AUD) (SPS) (PPS) (I-Scheibe) .
Normalerweise sehen Sie SPS / PPS vor jedem I-Frame und PPS vor anderen Slices.
Die meisten Decoder / Muxer sind glücklich mit "Annex B" und der Wiederholung von SPS / PPS.
Die meisten Decoder / Muxer machen nichts Sinnvolles, wenn Sie das Format und SPS / PPS Midstream ändern.
Die meisten Decoder / Muxer analysieren das erste SPS / PPS als Teil eines Setup-Prozesses und ignorieren nachfolgende SPS.
Manche 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.
Ein IDR-Frame oder ein I-Slice kann ohne SPS und PPS nicht decodiert werden. Im Fall eines Containers wie mp4 wird das SPS und PPS weg von den Videodaten in dem Dateikopf 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-Schnitt 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 ausgestrahlt wird, was bedeutet, dass das Fernsehen keine Möglichkeit hat, die SPS / PPS anzufordern, wird es im Strom wiederholt.
Wenn Sie also mit dem Codieren 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 SPS / PPS nur für den Fall wiederholen.
Ich weiß über die matroska (mkv) Spezifikation, also werden hier SPS und PPS nur einmal als Codec private Daten Sektion gespeichert. Sie wiederholen sich also nicht mit jedem i-Frame oder IDR-Frame.
Wenn Ihr h264-Stream in jedem i-Frame / IDR-Frame über SPS / PPS verfügt, speichert matroska muxer nur 1 Kopie in privaten Codec-Daten.
Bei der Speicherung von Usecase-basierten Containerformaten wird daher vorgeschlagen, nur eine Kopie von SPS / PPS zu verwenden. Broadcasting- und Streaming-basierte Containerformate empfehlen jedoch, SPS / PPS vor jedem iFrame / IDR-Frame zu senden oder wenn sich Codec-Änderungen im h264-Stream ändern