Рамка IDR или I-срез не могут быть декодированы без SPS и PPS. В случае контейнера, такого как mp4, SPS и PPS хранятся вдали от видеоданных в заголовке файла. После воспроизведения анализируется mp4, SPS/PPS используется для конфигурирования декодера AVC один раз, после чего видео можно воспроизводить, начиная с любого IDR/I-среза.
Существует второй сценарий, видео в реальном времени. С живым видео нет заголовка файла, потому что нет файла. Итак, когда телевизор настраивается на канал, где он получает SPS/PPS? Поскольку телевидение транслируется, то есть телевизор не имеет возможности запросить SPS/PPS, он повторяется в потоке.
Итак, когда вы запускаете кодирование видео, ваш кодер не знает, что вы намерены делать с видео. Теперь, если дополнительный SPS/PPS отображается в mp4, декодер просто игнорирует их, но если вы переходите на телевизор, без них поток никогда не будет играть. Таким образом, большинство по умолчанию повторяют SPS/PPS на всякий случай.
Формат MP4 может использоваться с SPS и PPS в-mdat, но почти каждый файл, который я видел, помещает SPS и PPS в описание дорожки под stsd.avc1.avcC, а затем mdat содержит только данные образца. Изменение SPS и PPS в середине потока - самая простая дурацкая вещь, которая может произойти. Я уверен, что в одном потоке возможен выбор различных образцов, основанных на разных SPS и PPS. Рассмотрим поля slice_header.pic_parameter_set_id и picture_parameter_set.seq_parameter_set_id. Я подозреваю, что большинство декодеров не поддерживают это с 2013 года. –