一、Ubuntu下编译ffmpeg源码指令
下载ffmpeg,解压(跳过),需要安装一些基本的依赖库,如x264等;
切换到ffmpeg源码的目录,config指令
$ ./configure --enable-libx264 --enable-libxvid --enable-libvo-aacenc --disable-yasm --disable-asm --enable-static --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-ffplay --samples=/home/xy/soft/ffout --prefix=/home/xy/soft/ffout
注意:如果需要更多的调试信息,可以加入以下两个配置选项
--enable-debug --disable-optimizations
下一步,编译
make
下一步,安装
sudo make install
安装完成以后,会在指定的目录找到编译结果;路径自定义,由
--prefix=/home/xy/soft/ffout
来指定;
二、调用ffmpeg生成的动态库
编写一个简单的Demo程序
#include <iostream>
using namespace std;
#define __STDC_CONSTANT_MACROS
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavutil/avutil.h"
//#include "libavutil/opt.h"
//#include "libswscale/swscale.h"
}
int main(int argc, char *argv[])
{
cout<<"FFmpeg Test!"<<endl;
av_register_all();
return 0;
}
里面只调用了一个ffmpeg函数,av_register_all(),作为演示,已经足够了;该文件命名为FFDemo.cpp
下一步,编译该文件
g++ FFDemo.cpp -o FFDemo -I/home/xy/soft/ffout/include -L/home/xy/soft/ffout/lib -lavformat -lavcodec -lswscale -lswresample -lavutil -lm -lz
其中,-I,表示include头文件的目录,-L,表示LIB的目录,-l是需要链接的库名称
但是折腾还没有解释,你会发现执行它,./FFDemo,会找不到libavformat.so.56等动态库;
需要设置一下动态库路径,:
sudo gedit /etc/ld.so.conf.d/libffmpeg.conf
打开了libffmpeg.conf(这个文件是被新建的),里面加入下面的路径(根据自己的实际情况),在文件中加入动态库的目录,这里是
/home/xy/soft/ffout/lib
最后,可以验证一下,是否可以找到动态库了:
sudo ldconfig -v