Как мне динамически связать FFmpeg в проекте C# для использования с FFMpegCore?C#

Место общения программистов C#
Ответить
Anonymous
 Как мне динамически связать FFmpeg в проекте C# для использования с FFMpegCore?

Сообщение Anonymous »

На данный момент в моем проекте работает FFMpegCore с файлом ffmpeg.exe, помещенным в каталог проекта. Это работает, но для соответствия лицензии LGPL FFmpeg требует динамического связывания:

Используйте динамическое связывание (в Windows это означает связывание с dll) для связывания с библиотеками FFmpeg.
Хотя я понимаю базовую концепцию динамического и статического связывания, моя проблема, скорее всего, заключается в неправильном понимании того, как работают .dll и как они применяются к C# и .NET.

Правильно ли это? возможно ли скомпилировать ffmpeg в одну .dll, к которой может получить доступ кросс-платформенный FFMpegCore? Насколько я могу судить по исходному коду, FFMpegCore ищет файл ffmpeg или ffmpeg.exe в своем пути конфигурации.
Можно ли использовать .NET динамически связывать FFmpeg и предоставлять его библиотекам для использования, или это полное недоразумение, и понадобится ли мне тогда библиотека-оболочка с другими возможностями?
Я попытался найти ответ в соответствующем разделе документации, но я не нашел ни одной для этого конкретного использования какой-либо библиотеки. Я подозреваю, что моя проблема может заключаться в фундаментальном непонимании того, как эти инструменты работают и работают вместе.
Моим идеальным результатом было бы использование FFMpegCore с FFmpeg.dll, который работает кросс-платформенно вместо .exe.
Редактировать 1: ответ и изображение @taratect направили меня на путь, который немного прояснил информацию о exe и dll. .Net компилирует исходный код в не зависящий от платформы промежуточный язык в форме .dll или .exe (полностью отличающийся от вариантов этих файлов на C++), который выполняется средой Common Language Runtime с использованием Компилятор Just In Time для преобразования этого промежуточного языка в машинный код, который можно запускать на конкретной платформе, на которой установлен .Net. C++(FFmpeg) компилируется непосредственно в машинный код конкретной платформы (как показано на рисунке), что сбивает с толку в форме .dll или .exe (в Windows). .Net действительно может загружать и запускать машинный код, не управляемый средой Common Language Runtime, поскольку в конце концов все запускается как машинный код, однако памятью и другими сложностями затем должен управлять я, что, похоже, и делает FFMpegCore при упаковке исполняемого файла. Я все еще могу быть смущен/неправ в некоторых из этих вопросов, неуправляемый код пока находится за пределами моего понимания.
Это более или менее подтверждает, что FFMpegCore, вероятно, не сможет использовать FFmpeg так, как я надеялся, и лучше. Обходной путь может заключаться в том, чтобы пользователь просто предоставил исходный код FFmpeg или реализовал загрузчик как часть установки, чтобы мне вообще не приходилось его распространять.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ffmpegcore
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»