• 音视频(1) - FFmpeg4.3.4编译


     

    FFmpeg版本:4.3.4
    NDK版本:r20b

    NDK在r16之后将gcc编译器移除了,需要使用clang编译器。所以在配置脚本的时候需要设置编译器

    configure中编译器参数配置:

    1. --cc=clang路径 \
    2. --cxx=clang++路径 \

    修改文件ffmpeg/configure:

    1. SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
    2. LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
    3. SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
    4. SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'

    替换为

    1. SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
    2. LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
    3. SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
    4. SLIB_INSTALL_LINKS='$(SLIBNAME)'
    5. 复制代码

    修改好后保存这样才符合android

    比较重要的地方是要除了设置clang路径外还需要正确设置sysroot交叉编译根目录

    完整的编译脚本配置:

    1. #!/bin/bash
    2. export NDK_HOME=NDK路径
    3. export PLATFORM_VERSION=android-21
    4. function build
    5. {
    6. echo "start build ffmpeg"
    7. ./configure \
    8. --target-os=android \
    9. --prefix=$PREFIX \
    10. --arch=$ARCH \
    11. --disable-doc \
    12. --enable-shared \
    13. --disable-static \
    14. --disable-yasm \
    15. --disable-symver \
    16. --enable-gpl \
    17. --disable-ffmpeg \
    18. --disable-ffplay \
    19. --disable-ffprobe \
    20. --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    21. --cc=$TOOLCHAIN/bin/$ARCH-linux-androideabi21-clang \
    22. --cxx=$TOOLCHAIN/bin/$ARCH-linux-androideabi21-clang++ \
    23. --enable-cross-compile \
    24. --sysroot=$SYSROOT \
    25. --enable-small \
    26. --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    27. --extra-ldflags="$ADDI_LDFLAGS" \
    28. $ADDITIONAL_CONFIGURE_FLAG
    29. make clean
    30. make
    31. make install
    32. echo "build ffmpeg for $ARCH finished"
    33. }
    34. #arm版本
    35. ARCH=armv7a
    36. CPU=armv7a
    37. export PREFIX=$(pwd)/android/$ARCH
    38. TOOLCHAIN=$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64
    39. CROSS_COMPILE=$TOOLCHAIN/bin/$ARCH-linux-androideabi21-
    40. ADDI_CFLAGS="-marm"
    41. # SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-arm/ 此这个交叉编译目录是ndk:r14
    42. SYSROOT=$TOOLCHAIN/sysroot
    43. build
    44. 复制代码

    进qun 免费分享:资料包括(C/C++,Android,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)

    较为重要的参数配置:

    • --target-os=android:目标设置为android
    • --cross-prefix=XXXX: 为编译工具指定路径
    • --cc=XXXX:指定使用何种C编译器(默认gcc)
    • -cxx=XXXX:add ECFLAGS to CXXFLAGS
    • --sysroot=XXXXX:置顶交叉编译根目录
    • --enable-shared:生成动态so库
    • --prefix=XXX:生成lib以及include文件存放在哪里
  • 相关阅读:
    PVE vi 编辑器方向键出现ABCD乱码
    黑客8款常用工具
    成都瀚网科技有限公司:怎么优化抖店体验分?
    [负载均衡]-LVS
    学3D人物建模以后能干什么呢,吃香吗?
    vue3中安装并使用CSS预处理器Sass的方法介绍
    【二分法】 超清晰思路总结+模板套路化二分法 ,看不懂你打我。
    Duplicate entry ‘1559098812383174658‘ for key ‘rc_amt_contributions.PRIMARY‘
    回归问题原理
    k8s pod根据指标自动扩缩容举例
  • 原文地址:https://blog.csdn.net/yinshipin007/article/details/126962570