Подтвердить что ты не робот

Ошибки при декодировании кадров H.264 с использованием ffmpeg

Я получаю следующие ошибки при декодировании кадров H.264, полученных с удаленного конца видеовызова SIP на основе H.264. Оцените любую помощь в понимании ошибок.

non-existing PPS 0 referenced
decode_slice_header error
non-existing PPS 0 referenced
decode_slice_header error
no frame!

non-existing PPS 0 referenced
decode_slice_header error
non-existing PPS 0 referenced
decode_slice_header error
no frame!
4b9b3361

Ответ 1

Это означает, что ffmpeg еще не видел ключевой кадр, который содержит информацию SPS и PPS. SPS и PPS имеют решающее значение для декодирования входящего кадра/среза. Ключевые кадры отправляются периодически (то есть каждые 5-10 секунд или более); так что если окажется, что вы присоединились к потоку до появления ключевого кадра; вы увидите это предупреждение для каждого кадра, пока не появится ключевой кадр.

Как только ключевой кадр появляется из провода, ffmpeg будет иметь достаточную информацию для декодирования этого кадра (и любых последующих кадров до следующего ключевого кадра), чтобы эти предупреждения исчезли.

Ответ 2

Для декодирования кадра или фрагмента декодируется sliceHeader, который относится к PPS или "Набор параметров изображения". Он содержит информацию о специфике рамки, такой как ширина, высота и т.д.

Я думаю, ваши данные поступают через потоковый входной канал, и в этом случае SPS и PPS были бы отправлены ранее в потоке.

Возможно, вам придется объединить то же самое с вашим потоком.

Ответ 3

вам нужно добавить фреймы sps и pps. ffmpeg нуждается в этой информации для декодирования. Эти значения можно найти в SDP файле.

В SDP файле вы должны посмотреть NAL-единицы, вы можете увидеть что-то вроде этого z0IAHukCwS1xIADbugAzf5GdyGQl, aM4xUg

эти значения на основе64 кодируются, вы должны преобразовать его в шестнадцатеричный формат. Я использую wirehark, и wirehark преобразует эти значения для вас. После этого вы получите значения sps и pps.

Теперь вам нужно добавить эти данные Nal перед фреймом данных.

00 00 00 01 sps 00 00 00 01 pps 00 00 00 01 данные

для h264 этот формат, который я использовал для декодирования.