编译ffmpeg源码,并实现暂停操作

it2022-05-05  153

编译ffmpeg源码,并实现暂停操作

下载列表流程简述建立VS2015解决方案建立lib文件夹,添加lib选择编译环境,配置环境第一次编译第二次编译第n次编译——无法解析的外部符号

本来在github上面下载了几个编译好的ffmpeg关于VS的解决方案,但是直接拿到我自己电脑上都不还会报错。所以最后自己尝试自己建立工程,进行编译,发现原来一点都不难。

下载列表

     下面不只是你需要准备的,也是我此次用到的,版本之类的应该没有太大的限制。

ffmpeg 4.1.3源码 ,http://ffmpeg.org/download.html (Get the Sources下面的就是源码了,默认下载最新版);ffmpeg 4.1.3 - dev开发库,https://ffmpeg.zeranoe.com/builds/ (选择下载你想编译的对应版本的dev类型的库,dev类型里面包含我们要用到的lib和部分h文件);ffmpeg 4.1.3 - share运行库,https://ffmpeg.zeranoe.com/builds/ (同上,选择下载你想编译的对应版本的share类型的库,share类型里面包含我们要用到的dll文件);nasm.exe,这个我忘记在哪里下载的了(解决编译错误的时候会用到)

流程简述

建立解决方案,导入我们想重新编译的源码(我只编译了fftools文件夹下面的文件,其他的库没有进行重新编译,ffplay.c如不使用,可以不导入)建立lib文件夹(自己找适当的位置吧),复制ffmpeg 4.1.3-dev文件夹里所有的文件( * .def 文件是lib文件的接口说明,没有实际用处,* .dll.a文件不清楚是做什么的,不过也没用到)选择编译环境(Debug/Release)进行编译环境配置,包括(附加包含目录、附加库目录、附加依赖项,附加依赖项的文件列表后面有给出)进行初步编译,修改对应的错误,除最后一个外,其他的在百度都很容易搜到解决办法。修改源码,实现暂停操作

建立VS2015解决方案

工程建立如下: 导入的文件列表如下:

建立lib文件夹,添加lib

我的目录结构如下: 将dev中lib全部导入lib目录中,(当然也可以进行这步操作,只要设置环境目录时正确就可以了)

选择编译环境,配置环境

我编译的是win32-Release版本的,

avcodec.lib avdevice.lib avfilter.lib avformat.lib avutil.lib postproc.lib swscale.lib swresample.lib

第一次编译

应该会报一个和nasm相关的错误,这时把nasm.exe放到“D:\software\Microsoft\VS2015\VC”目录下。

第二次编译

百度吧,我也记不清了,应该挺简单的。

第n次编译——无法解析的外部符号

这是一个挺常见的错误了,不过这个里面的有点奇怪,有几个固定的这个错误去不掉,没找到原因,只能改代码了。

错误提示:LNK2019: 无法解析的外部符号 _avresample_configuration 解决方法:cmdutils.c文件中,print_all_libs_info里面的都注释掉,就只剩最后一个错误了。 错误提示:不能解析的外部符号__sync_synchronize 解决方法:自己写了一个取代他的函数 文件:compat\atomics\gcc\stdatomic.h

增加定义: void __sync_synchronize1() { ; } 修改__sync_synchronize使用位置,改为__sync_synchronize1 #define atomic_thread_fence(order) \ __sync_synchronize1() #define atomic_store(object, desired) \ do { \ *(object) = (desired); \ __sync_synchronize1(); \ } while (0) #define atomic_load(object) \ (__sync_synchronize1(), *(object))

最新回复(0)