在Windows上使用的ffmpeg只有DLL的?(Using ffMPEG on Windows

2019-07-03 15:37发布

我真正想要的是一个视频的帧存储到一个字符数组 ,使用的ffmpeg。
约束是只使用MSVC。 不允许使用的Windows建筑物的调整由于可维护性的问题。

因此,使用考虑共享构建来完成任务。 它由唯一的DLL的。 没有lib文件,所以我试图加载DLL的使用的一个HINSTANCE hInstLibrary = LoadLibrary("avcodec-54.dll"); 和它的作品。 但是,我找不到这个DLL的任何地方出版的接口。 谁能帮助这个? 我怎么知道我可以调用的DLL的功能和参数有什么我可以通过它,这样我可以得到的视频帧?

Answer 1:

使用的ffmpeg的公共接口从

ffmpegdir/include/libavcodec/
ffmpegdir/include/libavformat/
etc.

例如,要打开一个文件进行读取,从ffmpegdir使用avformat_open_input /包含/了libavformat / avformat.h

AVFormatContext * ctx= NULL;
int err = avformat_open_input(&ctx, file_name, NULL, NULL);

你可以得到最新的ffmpeg建立从http://ffmpeg.zeranoe.com/builds/

公共的头文件可以在开发中找到构建(http://ffmpeg.zeranoe.com/builds/win32/dev/)。

UPD:这是一个工作示例(无需额外的静态链接)

#include "stdafx.h"
#include <windows.h>
#include <libavformat/avformat.h>

typedef int (__cdecl *__avformat_open_input)(AVFormatContext **, const char *, AVInputFormat *, AVDictionary **);
typedef void (__cdecl *__av_register_all)(void);

int _tmain(int argc, _TCHAR* argv[])
{
    const char * ffp = "f:\\Projects\\Temp\\testFFMPEG\\Debug\\avformat-54.dll";
    HINSTANCE hinstLib = LoadLibraryA(ffp);
    __avformat_open_input __avformat_open_input_proc  = (__avformat_open_input)GetProcAddress(hinstLib, "avformat_open_input");

    __av_register_all __av_register_all_proc = (__av_register_all)GetProcAddress(hinstLib, "av_register_all");
    __av_register_all_proc();

    ::AVFormatContext * ctx = NULL;
    int err = __avformat_open_input_proc(&ctx, "g:\\Media\\The Sneezing Baby Panda.flv", NULL, NULL);
    return 0;
  }


文章来源: Using ffMPEG on Windows with only the DLL's?