Поврежденный декодированный поток live555 H.264 с NVDEC

Изменить: я пропустил некоторые важные части; исходные данные потока H.264 были получены из библиотеки live555. Я получил каждый кадр, добавил префикс NAL и поместил их в один файл.

Недавно я пытался декодировать видеопоток H.264 (основной профиль) с помощью NVDEC(API декодера CUVID) в C++. но, в конце концов, я получил проблемное видео в формате NV12, как показано ниже:

Неверное изображение результата: https://imgur.com/EVCIOmQ

Исходный файл H.264 raw содержит следующую информацию:

Основной профиль H.264, 1920x1080 30 кадр / с, GOP 30, цветность 4:2:0

и выходной файл NV12 raw имеет следующую информацию:

NV12 2048 x1080, поскольку hPitch было 2048

и оригинальный файл raw также имеет следующую структуру:

[NAL Prefix(00 00 00 01) + SPS Unit]
~ [NAL Prefix + PPS Unit]
~ [NAL Prefix + IDR Picture Unit]
~ [NAL Prefix + non-IDR Picture Unit]
~ ...
~ [NAL Prefix + non-IDR Picture Unit]

~ [NAL Prefix + SPS Unit]
~ [NAL Prefix + PPS Unit]
~ [NAL Prefix + IDR Picture Unit]
~ [NAL Prefix + non-IDR Picture Unit]
~ ...

Я просто следовал документации к руководству по API NVDEC Decoder и непрерывно сохранял каждое декодированное изображение из буфера в файл.

я использовал CUvideoparser сначала проанализировать видеопоток, и как обратный вызов (pfnDecodePicture), я использовал CUvideodecoder а также cuvidDecodePicture декодировать с разобранной структурой, и, наконец, я скопировал буфер в другой обратный вызов (названный pfnDisplayPicture).

Кажется, все работает, и исходное видео h.264 можно было воспроизводить в VLC без какой-либо постобработки, но я получил неправильное изображение… Что мне не хватает? благодарю вас.

0 ответов

Другие вопросы по тегам