web-dev-qa-db-fra.com

Utiliser FFmpeg dans Visual Studio

J'essaie d'utiliser FFmpeg dans un projet C++ dans Visual Studio 2010. Je veux inclure les bibliothèques en tant que fichiers liés statiquement. Des programmes simples comme libavcodec/api-example.c compilent sans erreur et aucune erreur de l'éditeur de liens n'apparaît dans la vue d'erreur lors de leur démarrage. Cependant, une boîte de message s'affiche après le démarrage de l'application, indiquant que avutil-51.dll est manquant. Avez-vous des conseils sur la façon de résoudre ce problème?

J'ai utilisé la dernière version de développement de http://ffmpeg.zeranoe.com/builds/ . Ensuite, j'ai spécifié include comme répertoire d'inclusion supplémentaire, avcodec.lib; avfilter.lib; avformat.lib; avutil.lib comme dépendances supplémentaires et lib comme répertoire de bibliothèque supplémentaire.

19
box

Avec FFmpeg, vous pouvez soit:

  1. utilisez des fichiers .lib/.dll prédéfinis et votre binaire produit avec Visual Studio dépendra des fichiers av * .dll
  2. compiler FFmpeg à partir du code source dans des bibliothèques statiques à l'aide d'un compilateur non Microsoft, puis lier à votre projet Visual Studio (faites attention à la licence LGPL/GPL dans ce cas)

Vous avez construit votre projet conformément au point 1 ci-dessus. Vous devez utiliser et redistribuer les fichiers dépendants av * .dll avec votre binaire pour le faire fonctionner.

"Statique" sur Zeranoe signifie que les bibliothèques sont liées statiquement en binaires comme ffmpeg.exe. Ne confondez pas cela avec les bibliothèques statiques .lib Qui se lient à votre binaire. Zeranoe n'en fournit pas.

Sur Zeranoe vous trouverez des archives comme celle-ci:

  • "Partagé" 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

L'archive "partagée" a FFmpeg construit avec un lien dynamique vers DLL bibliothèques. L'archive "Dev" a des fichiers lib que vous pouvez utiliser dans votre projet pour les lier à eux aussi d'une manière que ffmpeg.exe fait dans les archives partagées.

Ainsi, votre projet Visual Studio peut être aussi simple que cela ( parcourir la source complète ici ):

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;
}

Vous extrairez l'archive "Dev" dans le sous-répertoire dev du projet Visual Studio et vous ajouterez dev\include Sur le chemin d'inclusion supplémentaire. Ce sera suffisant pour construire le binaire, et cela dépendra de av*.dll:

enter image description here

C'est lorsque vous extrayez l'archive "Shared" et copiez les DLL de son bin dans le répertoire de votre binaire. Et votre application fonctionnera à partir de là:

C:\FFmpegApp\Release>FFmpegApp.exe
Trying avcodec_register_all... Done.

MISE À JOUR DU 20 JANVIER 2016 : Le projet dans le référentiel est mis à niveau vers Visual Studio 2013 (ancien code VS 2010) et vérifié par rapport aux versions actuelles de Zeranoe. L'échantillon et les instructions restent en règle.

Notez que les builds Win32 Dans Visual Studio supposent que vous utilisez des fichiers 32 bits de Zeranoe. Pour créer une version 64 bits, téléchargez les fichiers respectifs et configurez le projet Visual C++ respectivement, pour créer x64 (Ou, mieux, téléchargez les deux, installez les deux configurations et configurez les chemins d'accès include/lib respectivement). L'omission de faire correspondre le témoin entraînerait une erreur, mentionnée dans les commentaires ci-dessous.

41
Roman R.