zoukankan      html  css  js  c++  java
  • mac上编译Android的arm64位ffmpeg

    在涉及对视频进行操作的场景,ffmpeg可以很好地满足一些需求,下面以arm64的Android系统为例,记录ffmpeg编译的实现。

    一、下载源码

        可以通过git的方式获取源码,这里直接从ffmpeg.org下载到4.3.1的tar包

    二、配置和编译

      ffmpeg的编译方式跟其他unix*开源工具类似,先configure再make即可。但这里我们是要在mac上编译用于Android的二进制文件,所以需要使用交叉编译工具链。

      1. 引用Android ndk编译,这里使用的是ndk r21版本,亲测可用

    NDK=$ANDROID_NDK_HOME

      2. 指定需要用到的toolchain和sysroot路径

    TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
    SYSROOT=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot
    CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang # c compiler path
    CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ # c++ compiler path

      3. 根据实际需求打开或关闭ffmpeg的feature,这些可以从configure中获得

    ./configure --enabe-* --disable-*
    make
    make install

      4. 最后放出完整脚本

    #!/bin/bash
    NDK=$ANDROID_NDK_HOME
    
    ARCH=aarch64
    TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
    SYSROOT=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot
    ROOT_FOLDER=$PWD/..
    OUTPUT=$ROOT_FOLDER/output/android/ffmpeg/arm64
    CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang # c compiler path
    CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ # c++ compiler path
    
    ADDI_CFLAGS="-fPIE -pie -mfloat-abi=softfp -mfpu=neon"
    ADDI_LDFLAGS="-fPIE -pie"
    
    echo "sysroot:$SYSROOT"
    echo "output:$OUTPUT"
    echo "arch:$ARCH"
    echo "CC:$CC"
    echo "CXX:$CXX"
    
    ./configure 
        --disable-shared 
        --enable-static 
        --disable-stripping 
        --enable-debug 
        --prefix=$OUTPUT 
        --toolchain=clang-usan 
        --enable-cross-compile 
        --target-os=linux 
        --arch=$ARCH 
        --sysroot=$SYSROOT 
        --cc=$CC 
        --cxx=$CXX 
        --cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- 
        --extra-cflags="$ADDI_CFLAGS" 
        --extra-ldflags="$ADDI_LDFLAGS" 
        --extra-libs=-ldl 
        --disable-avdevice 
        --disable-ffplay 
        --disable-network 
        --disable-doc 
        --disable-symver 
        --disable-ffprobe 
        --disable-opencl 
        --enable-neon 
        --enable-gpl 
        --enable-pthreads 
        --enable-encoder=aac 
        --enable-encoder=gif 
        --enable-encoder=mpeg4 
        --enable-encoder=yuv4 
        --enable-decoder=h264 
        --enable-bsf=h264_mp4toannexb 
        --enable-bsf=hevc_mp4toannexb 
        --enable-bsf=mpeg4_unpack_bframes
        
    rm -rf $OUTPUT
    make clean
    make -j9
    make install

      

  • 相关阅读:
    HDU 1863 畅通工程(Kruskal)
    HDU 1879 继续畅通工程(Kruskra)
    HDU 1102 Constructing Roads(Kruskal)
    POJ 3150 Cellular Automaton(矩阵快速幂)
    POJ 3070 Fibonacci(矩阵快速幂)
    ZOJ 1648 Circuit Board(计算几何)
    ZOJ 3498 Javabeans
    ZOJ 3490 String Successor(模拟)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
  • 原文地址:https://www.cnblogs.com/jacobchen/p/14333172.html
Copyright © 2011-2022 走看看