0、为什么要在vs中编译ffmpeg.c
用ffmpeg有很多的用途,比如可以用来转码,也可以用来解码,光是通过上一章的博文,得到几个对应的dll,其实作用并不大,你可以通过在vs中编译ffmpeg.c来看看,是如何使用这些dll的,当然,也可以通过编译ffplay.c来看看一个播放器是如何做成的
1、先把ffmpeg.c加入在vs中
创建一个空的工程,然后把ffmpeg.c加进来,尝试一下编译,看看都需要加入些什么
2、修改ffmpeg.c
注释掉40行,然后把对应的头文件拷过来
因为我是通过mingw来编译的,所以在当时生成出来dll的时候,也顺便把头文件给拷贝出来了,所以这里可以直接放到vs的这个工程中:
然后在工程设置中,给他包含进来
还缺少的头文件,可以去ffmpeg的源代码里面搜索:
3、解决一些别的问题
这里的34行注释掉,类似的后面遇到#include 的也都注释掉
提示“error C2054: 在“inline”之后应输入“(””这个错误的,全都去掉incline即可
在刚才加入的config.h文件的最前面加入:
这样就解决了下面的问题
100行的HAVE_STRUCT_POLLFD修改成POLLIN
4、在继续添加需要的文件
然后看到下面的错误
其实是这个错:
把所有用到这个宏的地方都修改成:
AVRationalr= {1,AV_TIME_BASE };
用r这个变量来替代这个宏
使用_read,凡是提示这样的错误,都是这么解决
遇到这个错误:
用以下语句替换:
char error_[1024];
av_make_error_string(error_,1024,ret);
error_
这个语句
用以下语句替换:
AVRationalr2= {1,1000 };
还需要改这里:
1874行还需要修改这里:
3226添加下面几行
第一个if(debug_ts){}应该这么样修改:
最后一个if(debug_ts){}应该这么样修改:
4、其他的一些问题
比如snprintf修改成_snprintf、read修改成_read等,这些都容易解决
5、测试使用一下生成出来的ffmpeg.exe
在工程目录中放一个测试视频文件video.mp4,设置调试的命令行为-i video.mp4 -vframes 300 -y -f gif a.gif
这个命令行的意思是,把video.mp4的前300帧做成一个a.gif(一些另外的使用命令,可以参考ffmpeg官网或者google、baidu)
这就是得到的a.gif:
6、整个测试工程csdn下载
csdn的下载地址:http://download.csdn.net/detail/zengraoli/7610219
或许还需要到x264、x265的dll:http://download.csdn.net/detail/zengraoli/9461306
改动比较多,花了大概一个晚上解决的问题,所以收取的下载分比较高,请尽量自己动手修改!