Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.8k views
in Technique[技术] by (71.8m points)

windows - Use FFmpeg in Visual Studio

I'm trying to use FFmpeg in a C++ project in Visual Studio 2010. I want to include the libraries as statically linked files. Simple programs like libavcodec/api-example.c compile without error and no linker error appears in the error view when starting them. However, a message box shows up after starting the application, saying that avutil-51.dll is missing. Do you have any hints on how to fix that?

I used the latest dev build from http://ffmpeg.zeranoe.com/builds/. Then I specified include as additional include directory, avcodec.lib;avfilter.lib;avformat.lib;avutil.lib as additional dependencies and lib as additional library directory.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

With FFmpeg you can either:

  1. use pre-built .lib/.dll files and your binary produced with Visual Studio will be dependent on av*.dll files
  2. compile FFmpeg from source code into static libraries using non-Microsoft compiler, and then link to your Visual Studio project (mind the LGPL/GPL license in this case)

You built your project as per item 1 above. You have to use and redistribute the av*.dll dependent files with your binary to have it working.

"Static" on Zeranoe means that libraries are statically linked into binaries like ffmpeg.exe. Do not confuse this with static .lib libraries that link into your binary. Zeranoe does not provide such.

On Zeranoe you will find archives like this:

  • "Shared" ffmpeg-20120726-git-236ecc3-win32-shared.7z:
  • bin/avcodec-54.dll
  • bin/avutil-51.dll
  • etc
  • "Dev" ffmpeg-20120726-git-236ecc3-win32-dev.7z:
  • lib/avcodec.lib
  • lib/avutil.lib

"Shared" archive has FFmpeg built with dynamic link to DLL libraries. "Dev" archive has lib files which you can use in your project to link to them as well in a way that ffmpeg.exe does in shared archive.

So, your Visual Studio project can be as simple as this (browse full source here):

extern "C" 
{
        // NOTE: Additional directory ..zeranoe.comdevinclude gets to the files
        #include "libavcodecavcodec.h"
}

// NOTE: Additional directory ..zeranoe.comdevlib gets to the files
#pragma comment(lib, "avcodec.lib")

// NOTE: Be sure to copy DLL files from ..zeranoe.comsharedin 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.
"));
        return 0;
}

You will extract "Dev" archive into dev subdirectory of Visual Studio project and you will add devinclude on the additional include path. This will be sufficient to build the binary, and it will be dependent on av*.dll:

enter image description here

This is when you extract the "Shared" archive, and copy DLLs from its bin to the directory of your binary. And your app will work from there:

C:FFmpegAppRelease>FFmpegApp.exe
Trying avcodec_register_all... Done.

20 Jan 2016 UPDATE: The project in repository is upgraded to Visual Studio 2013 (older VS 2010 code) and checked against current Zeranoe builds. The sample and instructions remain in good standing.

Note that Win32 builds in Visual Studio assume that you use 32-bit files from Zeranoe. To build 64-bit version, download respective files and set up Visual C++ project respectively, to build x64 (or, the best, download both, set up both configurations and configure include/lib paths respectively). Failure to match bitness would result in error, mentioned in the comments below.

20 Jul 2021 UPDATE: (pulled from comments below) Zeranoe builds are no longer available. A good and officially endorsed alternative is Windows builds by BtbN. You will need a (...)-win64-gpl-shared.zip or (...)-win64-lgpl-shared.zip file for this tutorial.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...