Поврежденный декодированный поток 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 без какой-либо постобработки, но я получил неправильное изображение… Что мне не хватает? благодарю вас.