Android FFMpeg(一)——编译FFmpeg

来源:互联网 发布:淘宝店铺模板怎么用 编辑:程序博客网 时间:2024/05/18 02:37

学习FFMpeg,推荐雷神的博客。天妒英才,为雷神叹息。

第一步 下载FFmpeg(F F m peg)。
第二步 解压FFmpeg。
第三步 windows安装MinGW和Msys。也许还要yasm,名字改为yasm.exe放到C:\WINDOWS\system32中。Linux下就不用这么麻烦了。
第四步 建立如下目录结构,ffmpeg为解压出来的FFmpeg。configure为ffmpeg中copy出来的。
这里写图片描述

第五步 修改 configure中的内容。

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'  LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'  SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'  

为:

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'  LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'  SLIB_INSTALL_LINKS='$(SLIBNAME)'  

第六步 修改build_all.sh内容为:

cd ffmpeg   #进入ffmpeg目录# do not perform 'make clean' at the first timeif [ -f config.mak ]    #判断config.mak是否存在,不存在表示第一次执行,避免clean报错thenmake cleanfi# Windows环境下,可以在Msys中用mount查看各个硬盘的挂载点。Linux下就更容易了。export NDK=/c/Android/android-sdk/ndk-bundle    #ndk路径export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt  export PLATFORM=$NDK/platforms/android-24/arch-arm  export PREFIX=../build  #生成文件的路径export OS=windows-x86_64build_one(){  #configure的各种参数设置了,需要用到什么就编译什么,不必要的禁止掉  ./configure --target-os=linux \  --prefix=$PREFIX \  --libdir=$PREFIX/lib \  --shlibdir=$PREFIX/shlib \  --incdir=$PREFIX/include \  --mandir=$PREFIX/share/man \  --bindir=$PREFIX/bin \  --datadir=$PREFIX/share/ffmpeg \  --docdir=$PREFIX/share/doc/ffmpeg \  --enable-cross-compile \  --enable-runtime-cpudetect \  --disable-asm \  --arch=arm \  --cc=$PREBUILT/$OS/bin/arm-linux-androideabi-gcc \  --cross-prefix=$PREBUILT/$OS/bin/arm-linux-androideabi- \  --disable-stripping \  --nm=$PREBUILT/$OS/bin/arm-linux-androideabi-nm \  --sysroot=$PLATFORM \  --enable-gpl \  --enable-shared \  --disable-static \  --enable-small \  --disable-ffprobe \  --disable-ffplay \  --disable-ffmpeg \  --disable-ffserver \  --disable-debug \  --extra-libs=-lgcc \  --extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a"}  build_one  # 过程可能长点  make  make install# 清除临时文件make clean  # outcd .. 

第七步 Windows下,打开Msys,进入第四步中的目录,执行bash。

./build_all.sh 

Linux直接进入第四步中的目录,执行。

至此,不出意外在build\shlib下就编译出FFmpeg的so库了。但是,并不是这样就算完了。FFmpeg只是一个框架,实际上进行各种格式的编解码的是依靠其他库来完成的。

附:FFmpeg 编译选项 (内容来自http://www.cnblogs.com/wainiwann/p/4204230.html)

--help          print this message //帮助--logfile=FILE    //测试和输出到文件记录--disable-logging   //不要日志调试的信息--prefix=PREFIX    //安装的目录前缀--bindir=DIR       //生成2进制文件的目录--datadir=DIR      //生成数据文件目录--libdir=DIR       //生成静态库的目录--shlibdir=DIR     //生成动态库的目录--incdir=DIR       //生成头文件的目录--mandir=DIR       //生成帮助手册的目录Configuration options:--disable-static       //不建立静态库--enable-shared        // 建立共享库--enable-gpl           //允许GPL代码 生成在lib 和2进制文件            --enable-nonfree       //允许nonfree代码生成lib 和2进制文件--disable-ffmpeg       //取消建立ffmpeg--disable-ffplay     --disable-ffserver         --enable-postproc       //使GPled后置处理支持        --enable-avfilter   //视频过滤支持--enable-avfilter-lavf  //依赖avformat过滤器--enable-beosthreads  //使用BeOS线程                            --enable-os2threads     //使用OS/2线程--enable-pthreads        use pthreads [no]   --enable-w32threads      use Win32 threads [no]                              //win32--enable-x11grab         enable X11 grabbing --disable-network        //禁用网络支持                     --disable-ipv6           //禁用ipv6支持--disable-mpegaudio-hp   //快(但不准确)的音频解码--enable-gray            //全灰度支持(慢,颜色)    --disable-swscale-alpha  //禁止alpha管道在swscale的支持--disable-fastdiv        //禁用table-based的分工--enable-small          //优化尺寸代替速度--disable-aandct        //禁用AAN dct编码--disable-fft           //禁用FFT代码--disable-golomb         //禁用Golomb代码--disable-mdct          //取消MDCT代码--disable-rdft          //取消RDFT代码--enable-runtime-cpudetect //使能CPU运行时检测(会生成更大的2进制)--enable-hardcoded-tables //使用编码表替换运行时产生--enable-memalign-hack  //模仿memalign影响记忆的调试器--enable-beos-netserver   //使用beos netserver--disable-encoder=NAME  //禁用编码器--enable-encoder=NAME   //使用编码器--disable-encoders      //禁用所有编码器--disable-decoder=NAME  //禁用解码器--enable-decoder=NAME   //使用解码器--disable-decoders      //禁用所有解码器--disable-hwaccel=NAME  //禁用hwaccel--enable-hwaccel=NAME   //启用hwaccel名字--disable-hwaccels      //禁用所有hwaccel        --disable-muxer=NAME     //禁用合成器--enable-muxer=NAME      //启用合成器--disable-muxers         //禁用所有合成器--disable-demuxer=NAME   //禁用分离器--enable-demuxer=NAME    //启用分离器--disable-demuxers       //禁用所有分离器--enable-parser=NAME     //启用解析器--disable-parser=NAME    //禁用解析器--disable-parsers        //禁用所有解析器--enable-bsf=NAME        //启用数据流过滤器--disable-bsf=NAME       //禁用数据过滤器--disable-bsfs           //禁用所有数据过滤器名字--enable-protocol=NAME   //启用协议--disable-protocol=NAME  //禁用协议               --disable-protocols      //禁用所有协议--disable-indevs         //禁用输入设备                                            --disable-outdevs        //禁用输出设备--disable-devices        //禁用所有设备--enable-filter=NAME     //启用过滤器--disable-filter=NAME    //禁用过滤器--disable-filters        //禁用所有过滤器--list-decoders          //显示所有可用的解码器--list-encoders          //显示所有可用的编码器--list-hwaccels          //显示所有可用的硬件加速器            --list-muxers            //显示所有可用的合成器                       --list-demuxers          //显示所有可用的分离器--list-parsers           //显示所有可用的的解析器--list-protocols         //显示所有可用的协议                       --list-bsfs              //显示所有可用的数据过滤器              --list-indevs            //显示所有可用的输入设备--list-outdevs           //显示所有可用的输出设备--list-filters           //显示所有可用的过滤器External library support:   外部库的支持--enable-avisynth       //使阅读AVISYnth脚本文件           --enable-bzlib          //设置bzuilb(自动检测)--enable-libamr-nb      //设置libamr-nb浮点音频解码--enable-libamr-wb      //设置libamr-wb浮点音频解码--enable-libdc1394       enable IIDC-1394 grabbing using libdc1394 and libraw1394 [no]--enable-libdirac        enable Dirac support via libdirac [no]--enable-libfaac         enable FAAC support via libfaac [no]--enable-libfaad         enable FAAD support via libfaad [no]--enable-libfaadbin      open libfaad.so.0 at runtime [no]--enable-libgsm          enable GSM support via libgsm [no]--enable-libmp3lame      enable MP3 encoding via libmp3lame [no]--enable-libnut          enable NUT (de)muxing via libnut,                            native (de)muxer exists [no]--enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]--enable-libschroedinger enable Dirac support via libschroedinger [no]--enable-libspeex        enable Speex decoding via libspeex [no]--enable-libtheora       enable Theora encoding via libtheora [no]--enable-libvorbis       enable Vorbis encoding via libvorbis,                         native implementation exists [no]--enable-libx264         enable H.264 encoding via x264 [no]--enable-libxvid         enable Xvid encoding via xvidcore,                         native MPEG-4/Xvid encoder exists [no]--enable-mlib            enable Sun medialib [no]--enable-zlib            enable zlib [autodetect]Advanced options (experts only):高级的选项--source-path=PATH       //源代码路径--cross-prefix=PREFIX    //作为编译工具使用的前缀                            --enable-cross-compile   //假设交叉编译的使用                                --sysroot=PATH           //root of cross-build tree --sysinclude=PATH        //cross—build系统位置的标题--target-os=OS           //目标OS,默认linux--target-exec=CMD        //编译器目标OS(linux)--target-path=DIR        //path to view of build directory on target  --nm=NM                  //使用um工具                  --as=AS                  //使用汇编语言AS                                                       --cc=CC                  //用c编译器cc                                     --host-cc=HOSTCC         //  使用主机C编译器hostcc                                    --host-cflags=HCFLAGS    //use HCFLAGS when compiling for host                             --host-ldflags=HLDFLAGS  //当链接主机的时候使用libs库                     --host-libs=HLIBS        //lib时使用HLIBS主机链接                    --extra-cflags=ECFLAGS   //add ECFLAGS to CFLAGS [ -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112] --extra-ldflags=ELDFLAGS //附加flag                         --extra-libs=ELIBS       //附加库--extra-version=STRING   //版本字符串后缀--build-suffix=SUFFIX    //库名字后缀                          --arch=ARCH              //选择平台--cpu=CPU                //选择最低需要cpu(影响指令的选择可能坠毁在更老的cpu)--enable-powerpc-perf    //设置绩效报告的ppc(需要使用pmc)--disable-altivec        //禁用Altivec优化--disable-amd3dnow       //禁用3DNOW优化--disable-amd3dnowext    //禁用3DNOW扩展优化--disable-mmx            //禁用MMX优化--disable-mmx2           //禁用MMX2优化--disable-sse            //禁用SSE优化--disable-ssse3          //禁用SSSE3优化--disable-armv5te        //禁用armv5te优化,下同--disable-armv6          --disable-armv6t2        --disable-armvfp         --disable-iwmmxt         --disable-mmi            --disable-neon           --disable-vis            --disable-yasm           //禁用汇编指令                  Developer options (useful when working on FFmpeg itself): --disable-debug          disable debugging symbols  //禁止调试--enable-debug=LEVEL     set the debug level [] //设置调试等级--enable-gprof           enable profiling with gprof [] //设置剖析和性能分析--disable-optimizations  disable compiler optimizations //禁用编译器优化选项--enable-extra-warnings  enable more compiler warnings  //使更多的编译器选项--disable-stripping  //禁用剥夺可执行文件和共享库
0 0
原创粉丝点击