`

为android编译ffmpeg+x264+faac

阅读更多

1. 在x264的源码目录下创建b1.sh,内容如下:

点击(此处)折叠或打开

  1. export NDK=/opt/google/android/android-ndk-r8e
  2. export VERSION=4.4.3
  3. export PREBUILT=$NDK/toolchains/arm-linux-androideabi-$VERSION/prebuilt
  4. export PLATFORM=$NDK/platforms/android-8/arch-arm
  5. ./configure --enable-static \
  6. --enable-shared \
  7. --enable-pic \
  8. --disable-asm \
  9. --disable-cli \
  10. --host=arm-linux \
  11. --cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
  12. --sysroot=$PLATFORM

2. 在ffmepg的父目录下创建b1.sh,内容如下:并创建目录elib,并把上面生成的lib264.a 拷贝到该目录下

点击(此处)折叠或打开

  1. #!/bin/bash
  2. export VERSION=4.4.3
  3. export NDK=/opt/google/android/android-ndk-r8e
  4. export PREBUILT=$NDK/toolchains/arm-linux-androideabi-$VERSION/prebuilt/linux-x86_64
  5. export PLATFORM=$NDK/platforms/android-9/arch-arm
  6. export FFMPEG_ROOT=/home/test/code/ffmpeg-1.1.5 
  7. export X264_ROOT=/home/test/code/x264_and #上面的x264的源码目录
  8. export ELIB="$FFMPEG_ROOT/elib"
  9. function build_one
  10. {
  11. $FFMPEG_ROOT/configure --target-os=linux \
  12. --enable-cross-compile \
  13. --enable-runtime-cpudetect \
  14. --disable-asm \
  15. --arch=arm \
  16. --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
  17. --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
  18. --disable-stripping \
  19. --nm=$PREBUILT/bin/arm-linux-androideabi-nm \
  20. --sysroot=$PLATFORM \
  21. --enable-nonfree \
  22. --enable-version3 \
  23. --disable-everything \
  24. --enable-gpl \
  25. --disable-doc \
  26. --enable-avresample \
  27. --enable-demuxer=rtsp \
  28. --enable-muxer=rtsp \
  29. --disable-ffplay \
  30. --disable-ffserver \
  31. --enable-ffmpeg \
  32. --disable-ffprobe \
  33. --enable-libx264 \
  34. --enable-encoder=libx264 \
  35. --enable-decoder=h264 \
  36. --enable-protocol=rtp \
  37. --enable-hwaccels \
  38. --enable-zlib \
  39. --disable-devices \
  40. --disable-avdevice \
  41. --extra-cflags="-I$X264_ROOT -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \
  42. --extra-ldflags="-L$ELIB"
  43. make -j4
  44. }
  45. build_one
  46. $PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
  47. $PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$ELIB -soname libffmpeg.so -shared -nostdlib -z noexecstack -Bsymbolic --whole-archive --no-undefined -o libffmpeg.so libavcodec/libavcodec.a libavfilter/libavfilter.a libavresample/libavresample.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog -lx264 --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/$VERSION/libgcc.a

到此为止so文件已经编译完毕:
下面编译jni的so文件;

点击(此处)折叠或打开

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. MY_PATH := /home/wanjm/code/binary #上面的so文件的目录
  4. LOCAL_MODULE := ffmpeg
  5. LOCAL_SRC_FILES := $(MY_PATH)/libffmpeg.so #仅支持一个文件;
  6. include $(PREBUILT_SHARED_LIBRARY)
  7. include $(CLEAR_VARS)
  8. LOCAL_MODULE := myffmp
  9. LOCAL_SRC_FILES := VideoEncoder.c #jni的c文件;
  10. LOCAL_C_INCLUDES := /home/wanjm/code/ffmpeg-1.2.4 
  11. LOCAL_LDLIBS := -llog -lm -lc -ldl -lz -lstdc++
  12. LOCAL_STATIC_LIBRARIES := libffmpeg #引用5处生成的so文件;
  13. include $(BUILD_SHARED_LIBRARY)

上面so方式弄出来的,还是两个文件,在实际的java中,要限价在libffmpeg.so,然后在加载myffmp; 反序后会报告少依赖包, 但是按照该顺序还是加载失败;

然后按照下面的写法,可以生成单个so文件,且可以调试;

点击(此处)折叠或打开

  1. LOCAL_PATH := $(call my-dir)
  2. MY_PATH :=/home/wanjm/code/binary/elib
  3. include $(CLEAR_VARS)
  4. #MY_PATH := /home/wanjm/code/binary
  5. #LOCAL_MODULE := ffmpeg
  6. #LOCAL_SRC_FILES := $(MY_PATH)/libffmpeg.so
  7. #include $(PREBUILT_SHARED_LIBRARY)
  8. include $(CLEAR_VARS)
  9. LOCAL_MODULE := avcodec
  10. LOCAL_SRC_FILES := $(MY_PATH)/libavcodec.a
  11. include $(PREBUILT_STATIC_LIBRARY)
  12. include $(CLEAR_VARS)
  13. LOCAL_MODULE := avformat
  14. LOCAL_SRC_FILES := $(MY_PATH)/libavformat.a
  15. include $(PREBUILT_STATIC_LIBRARY)
  16. include $(CLEAR_VARS)
  17. LOCAL_MODULE := avutil
  18. LOCAL_SRC_FILES := $(MY_PATH)/libavutil.a
  19. include $(PREBUILT_STATIC_LIBRARY)
  20. include $(CLEAR_VARS)
  21. LOCAL_MODULE := x264
  22. LOCAL_SRC_FILES := $(MY_PATH)/libx264.a
  23. include $(PREBUILT_STATIC_LIBRARY)
  24. include $(CLEAR_VARS)
  25. LOCAL_MODULE := swscale
  26. LOCAL_SRC_FILES := $(MY_PATH)/libswscale.a
  27. include $(PREBUILT_STATIC_LIBRARY)
  28. include $(CLEAR_VARS)
  29. LOCAL_MODULE := myffmp
  30. LOCAL_SRC_FILES := VideoEncoder.c
  31. LOCAL_C_INCLUDES := /home/wanjm/code/ffmpeg-1.2.4
  32. LOCAL_LDLIBS := -llog -lm -lc -ldl -lz -lstdc++
  33. LOCAL_STATIC_LIBRARIES := libavformat libavutil libavcodec libswscale libavutil libx264
  34. include $(BUILD_SHARED_LIBRARY)





makefile 脚本: 注意-lgcc 应该放在最后,否则找到__aeabi_idiv等方法;

点击(此处)折叠或打开

  1. VERSION=4.8
  2. NDK_ROOT=/opt/google/android-ndk-r9b
  3. TOOLCHAINS_ROOT=$(NDK_ROOT)/toolchains/arm-linux-androideabi-$(VERSION)/prebuilt/linux-x86_64
  4. TOOLCHAINS_PREFIX=$(TOOLCHAINS_ROOT)/bin/arm-linux-androideabi
  5. TOOLCHAINS_INCLUDE=$(TOOLCHAINS_ROOT)/lib/gcc/arm-linux-androideabi/$(VERSION)/include-fixed
  6. SYSROOT=$(NDK_ROOT)/platforms/android-9/arch-arm
  7. PLATFORM_INCLUDE=$(SYSROOT)/usr/include
  8. PLATFORM_LIB=$(SYSROOT)/usr/lib
  9. FLAGS= -fpic -DANDROID
  10. #如果没有-lc,实际运行时会找不到gettimeofday;
  11. LDFLAGS=-shared -L$(PLATFORM_LIB) --no-undefined -lc -llog -lm -lc -ldl -lz #-nostdlib -ldl -lm -Bdynamic -lc -lstdc++
  12. #FLAGS="-I$(TOOLCHAINS_INCLUDE) -I$(PLATFORM_INCLUDE) " #-L$(PLATFORM_LIB) -nostdlib -lgcc -Bdynamic -lc"
  13. CC=$(TOOLCHAINS_PREFIX)-gcc --sysroot=$(SYSROOT)
  14. LD=$(TOOLCHAINS_PREFIX)-ld
  15. libtime.so: main.o
  16. $(LD) $(LDFLAGS) main.o -o libtime.so -L/home/wanjm/code/binary/elib -lavformat -lavutil -lavcodec -lswscale -lavutil -lx264 -L$(TOOLCHAINS_ROOT)/lib/gcc/arm-linux-androideabi/$(VERSION) -lgcc
  17. cp libtime.so ../libs/armeabi
  18. main.o: VideoEncoder.c
  19. $(CC) -c VideoEncoder.c -o main.o -I/home/wanjm/code/ffmpeg-1.2.4
  20. clean:
  21. rm -rf libtime.so
  22. rm main.o


一步到位的ffmpeg+x264 for android 的编译;
1. 建立目录android,其下放置解压的ffmpeg和x264源码目录;建立install 目录,和make目录;
2. 在make中创建build.sh; 注意此处用的是相对目录,所以只能在make目录下运行;

点击(此处)折叠或打开

  1. #!/bin/bash
  2. export VERSION=4.6
  3. export NDK=/opt/google/android-ndk-r9b
  4. export PREBUILT=$NDK/toolchains/arm-linux-androideabi-$VERSION/prebuilt/linux-x86_64
  5. export PLATFORM=$NDK/platforms/android-9/arch-arm
  6. export FFMPEG_ROOT=../ffmpeg-1.2.4
  7. export X264_ROOT=../x264 #上面的x264的源码目录
  8. export PREFIX=../install
  9. export ELIB="$PREFIX/lib"
  10. export FAAC_ROOT=../faac-1.28
  11. function build_x264
  12. {
  13. cd $X264_ROOT
  14. pwd
  15. ./configure --enable-static \
  16. --prefix=$PREFIX \
  17. --enable-shared \
  18. --enable-pic \
  19. --disable-asm \
  20. --disable-cli \
  21. --host=arm-linux \
  22. --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
  23. --sysroot=$PLATFORM
  24. make
  25. cp libx264.a $ELIB
  26. cd -
  27. }
  28. function build_faac
  29. {
  30. cd $FAAC_ROOT
  31. pwd
  32. CFLAGS="-fpic -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID -Wa,--noexecstack -MMD -MP "
  33. #FLAGS="--host=arm-androideabi-linux --enable-static --disable-shared --prefix=$HOME --enable-armv5e "
  34. CROSS_COMPILE=$PREBUILT/bin/arm-linux-androideabi-
  35. export CPPFLAGS="$CFLAGS"
  36. export CFLAGS="$CFLAGS"
  37. export CXXFLAGS="$CFLAGS"
  38. export CXX="${CROSS_COMPILE}g++ --sysroot=${PLATFORM}"
  39. export LDFLAGS="$LDFLAGS"
  40. export CC="${CROSS_COMPILE}gcc --sysroot=${PLATFORM}"
  41. export NM="${CROSS_COMPILE}nm"
  42. export STRIP="${CROSS_COMPILE}strip"
  43. export RANLIB="${CROSS_COMPILE}ranlib"
  44. export AR="${CROSS_COMPILE}ar"
  45. ./configure --program-prefix=$PREFIX \
  46. --host=arm-linux
  47. make
  48. cp ./libfaac/.libs/libfaac.a $ELIB
  49. cd -
  50. }
  51. function build_one
  52. {
  53. $FFMPEG_ROOT/configure --target-os=linux \
  54. --prefix=$PREFIX \
  55. --enable-cross-compile \
  56. --enable-runtime-cpudetect \
  57. --disable-asm \
  58. --arch=arm \
  59. --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
  60. --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
  61. --disable-stripping \
  62. --nm=$PREBUILT/bin/arm-linux-androideabi-nm \
  63. --sysroot=$PLATFORM \
  64. --enable-nonfree \
  65. --enable-version3 \
  66. --enable-gpl \
  67. --disable-doc \
  68. --enable-avresample \
  69. --enable-demuxer=rtsp \
  70. --enable-muxer=rtsp \
  71. --disable-ffplay \
  72. --disable-ffserver \
  73. --enable-ffmpeg \
  74. --disable-ffprobe \
  75. --enable-libx264 \
  76. --enable-libfaac --enable-nonfree \
  77. --enable-encoder=libx264 \
  78. --enable-decoder=h264 \
  79. --enable-protocol=rtp \
  80. --enable-encoder=libfaac \
  81. --enable-decoder=aac \
  82. --enable-hwaccels \
  83. --enable-zlib \
  84. --disable-devices \
  85. --disable-avdevice \
  86. --extra-cflags="-I$X264_ROOT -I$FAAC_ROOT/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \
  87. --extra-ldflags="-L$ELIB"
  88. make -j4
  89. make install
  90. }
  91. mkdir -p $ELIB
  92. build_faac
  93. build_x264
  94. build_one
分享到:
评论

相关推荐

    编译开源库ffmpeg+x264+aac+lame源码

    开源库ffmpeg+x264+aac+lame源码编译,包含整个完整的编译步骤

    android ffmpeg+libx264+libx265

    在实际应用中,利用FFmpeg+libx264+libx265,开发者可以实现的功能包括但不限于: - 视频录制:将摄像头捕获的原始数据编码为H.264或H.265格式的视频流。 - 视频转码:将已有H.264或H.265视频转换为其他格式,或者...

    Android 编译ffmpeg+测试工程

    本项目“Android编译ffmpeg+测试工程”旨在帮助开发者在Android环境中集成并运行FFmpeg,以便进行多媒体处理任务。通过这个项目,我们可以学习到以下关键知识点: 1. **FFmpeg简介**:FFmpeg是一个开源的跨平台...

    Android下ffmpeg+opencv开发模板(Eclipse版本)

    要在Android下从事音视频开发,绕不开ffmpeg+opencv,不管是初学者还是有一定经验的程序,面临的首要问题就是环境的搭建和库文件的编译配置等问题,特别是初学者,往往会在实际开发前浪费大量的时间来编译ffmpeg及...

    ffmpeg+x264+x265—Win+安卓平台编译

    ### FFmpeg+x264+x265在Windows及Android平台上的编译指南 #### 一、概述 FFmpeg是一款非常强大的跨平台音视频处理工具集,它支持多种音视频编码格式,包括常见的H.264 (x264) 和 H.265 (x265)。本文档旨在详细介绍...

    ffmpeg+x264+aac的windows10的x64版本

    总之,FFmpeg+x264+aac的组合为Windows 10 x64用户提供了一套强大的音视频处理解决方案,无论是用于个人项目还是商业应用,都能满足高效、高质量的编码需求。同时,通过编译资源,开发者可以进一步定制和优化这些...

    ffmpeg+264+lame编译

    ffmpeg+264+lame编译 ffmpeg+264+lame编译ffmpeg+264+lame编译

    ffmpeg+x264.zip

    在这个名为"ffmpeg+x264.zip"的压缩包中,包含了FFmpeg和x264的相关资源,适合开发者进行Android平台上的视频处理工作。以下是对这些资源的详细解析: 1. **armeabi-v7a和x86**: 这两个目录分别包含了针对Android...

    树莓派4B(32Bit)编译的ffmpeg+x264库

    树莓派4B(32Bit)编译的ffmpeg+x264库,在树莓派上可直接使用。截止2020-05-14 最新的版本。博客地址:https://blog.csdn.net/xiaolong1126626497/article/details/106112203

    Android编译ffmpeg+测试工程

    在Android平台上,编译FFmpeg并集成到自己的应用中,可以实现丰富的音视频功能,如播放、录制、编辑等。下面将详细介绍如何在Android中编译FFmpeg并构建测试工程。 首先,你需要获取FFmpeg的源代码。通常,你可以从...

    andorid_ffmpeg+x264

    在Android平台上进行多媒体处理时,FFmpeg是一个非常...总的来说,"andorid_ffmpeg+x264"为Android开发者提供了一个强大的音视频处理工具,通过它,开发者可以轻松地在Android设备上实现复杂而高效的音视频处理功能。

    ffmpeg + x265 + x264

    5. 配置FFmpeg,添加x264和x265编译选项: ```bash ./configure --enable-gpl --enable-libx264 --enable-libx265 ``` 6. 编译和安装FFmpeg: ```bash make sudo make install ``` 7. 检查安装是否成功: ...

    ffmpeg+x264编译好的arm-linux平台的库文件bin/include/lib的文件,FFMPEG与X264的单独库文件

    将FFmpeg和x264编译为ARM-Linux平台的库文件,是为了在这些设备上实现本地化的视频处理功能,提高性能并减少资源消耗。 4. **编译过程**: 编译FFmpeg和x264到ARM-Linux平台需要交叉编译工具链,这通常包括针对ARM...

    ffmpeg+lib264(windows32)

    在这个“ffmpeg+lib264(windows32)”的压缩包中,包含了适用于Windows 32位系统的FFmpeg和lib264编译版本。 1. FFmpeg核心功能: - 视频编码:FFmpeg支持多种视频编码格式,包括H.264、VP9、MPEG-2等。lib264是...

    ffmpeg+x264解码器支持x86_64、armv7、arm64、i386架构的静态库

    FFmpeg+x264 解码器支持多种处理器架构,包括 x86_64(适用于64位的Intel或AMD处理器)、armv7(针对ARM架构的V7版本)、arm64(适用于64位ARM设备,如现代的Android和iOS设备)以及 i386(32位Intel处理器)。...

    windows下用MinGW编译ffmpeg+x265库

    编译x264库是编译FFmpeg的前置步骤。需要下载x264的源码并解压,之后通过配置命令指定库的安装目录,并启用共享库和静态库的编译。编译过程可能需要几分钟,并且在没有错误的情况下,可以执行make install命令。 接...

    iOS ffmpeg+libx264+libx265+fdk-aac+lame最新源码

    在这个iOS项目的背景下,FFmpeg 配合了几个关键的第三方库,包括libx264、libx265、fdk-aac和lame,用于实现高效的音视频编码和解码。 1. **libx264**: 这是针对H.264视频编码的一个高效开源实现。H.264,也称为AVC...

    windows下编译ffmpeg 并

    在Windows环境下编译FFmpeg是一项技术性较强的任务,特别是对于初学者来说可能充满挑战。FFmpeg是一个开源项目,提供了一套强大的音频、视频处理工具,包括编码、解码、转换和流媒体等功能。以下是编译FFmpeg的详细...

    live555接实时视频流+ffmpeg解+x264再编

    本项目聚焦于"live555"、"ffmpeg"和"x264"这三个核心组件,它们分别承担了接收视频流、解码和编码的重要任务。下面将详细介绍这三个组件及其在实时视频直播中的应用。 首先,"live555"是一个开源的C++库,主要用于...

    编译ffmpeg4.1.2+fdkaac+opus+mp3lame+x264+x265+libyasm+vpx

    ffmpeg4.1.2+fdkaac+opus+mp3lame+x264+x265+libyasm+vpx 编译静态库 采用最新的版本进行编译,里面包含编译脚本、编译步骤说明、以及编译遇到的问题及解决 方法 ...

Global site tag (gtag.js) - Google Analytics