如何将ffmpeg的dll放置到任意位置?

来源:互联网 发布:java判断是否是空格 编辑:程序博客网 时间:2024/05/20 16:36

现在假设做了一个基于ffmpeg动态库的thumb.dll,那么加载的顺序很重要。


一、简略提提基于ffmpeg库开发的DLL

创建thumb.dll的过程就略过了,网上很多教程。说一下thumb(我的工程名字)的工程注意事项吧。

工程属性->VC++目录配置“包含目录”和“库目录”。

包含目录添加“include”,库目录添加“lib”


这样编译貌似还有问题,要将“清单工具”->“输入和输出”的“嵌入清单”改为“否”


然后下载的dev版本的ffmpeg中include和lib复制到工程目录thumb/thumb下面。


要加_mingw.hinttypes.h。stdint.h看情况,我忘记这个文件是属于ffmpeg库还是pthread引用的。

将shared版本的ffmpeg中dll们复制到thumb/thumb下面


然后回到thumb工程,写了一下截图的代码,具体可以到网上搜索的,这里不提供了。

这里没有在工程里面配置链接器,所以在工程里面要使用#pragma comment(lib,"xx.lib")将相应的lib引用。


最后编译得到thumb.dll


二。写个调用thumb.dll的exe(run_thumb_dll)

添加->新增项目->run_thumb_dll


在_tmain函数下先按顺序加载相关的dll。


1.将libgcc_s_dw2-1.dll加载,因为在网站https://ffmpeg.zeranoe.com/builds/win32/下载的shared版本是用gcc编译的。

2.加载avutil-xx.dll->swresample-xx.dll->avcodec-xx.dll

3.加载avformat-xx.dll

4.加载postproc-xx.dll->swscale-xx.dll->avfilter-xx.dll

5.加载avdevice-xx.dll

6.加载个人的dll文件(thumb.dll)


说明一下:

第2步avcodec会用到avutil和swresample的一些接口,所以avutil和swresample要放前面加载。

第3步avformat在旧版ffmpeg是和avcodec有关联的,所以还是放在avcodec之后加载比较合适。

第4步avfilter会用到swscale的,所以swscale必须在它之前。postproc不一定有用到的,但是网站下载的版本是用到,所以用网站的avfilter开发必须加postproc。

第5步avdevice与avcodec、avfilter都有关系的,所以必须放在最后调用。


因此得到


LoadLibrary(L"xxx/libgcc_s_dw2-1.dll");

LoadLibrary(L"xxx/avutil-xx.dll");

LoadLibrary(L"xxx/swresample-xx.dll");

LoadLibrary(L"xxx/avcodec-xx.dll");

LoadLibrary(L"xxx/avformat-xx.dll");

LoadLibrary(L"xxx/postproc-xx.dll");

LoadLibrary(L"xxx/swscale-xx.dll");

LoadLibrary(L"xxx/avfilter-xx.dll");

LoadLibrary(L"xxx/avdevice-xx.dll");

LoadLibrary(L"xxx/thumb.dll");


{不会上传图片,凑合看

0 0
原创粉丝点击