美文网首页
librtmp、rtmpdump、xh264和ffmpeg的编译

librtmp、rtmpdump、xh264和ffmpeg的编译

作者: orgcheng | 来源:发表于2024-08-07 23:14 被阅读0次

    NDK 提供对 ndk-buildCMake 的官方支持

    一、Mac平台使用ndk-build的方式,编译针对Android平台的librtmp库

    代码的下载地址:https://github.com/yixia/librtmp
    仓库的README中描述的很清楚,它只是在rtmpdump中添加编译脚本

    git://git.ffmpeg.org/rtmpdump mirror, only add build librtmp script for Android & iOS

    这里的编译参考:https://developer.android.google.cn/ndk/guides/other_build_systems?hl=zh-cn
    librtmp属于非 Autoconf make 项目,编译脚本如下:

    #!/bin/bash
    export NDK=/Users/chengzhen/Library/Android/sdk/ndk/25.1.8937393
    
    # Only choose one of these, depending on your build machine...
    export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
    #export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
    
    
    # Only choose one of these, depending on your device...
    export TARGET=aarch64-linux-android
    #export TARGET=armv7a-linux-androideabi
    #export TARGET=i686-linux-android
    #export TARGET=x86_64-linux-android
    
    # Set this to your minSdkVersion.
    export API=21
    
    # Set output path
    PREFIX=$(pwd)/$TARGET$API
    
    # Build.
    make \
        CC="$TOOLCHAIN/bin/clang --target=$TARGET$API" \
        AR=$TOOLCHAIN/bin/llvm-ar \
        RANLIB=$TOOLCHAIN/bin/llvm-ranlib
    
    # Template params
    make install SYS=android prefix=$PREFIX CRYPTO= SHARED= XDEF=-DNO_SSL    
    

    二、使用CMake方式,在android studio中集成rtmpdum源码

    rtmpdum类似于okhttp,它是rtmp协议的一个实现工具,下载地址:https://github.com/aajanki/rtmpdump?tab=readme-ov-file

    下载完成后,把C代码拷贝到工程中,修改CMakeLists.txt文件即可


    截屏2024-08-08 21.41.36.png

    三、Mac平台编译针对Android平台的xh264库

    上面的CMakeLists.txt文件已经集成了xh264,这里讲解下编译

    下载地址:https://www.videolan.org/developers/x264.html
    xh264属于Autoconf 项目,编译脚本如下:

    #!/bin/bash
    
    export NDK=/Users/chengzhen/Library/Android/sdk/ndk/25.1.8937393
    
    TOOLCHAIN_ROOT_DIR=darwin-x86_64
    TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR/
    SYSROOT=$TOOLCHAIN/sysroot
    
    API=21
    export CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
    export CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
    
    
    LLVM_TOOLCHAIN=$TOOLCHAIN/bin
    PKG_CONFIG=/usr/local/bin/pkg-config
    export NM=$LLVM_TOOLCHAIN/llvm-nm
    export STRIP=$LLVM_TOOLCHAIN/llvm-strip
    
    CPU=armv8-a
    PREFIX=$(pwd)/android/$CPU
    export CFLAGS="-march=$CPU -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fno-limit-debug-info  -fPIC"
    
    
    function build_android {
        ./configure \
        --enable-pic \
        --enable-strip \
        --enable-static \
        --disable-asm \
        --disable-cli \
        --prefix=$PREFIX \
        --cross-prefix=$CROSS_PREFIX \
        --host=aarch64-linux-android \
        --sysroot=$SYSROOT \
        --extra-cflags="$CFLAGS"
        make clean
        make
        make install
    }
    build_android
    
    

    四、ffmpeg的编译

    这里只是贴一下mac平台编译成功的脚本,本地验证都是通过的

    #!/bin/bash 
    NDK=/Users/chengzhen/Library/Android/sdk/ndk/25.1.8937393
    TOOLCHAIN_ROOT_DIR=darwin-x86_64
    TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR/
    API=21
    #要编译的ffmpeg内容方法
    function build_android {
        echo "Compiling FFmpeg for $CPU" 
        ./configure \
        --prefix=$PREFIX \
        --disable-hwaccels \
        --disable-gpl \
        --disable-postproc \
        --disable-programs \
        --disable-mediacodec \
        --disable-decoder=h264_mediacodec \
        --disable-static \
        --disable-vulkan \
        --disable-doc \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-avdevice \
        --disable-doc \
        --disable-symver \
        --disable-x86asm \
        --disable-filters \
        --enable-cross-compile \
        --enable-jni \
        --enable-shared \
        --cross-prefix=$CROSS_PREFIX \
        --nm=$NM \
        --strip=$STRIP \
        --pkg-config=$PKG_CONFIG \
        --target-os=android \
        --arch=$ARCH \
        --cpu=$CPU \
        --cc=$CC \
        --cxx=$CXX \
        --sysroot=$SYSROOT \
        --extra-cflags="$CFLAGS"
        make clean 
        make 
        make install 
        echo "The Compilation of FFmpeg for $CPU is completed" 
    }
    
    #接下来是根据需要来决定
    #armv8-a 
    ARCH=arm64 
    CPU=armv8-a 
    CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang 
    CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
    LLVM_TOOLCHAIN=$TOOLCHAIN/bin
    #PKG_CONFIG_DIR=/usr/local
    PKG_CONFIG=/usr/local/bin/pkg-config
    NM=$LLVM_TOOLCHAIN/llvm-nm
    STRIP=$LLVM_TOOLCHAIN/llvm-strip
    SYSROOT=$TOOLCHAIN/sysroot
    CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
    PREFIX=$(pwd)/android/$CPU
    CFLAGS="-march=$CPU -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fno-limit-debug-info  -fPIC"
    build_android
    
    #x86_64
    function fun {
        ARCH=x86_64 
        CPU=x86-64
        CC=$TOOLCHAIN/bin/x86_64-linux-android$API-clang 
        CXX=$TOOLCHAIN/bin/x86_64-linux-android$API-clang++
        LLVM_TOOLCHAIN=$TOOLCHAIN/bin
        PKG_CONFIG_DIR=/usr/local/Cellar/pkg-config/0.29.2_3
        PKG_CONFIG=$PKG_CONFIG_DIR/bin/pkg-config
        NM=$LLVM_TOOLCHAIN/llvm-nm
        STRIP=$LLVM_TOOLCHAIN/llvm-strip
        SYSROOT=$TOOLCHAIN/sysroot 
        CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
        PREFIX=$(pwd)/android/$CPU
        OPTIMIZE_CFLAGS="-march=$CPU"
        build_android
    }
    
    

    五、ffmpeg+rtmp的编译

    另外如果想要ffmpeg使用我们自己的rtmp库,需要修改configure文件,注释掉原来ffmpeg自己的rtmp

    #enabled librtmp           && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket
    

    上面的编译脚本做出相应的修改,添自己的rtmp的头文件和库路径,本地修改后的脚本如下:

    #!/bin/bash 
    NDK=/Users/chengzhen/Library/Android/sdk/ndk/25.1.8937393
    TOOLCHAIN_ROOT_DIR=darwin-x86_64
    TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR/
    API=21
    
    RTMP=/Users/chengzhen/Documents/ffmpeg-7.0.1/librtmp_path
    
    #要编译的ffmpeg内容方法
    function build_android {
        echo "Compiling FFmpeg for $CPU" 
        ./configure \
        --prefix=$PREFIX \
        --disable-hwaccels \
        --disable-gpl \
        --disable-postproc \
        --disable-programs \
        --disable-mediacodec \
        --disable-decoder=h264_mediacodec \
        --disable-static \
        --disable-vulkan \
        --disable-doc \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-avdevice \
        --disable-doc \
        --disable-symver \
        --disable-x86asm \
        --disable-filters \
        --enable-cross-compile \
        --enable-librtmp \
        --enable-jni \
        --enable-static \
        --cross-prefix=$CROSS_PREFIX \
        --nm=$NM \
        --ar=$AR \
        --ranlib=$RANLIB \
        --strip=$STRIP \
        --pkg-config=$PKG_CONFIG \
        --target-os=android \
        --arch=$ARCH \
        --cpu=$CPU \
        --cc=$CC \
        --cxx=$CXX \
        --sysroot=$SYSROOT \
        --extra-cflags="$CFLAGS" \
        --extra-ldflags="-L$RTMP/lib" \
        --extra-libs="-lrtmp"
        make clean 
        make 
        make install 
        echo "The Compilation of FFmpeg for $CPU is completed" 
    }
    
    #接下来是根据需要来决定
    #armv8-a 
    ARCH=arm64 
    CPU=armv8-a 
    CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang 
    CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
    LLVM_TOOLCHAIN=$TOOLCHAIN/bin
    #PKG_CONFIG_DIR=/usr/local
    PKG_CONFIG=/usr/local/bin/pkg-config
    NM=$LLVM_TOOLCHAIN/llvm-nm
    RANLIB=$LLVM_TOOLCHAIN/llvm-ranlib
    AR=$LLVM_TOOLCHAIN/llvm-ar
    STRIP=$LLVM_TOOLCHAIN/llvm-strip
    SYSROOT=$TOOLCHAIN/sysroot
    CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
    PREFIX=$(pwd)/android/$CPU
    CFLAGS="-I$RTMP/include -march=$CPU -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fno-limit-debug-info  -fPIC"
    build_android
    
    

    相关文章

      网友评论

          本文标题:librtmp、rtmpdump、xh264和ffmpeg的编译

          本文链接:https://www.haomeiwen.com/subject/elrckjtx.html