Android FFMpeg(一)——编译FFmpeg
2016-12-05 23:04
316 查看
学习FFMpeg,推荐雷神的博客。天妒英才,为雷神叹息。
第一步 下载FFmpeg(F F m peg)。
第二步 解压FFmpeg。
第三步 windows安装MinGW和Msys。也许还要yasm,名字改为yasm.exe放到C:\WINDOWS\system32中。Linux下就不用这么麻烦了。
第四步 建立如下目录结构,ffmpeg为解压出来的FFmpeg。configure为ffmpeg中copy出来的。
![](https://img-blog.csdn.net/20161205215715260)
第五步 修改 configure中的内容。
为:
第六步 修改build_all.sh内容为:
第七步 Windows下,打开Msys,进入第四步中的目录,执行bash。
Linux直接进入第四步中的目录,执行。
至此,不出意外在build\shlib下就编译出FFmpeg的so库了。但是,并不是这样就算完了。FFmpeg只是一个框架,实际上进行各种格式的编解码的是依靠其他库来完成的。
附:FFmpeg 编译选项 (内容来自http://www.cnblogs.com/wainiwann/p/4204230.html)
第一步 下载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 time if [ -f config.mak ] #判断config.mak是否存在,不存在表示第一次执行,避免clean报错 then make clean fi # 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_64 build_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 # out cd ..
第七步 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 //禁用剥夺可执行文件和共享库
相关文章推荐
- 在Android中通过jni方式使用编译好的FFmpeg库-Android中使用FFmpeg媒体库(二)
- 在Android中通过jni方式使用编译好的FFmpeg库-Android中使用FFmpeg媒体库(二)
- Windows XP、Cygwin、NDKr5b编译Android下的ffmpeg
- ffmpeg android编译
- Android多媒体开发(2)————使用Android NKD编译原版FFmpeg
- android ndk 编译 ffmpeg
- ffmpeg neon优化必看!!android下编译ffmpeg with neon的正确方法(已验证)
- ffmpeg的编译大全(包括 ffmpeg for android)
- 在32位的Ubuntu 11.04中为Android NDK r6编译FFmpeg0.8.1版-Android中使用FFmpeg媒体库(一)
- android ffmpeg内核 开源播放器编译与使用 支持2.3及4.0
- ffmpeg在android手机上的几种编译与使用方法(未完待续)
- 用cygwin 编译 Android 版的ffmpeg
- 在ubuntu 10下使用Android-ndk-r6b成功编译ffmpeg0.8.1
- 在Android中通过jni方式使用编译好的FFmpeg库-Android中使用FFmpeg媒体库
- ffmpeg 编译至android
- 在32位的Ubuntu 11.04中为Android NDK r6编译FFmpeg0.8.1版-Android中使用FFmpeg媒体库(一)
- Android 音视频编解码系列(1)--ubuntu下ndk编译ffmpeg0.8.1
- Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2
- android 用ndk编译ffmpeg
- ffmpeg for android 独立ndk以及android项目下编译 --ubuntu