Используйте FFmpeg в Visual Studio
Я пытаюсь использовать FFmpeg в проекте C++ в Visual Studio 2010. Я хочу включить библиотеки в виде статически связанных файлов. Простые программы, такие как libavcodec / api-example.c, компилируются без ошибок, и при запуске их в представлении ошибок не отображается ошибка компоновщика. Однако после запуска приложения появляется окно сообщения о том, что avutil-51.dll отсутствует. Есть ли у вас какие-либо советы, как это исправить?
Я использовал последнюю версию разработки с http://ffmpeg.zeranoe.com/builds/. Затем в качестве дополнительных зависимостей я указал include-каталог avcodec.lib;avfilter.lib;avformat.lib;avutil.lib в качестве дополнительных зависимостей и lib в качестве дополнительного каталога библиотеки.
1 ответ
С FFmpeg вы можете:
- используйте предварительно созданные файлы.lib/.dll, и ваш двоичный файл, созданный с помощью Visual Studio, будет зависеть от файлов av*.dll
- скомпилируйте FFmpeg из исходного кода в статические библиотеки, используя компилятор, не принадлежащий Microsoft, а затем создайте ссылку на ваш проект Visual Studio (в этом случае обратите внимание на лицензию LGPL/GPL)
Вы создали свой проект согласно пункту 1 выше. Вы должны использовать и распространять av*.dll-зависимые файлы вместе с вашим двоичным файлом, чтобы он работал.
"Статический" на Zeranoe означает, что библиотеки статически связаны в двоичные файлы, такие как ffmpeg.exe
, Не путайте это со статическим .lib
библиотеки, которые ссылаются на ваш двоичный файл. Зераное не дает такого.
На Zeranoe вы найдете такие архивы:
- "Общий" ffmpeg-20120726-git-236ecc3-win32-shared.7z:
bin/avcodec-54.dll
bin/avutil-51.dll
- так далее
- "Dev" ffmpeg-20120726-git-236ecc3-win32-dev.7z:
lib/avcodec.lib
lib/avutil.lib
"Общий" архив имеет встроенный FFmpeg с динамической связью с библиотеками DLL. В архиве "Dev" есть файлы lib, которые вы можете использовать в своем проекте для ссылки на них так же, как это делает ffmpeg.exe в общем архиве.
Итак, ваш проект Visual Studio может быть таким простым ( просмотрите полный исходный код здесь):
extern "C"
{
// NOTE: Additional directory ..\zeranoe.com\dev\include gets to the files
#include "libavcodec\avcodec.h"
}
// NOTE: Additional directory ..\zeranoe.com\dev\lib gets to the files
#pragma comment(lib, "avcodec.lib")
// NOTE: Be sure to copy DLL files from ..\zeranoe.com\shared\bin to the directory of
// the FFmpegApp.exe binary
int _tmain(int argc, _TCHAR* argv[])
{
_tprintf(_T("Trying avcodec_register_all... "));
avcodec_register_all();
_tprintf(_T("Done.\n"));
return 0;
}
Вы распакуете архив "Dev" в dev
подкаталог проекта Visual Studio, и вы добавите dev\include
на дополнительный путь включения. Этого будет достаточно для создания двоичного файла, и это будет зависеть от av*.dll
:
Это когда вы извлекаете "Общий" архив и копируете DLL из его bin
в каталог вашего двоичного файла. И ваше приложение будет работать оттуда:
C:\FFmpegApp\Release>FFmpegApp.exe
Trying avcodec_register_all... Done.
20 января 2016 г. ОБНОВЛЕНИЕ: проект в хранилище обновлен до Visual Studio 2013 (более старый код VS 2010) и проверен на соответствие текущим сборкам Zeranoe. Образец и инструкции остаются в хорошем состоянии.
Обратите внимание, что Win32
сборки в Visual Studio предполагают, что вы используете 32-битные файлы из Zeranoe. Чтобы создать 64-битную версию, загрузите соответствующие файлы и настройте проект Visual C++ соответственно, чтобы собрать x64
(или, что лучше, загрузите обе, настройте обе конфигурации и настройте пути include/lib соответственно). Несоответствие битности может привести к ошибке, упомянутой в комментариях ниже.