• FFmpeg安卓平台编译


    准备的文件

    1、FFmpeg源代码
    2、ubuntu系统或者windows下搭建cygwin交叉编译环境
    3、ndk-linux或者ndk-windows版本

    开始

    1、解压FFmpeg,ndk
    2、进入FFmpeg根目录下
    3、修改configure文件:
    如果直接按照未修改的配置进行编译,结果编译出来的so文件类似libavcodec.so.55.39.101,版本号位于so之后,Android上似乎无法加载。因此需要按如下修改:

    将该文件中的如下四行:

    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)’

    4、新建build_android.sh
    写入内容:

    1. #!/bin/bash
    2. NDK=/home/song/FFmpeg/android-ndk-r13b
    3. SYSROOT=$NDK/platforms/android-9/arch-arm/
    4. TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
    5. function build_one
    6. {
    7. ./configure \
    8. --prefix=$PREFIX \
    9. --enable-shared \
    10. --disable-static \
    11. --disable-doc \
    12. --disable-doc \
    13. --disable-symver \
    14. --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    15. --target-os=linux \
    16. --arch=arm \
    17. --enable-cross-compile \
    18. --sysroot=$SYSROOT \
    19. --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    20. --extra-ldflags="$ADDI_LDFLAGS" \
    21. $ADDITIONAL_CONFIGURE_FLAG
    22. make clean
    23. make
    24. make install
    25. }
    26. CPU=arm
    27. PREFIX=$(pwd)/android/$CPU
    28. ADDI_CFLAGS="-marm"
    29. build_one
    • 1

    这个脚本文件有几个地方需要注意:

    (1) NDK,SYSROOT和TOOLCHAIN这三个环境变量一定要换成你自己机器里的。

    (2) 确保cross-prefix变量所指向的路径是存在的。

    5、给build.sh增加可执行权限

    $chmod+x build_android.sh  
    • 1

    6、执行该脚本
    ./build_android.sh

    7、至此,会在/home/dennis/ffmpeg-2.2目录下生成一个android目录,其中/home/dennis/ffmpeg-2.2/android/arm/lib目录下的so库文件如下:

    1. [plain] view plain copy
    2. -rwxr-xr-x 1 dennisdennis 55208 Mar 29 16:26libavdevice-55.so
    3. -rwxr-xr-x 1 dennisdennis 632476 Mar 29 16:26 libavfilter-4.so
    4. -rwxr-xr-x 1 dennisdennis 1442948 Mar 29 16:26 libavformat-55.so
    5. -rwxr-xr-x 1 dennisdennis 7985396 Mar 29 16:26 libavcodec-55.so
    6. -rwxr-xr-x 1 dennisdennis 83356 Mar 29 16:26libswresample-0.so
    7. -rwxr-xr-x 1 dennisdennis 308636 Mar 29 16:26 libswscale-2.so
    8. -rwxr-xr-x 1 dennisdennis 300580 Mar 29 16:26libavutil-52.so
    • 1

    注:以上列表去掉了符号链接文件和pkgconfig目录。

  • 相关阅读:
    x86 架构的机载计算机,它来了!
    十个关于商业智能商业智能BI的观点,你认同几个?
    2022年09月 C/C++(八级)真题解析#中国电子学会#全国青少年软件编程等级考试
    JVM的主要组成及其作用
    架构与思维:一定需要微服务么?
    笙默考试管理系统-SMExamination.Model.Notice展示(2)
    图论(链式前向星、最短路、最小生成树)
    Ceph IO流程及数据分布
    自动控制原理1~3章课后练习题
    版本控制 | 如何有效管理SVN服务器上的多个储存库
  • 原文地址:https://blog.csdn.net/m0_72431373/article/details/127225658