В настоящее время я ищу доступ к libavutil, libavformat и libavcodec (все части FFMpeg) из .NET.
В настоящее время я получаю библиотеки из автоматизированных сборок общего пакета FFMpeg , выполняемых каждую ночь для 32-битной Windows.
Я также использую код из ffmpeg-sharp проекта . В этом проекте я удалил несколько классов, которые не компилировались (это классы-обертки, а не объявления P / Invoke).
Код компилируется нормально, но я сталкиваюсь с несколькими проблемами.
Во-первых, похоже, что сборка av * .dll использует соглашение о вызовах cdecl , поскольку я получал номер PInvokeStackImbalanceException
при попытке вызвать av_open_input_file
, Это было достаточно легко изменить, чтобы заставить его работать правильно. Структура AVFormatContext
заполнена.
После этого я хочу позвонить av_find_stream_info
, чтобы получить информацию о потоках в файле. Однако при вызове этого с AVFormatContext
, полученным из вызова на av_open_input_file
, выдается AccessViolationException
, указывающее, что я пытаюсь читать или писать из защищенной памяти.
Кто-нибудь использовал P / Invoke для доступа к библиотекам dll libavutil, libavformat и libavcodec через P / Invoke и заставил его работать?
Я должен отметить, что работа с версией FFMpeg для командной строки, хотя и не является жизнеспособным решением, в этом случае доступ должен осуществляться через библиотеки. Причина этого в том, что мне придется слишком сильно разбивать диск, чтобы делать то, что мне нужно (я должен делать покадровый анализ некоторых видео очень высокой четкости), и я хочу избежать диска как можно больше.