这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » Android平台移植FFMPEG媒体解码库

共1条 1/1 1 跳转至

Android平台移植FFMPEG媒体解码库

高工
2018-05-22 11:00:04     打赏

交叉编译环境:Ubuntu12.04 (32位)
FFMPEG版本:ffmpeg-2.8.1.tar.bz2
Android NDK开发包:android-ndk32-r10b-linux-x86.tar.bz2

[plain] view plain copy
  1. </pre><pre name="code" class="plain">#!/bin/bash  

  2. #  

  3. # FFmpeg-Android, a bash script to build FFmpeg for Android.  

  4. #  

  5. # Copyright (c) 2012 Cedric Fung <root@vec.io>  

  6. #  

  7. # FFmpeg-Android will build FFmpeg for Android automatically,  

  8. # with patches from VPlayer's Android version <https://vplayer.net/>.  

  9. #  

  10. # FFmpeg-Android is free software; you can redistribute it and/or  

  11. # modify it under the terms of the GNU Lesser General Public  

  12. # License as published by the Free Software Foundation; either  

  13. # version 3 of the License, or (at your option) any later version.  

  14.   

  15. # FFmpeg-Android is distributed in the hope that it will be useful,  

  16. # but WITHOUT ANY WARRANTY; without even the implied warranty of  

  17. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  

  18. # Lesser General Public License for more details.  

  19.   

  20. # You should have received a copy of the GNU Lesser General Public  

  21. # License along with FFmpeg-Android; if not, write to the Free Software  

  22. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA  

  23. #  

  24. #  

  25. # Instruction:  

  26. #  

  27. # 0. Install git and Android ndk  

  28. # 1. $ export ANDROID_NDK=/path/to/your/android-ndk  

  29. # 2. $ ./FFmpeg-Android.sh  

  30. # 3. libffmpeg.so will be built to build/ffmpeg/{neon,armv7,vfp,armv6}/  

  31. #  

  32. #  

  33.   

  34. DEST=`pwd`/build/ffmpeg && rm -rf $DEST  

  35. SOURCE=`pwd`/ffmpeg  

  36. ANDROID_NDK=/work/FFMPEG/android-ndk-r10b  

  37.   

  38. TOOLCHAIN=/work/FFMPEG/toolchain  

  39. SYSROOT=$TOOLCHAIN/sysroot/  

  40. #$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --platform=android-14 --install-dir=$TOOLCHAIN  

  41.   

  42. export PATH=$TOOLCHAIN/bin:$PATH  

  43. export CC="ccache arm-linux-androideabi-gcc"  

  44. export LD=arm-linux-androideabi-ld  

  45. export AR=arm-linux-androideabi-ar  

  46.   

  47. CFLAGS="-O3 -Wall -mthumb -pipe -fpic -fasm \  

  48.         -finline-limit=300 -ffast-math \  

  49.         -fstrict-aliasing -Werror=strict-aliasing \  

  50.         -fmodulo-sched -fmodulo-sched-allow-regmoves \  

  51.         -Wno-psabi -Wa,--noexecstack \  

  52.         -D__ARM_ARCH_5__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__ \  

  53.         -DANDROID -DNDEBUG"  

  54.   

  55. FFMPEG_FLAGS="--prefix=/work/FFMPEG/ffmpeg_android/ \  

  56.               --target-os=android \  

  57.               --arch=arm \  

  58.               --enable-cross-compile \  

  59.               --cross-prefix=arm-linux-androideabi- \  

  60.               --enable-shared \  

  61.               --disable-symver \  

  62.               --disable-doc \  

  63.               --disable-ffplay \  

  64.               --disable-ffmpeg \  

  65.               --disable-ffprobe \  

  66.               --disable-ffserver \  

  67.               --disable-avdevice \  

  68.               --disable-avfilter \  

  69.               --disable-encoders \  

  70.               --disable-muxers \  

  71.               --disable-bsfs \  

  72.               --disable-filters \  

  73.               --disable-devices \  

  74.               --disable-everything \  

  75.               --enable-protocols  \  

  76.               --enable-parsers \  

  77.               --enable-demuxers \  

  78.               --disable-demuxer=sbg \  

  79.               --enable-decoders \  

  80.               --enable-network \  

  81.               --enable-swscale  \  

  82.               --enable-version3 \  

  83.               --disable-inline-asm \  

  84.               --disable-yasm \  

  85.               --disable-mips32r2 \  

  86.               --disable-mipsdspr1 \  

  87.               --disable-mipsdspr2 \  

  88.               --disable-mipsfpu \  

  89.               --disable-fast-unaligned \  

  90.               --disable-debug \  

  91.               --disable-xmm-clobber-test \  

  92.               --enable-decoder=h264 \  

  93.               --enable-decoder=mpeg4 \  

  94.               --enable-decoder=mjpeg \  

  95.               --enable-demuxer=h264 \  

  96.               --enable-demuxer=mpeg4 \  

  97.               --enable-demuxer=mjpeg \  

  98.               --enable-parser=h264 \  

  99.               --enable-memalign-hack \  

  100.               --disable-asm \  

  101.               --disable-altivec \  

  102.               --disable-amd3dnow \  

  103.               --disable-amd3dnowext \  

  104.               --enable-mmx \  

  105.               --enable-mmxext \  

  106.               --disable-sse \  

  107.               --disable-sse2 \  

  108.               --disable-sse3 \  

  109.               --disable-ssse3 \  

  110.               --disable-sse4 \  

  111.               --disable-fma4"  

  112.   

  113.   

  114. for version in neon armv7 vfp armv6; do  

  115.   

  116. cd $SOURCE  

  117.   

  118. case $version in  

  119. neon)  

  120.     EXTRA_CFLAGS="-march=armv7-a -mfpu=neon -mfloat-abi=softfp -mvectorize-with-neon-quad"  

  121.     EXTRA_LDFLAGS="-Wl,--fix-cortex-a8"  

  122.     ;;  

  123. armv7)  

  124.     EXTRA_CFLAGS="-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp"  

  125.     EXTRA_LDFLAGS="-Wl,--fix-cortex-a8"  

  126.     ;;  

  127. vfp)  

  128.     EXTRA_CFLAGS="-march=armv6 -mfpu=vfp -mfloat-abi=softfp"  

  129.     EXTRA_LDFLAGS=""  

  130.     ;;  

  131. armv6)  

  132.     EXTRA_CFLAGS="-march=armv6"  

  133.     EXTRA_LDFLAGS=""  

  134.     ;;  

  135. *)  

  136.     EXTRA_CFLAGS=""  

  137.     EXTRA_LDFLAGS=""  

  138.     ;;  

  139. esac  

  140.   

  141. PREFIX="$DEST/$version" && mkdir -p $PREFIX  

  142. FFMPEG_FLAGS="$FFMPEG_FLAGS --prefix=$PREFIX"  

  143.   

  144. ./configure $FFMPEG_FLAGS --extra-cflags="$CFLAGS $EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" | tee $PREFIX/configuration.txt  

  145. cp config.* $PREFIX  

  146. [ $PIPESTATUS == 0 ] || exit 1  

  147.   

  148. make clean  

  149. make -j4 || exit 1  

  150. make install || exit 1  

  151.   

  152. rm libavcodec/inverse.o  

  153. $CC -lm -lz -shared --sysroot=$SYSROOT -Wl,--no-undefined -Wl,-z,noexecstack $EXTRA_LDFLAGS libavutil/*.o libavutil/arm/*.o libavcodec/*.o libavcodec/arm/*.o libavformat/*.o libswresample/*.o libswscale/*.o -o $PREFIX/libffmpeg.so  

  154.   

  155. cp $PREFIX/libffmpeg.so $PREFIX/libffmpeg-debug.so  

  156. arm-linux-androideabi-strip --strip-unneeded $PREFIX/libffmpeg.so  

  157.   

  158. done  



注意:
1、直接运行上面的脚本会出错,提示如下:
arm-linux-androideabi-gcc is unable to create an executable file.
C compiler test failed.


解决办法
执行以上脚本前,先在命令行上执行以下命令把对NDK包中的交叉编译工具链独立提取出来到指定的目录:
/work/FFMPEG/android-ndk-r10b/build/tools/make-standalone-toolchain.sh --platform=android-14 --install-dir=/work/FFMPEG/toolchain/

2、target-os=android,此处不要再用linux了。

3、注意NDK的版本,如果应用代码中使用的是32位系统库,则交叉编译的时候就应该用32位的NDK开发包。




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]