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.
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. –