2013-12-19 2 views
8

У меня есть карта, которая создает поток H264 с SPS (набор параметров последовательности) и PPS (набор параметров изображения) в этом порядке непосредственно перед каждым I-кадром. Я вижу, что большинство потоков H264 содержат PPS и SPS в первом I-кадре.H264 с несколькими PPS и SPS

Рекомендуется ли? Как декодеры/мультиплексоры поддерживают несколько PPS и SRS?

ответ

20

H.264 поставляется в различных форматах потока. Один вариант называется «Приложение B».

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

Обычно вы видите SPS/PPS перед каждым I-кадром и PPS перед другими срезами.

Большинство декодеров/мультиплексоров довольны «Приложением B» и повторением SPS/PPS.

Большинство декодеров/мультиплексоров не будут делать ничего значимого, если вы измените формат и SPS/PPS в середине.

Большинство декодеров/мультиплексоров анализируют первый SPS/PPS как часть процесса установки и игнорируют последующие SPS.

Некоторые декодеры/мультиплексоры предпочитают H.264 без (AUD), стартовых кодов и SPS/PPS. Затем вы должны подать SPS/PPS вне диапазона как часть настройки декодеров/мультиплексоров.

+2

Формат 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 года. –

16

Рамка IDR или I-срез не могут быть декодированы без SPS и PPS. В случае контейнера, такого как mp4, SPS и PPS хранятся вдали от видеоданных в заголовке файла. После воспроизведения анализируется mp4, SPS/PPS используется для конфигурирования декодера AVC один раз, после чего видео можно воспроизводить, начиная с любого IDR/I-среза.

Существует второй сценарий, видео в реальном времени. С живым видео нет заголовка файла, потому что нет файла. Итак, когда телевизор настраивается на канал, где он получает SPS/PPS? Поскольку телевидение транслируется, то есть телевизор не имеет возможности запросить SPS/PPS, он повторяется в потоке.

Итак, когда вы запускаете кодирование видео, ваш кодер не знает, что вы намерены делать с видео. Теперь, если дополнительный SPS/PPS отображается в mp4, декодер просто игнорирует их, но если вы переходите на телевизор, без них поток никогда не будет играть. Таким образом, большинство по умолчанию повторяют SPS/PPS на всякий случай.

1

Я знаю о спецификации matroska (mkv), поэтому здесь SPS и PPS хранятся только один раз в виде разделов частных данных кодека. Поэтому они не повторяются с каждым фреймом i или рамкой IDR.

Если ваш кадр i/frame/IDR в потоке h264 имеет SPS/PPS, то в matcska muxer будет храниться только 1 копия в частных данных кодека.

Таким образом, при сохранении формата контейнера, основанного на использовании usecase, предлагается использовать только одну копию SPS/PPS, но форматы контейнеров на основе широковещательной и потоковой передачи предполагают отправку SPS/PPS перед каждым кадром iFrame/IDR или всякий раз, когда любые изменения кодека изменяются в потоке h264 при этом время

Смежные вопросы