Итак, я знаю, что это довольно большая проблема, но я хочу написать базовый проигрыватель фильмов/конвертер в С#, используя библиотеку FFmpeg. Однако первым препятствием, которое мне нужно преодолеть, является обертывание библиотеки FFmpeg в С#. Я загрузил ffmpeg, но не смог скомпилировать его в Windows, поэтому я загрузил предварительно скомпилированную версию для меня. Отлично. Затем я начал искать оболочки С#.
Я просмотрел и нашел несколько оберток, таких как SharpFFmpeg (http://sourceforge.net/projects/sharpffmpeg/) и ffmpeg-sharp (http://code.google.com/p/ffmpeg-sharp/). Прежде всего, я хотел использовать ffmpeg-sharp, поскольку его LGPL и SharpFFmpeg - это GPL. Однако в нем было довольно много ошибок компиляции. Оказывается, это было написано для монокомпилятора, я попытался скомпилировать его с моно, но не мог понять, как это сделать. Затем я начал вручную исправлять ошибки компилятора, но натолкнулся на несколько страшных и подумал, что лучше оставить их в покое. Поэтому я отказался от ffmpeg-sharp.
Затем я посмотрел на SharpFFmpeg, и похоже, что я хочу, все функции P/Invoked для меня. Однако его GPL? Оба файла AVCodec.cs и AVFormat.cs выглядят как порты avcodec.c и avformat.c, которые, как я полагаю, я мог бы портировать? Тогда вам не придется беспокоиться о лицензировании.
Но я хочу получить это право, прежде чем идти вперед и начинать кодирование. Должен ли я:
- Напишите мою собственную библиотеку С++ для взаимодействия с ffmpeg, затем попросите мою программу С# поговорить с библиотекой С++, чтобы воспроизводить/конвертировать видео и т.д.
ИЛИ
- Порт avcodec.h и avformat.h(это все, что мне нужно?) до С#, используя много DllImports и полностью записывая его на С#?
Прежде всего, подумайте, что я не очень хорош на С++, поскольку я редко использую его, но я знаю достаточно, чтобы обойти. Причина, по которой я думаю, что № 1 может быть лучшим вариантом, заключается в том, что большинство учебников FFmpeg находятся на С++, и у меня также будет больше контроля над управлением памятью, чем если бы я сделал это в С#.
Как вы думаете? Также у вас возникнут какие-либо полезные ссылки (возможно, учебник) для использования FFmpeg?