ffmpeg交叉编译指南
2014/1/13
ffmpeg是一个优秀的编解码开源软件,可以应用在Windows平台和Linux平台上,可以下载静态库或者源代码进行编译,进行二次开发和服务于其他应用程序。
1.Windows应用
在Windows中,可以直接使用静态库(也就是一个exe的文件),也可以使用动态链接库。
其中,dev为库形式,static为静态可执行文件,shared为动态连接的可执行文件。
另外,ffmpeg还有C#的应用库,可以很方便的调用。
2.Linux应用
ffmpeg在Linux下主要对源代码进行编译,获得静态文件或者动态库,再进行开发。
2.1.编译环境
Ubuntu 12.12
gcc4.3
2.2.编译步骤
总体编译步骤分为以下三步:
0、安装各种必要的库
1、解压缩,配置编译参数。(./configure)
2、编译,安装到指定位置。(make ,make install)
3、运行命令检查。(ffmpeg -h)
交叉编译x264,得到必要的库。
1、./configure--prefix=./arm --enable-shared --host=arm-linux --disable-asm--cross-prefix=arm-linux-
2、make
3、make install
交叉编译器是从子目录去查找头文件和库的,所以把编译完成后的x264.h和libx264.a拷贝到相应目录。
/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/usr/include
/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/lib
/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/bin
交叉编译sdl库
由于不编译sdl,最后编译ffmpeg时就无法生成ffplay
./configure --prefix=/home/SDL-1.2.15/arm --host=arm-linux--target=arm-linux --enable-shared--disable-debug --disable-cdrom --enable-threads --enable-timers--enable-endian --enable-file --enable-oss --enable-video-fbcon --enable-video-directfb --enable-video-opengl --enable-input-events--enable-pthreads --enable-video-qtopia --enable-dlopen --disable-directx--disable-stdio-redirect
make
makeinstall
复制生成的头文件和库文件到交叉编译器目录。
cp -R./include/SDL /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/usr/include
cp./lib/lib* /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/lib
cp./bin/sdl-config /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/bin
交叉编译ffmpeg
1、解压缩,运行配置。(./configure --help可以查看配置选项)配置需要小写。
./configure --prefix=/home/ffmpeg-1.2/arm3 --enable-shared--disable-static --enable-cross-compile --target-os=linux --cc=arm-linux-gcccxx=arm-linux-g++ ar=arm-linux-ar ld=arm-linux-gcc strip=arm-linux-strip--arch=armv4l --enable-gpl --enable-network --enable-pthreads --disable-armv5te --disable-armv6--disable-armv6t2 --enable-libx264 --enable-armvfp
echo"SDL_CFLAFS=-I/vlc/cross/SDL-1.2.13/install/include/SDL -D_GNU_SOURCE=1-D_REENTRANT" >>config.mak
echo"SDL_LIBS=-L/vlc/cross/SDL-1.2.13/install/lib-Wl,-rpath,/vlc/cross/SDL-1.2.13/install/lib -lSDL -lpthread">>config.mak
2、编译,使用交叉编译器
make CC=arm-linux-gcc CXX=arm-linux-g++ AR=arm-linux-arLD=arm-linux-gcc RANLIB=arm-linux-ranlib STRIP=arm-linux-strip
3、安装(由--prefix=/opt/ffmpeg-1.2-arm指定)
makeinstall
注:此时会出现一个小错误,
root@shendan-virtual-machine:/opt/ffmpeg-1.2-arm# make install
INSTALL libavdevice/libavdevice.a
INSTALL libavdevice/libavdevice.so
STRIP install-libavdevice-shared
strip: Unable to recognise the format of the input file`/opt/ffmpeg-1.2-arm/lib/libavdevice.so.54.3.103‘
make: *** [install-libavdevice-shared] 错误 1
打开config.mk,这个文件就是配置和make时产生的,
把STRIP=strip改为arm-linux-strip即可。
重新make install
4、这个时候会在你指定的目录下生成bin、lib、include、share等文件,把bin、lib两个文件夹的内容复制到开发板的sbin和lib目录下面就可以运行。
5、运行ffmpeg -h检查。