Я написал код на C для доступа к ffmpeg и обернул его в класс C ++ / CLI (управляемый .NET). Программа извлекает видеопоток в реальном времени, извлекает кадры и преобразует их в файлы PNG.
К сожалению, изображения, которые сохраняются на диск, всегда черные (открытие их в Notepad ++ показывает, что они полны нулей).
Я использую сборки aformat / codec-55.dll и заголовки разработки и библиотеки для компиляции из ffmpeg-20131120-git-e502783-win64-dev. Весь проект компилируется с использованием Managed C ++ (Cpp / cli) .NET 4.0 для 64-битных систем.
После некоторого исследования проблема, по-видимому, заключается в том, что av_read_frame правильно заполняет значение AVPacket-> size, но данные AVPAcket-> всегда равны нулю. Когда кадр закончен (получил == 1), тогда данные для AVFrame — это просто матрица нулей. 🙁
Вот код:
Пример кода (извините, но он плохо вставлен в SO)
Я думаю, что проблема в строке 34, когда пакет возвращается так:
Пожалуйста, как мне заставить это работать? Что я сделал не так?
Часть декодирования кажется мне подходящей. Я не уверен в кодировке & сохранение в PNG. Почему бы тебе не попробовать просто сбросить (frame->linesize*frame->height)
байты из frame->data
на диск с fwrite и посмотреть на него с Irfanview (например)?
Других решений пока нет …