美文网首页
Ubuntu 编译ffmpeg so动态库

Ubuntu 编译ffmpeg so动态库

作者: Sky_Blue | 来源:发表于2022-01-14 11:58 被阅读0次

    一、编译的环境

    1. Ubuntu20.04.3 + NDK-r22版本 + Cmake 3.18.1版本 + ffmpeg-4.0.6
    2. Ubuntu20.04.3系统,是用VirtualBox安装的。
    3. VirtualBox百度就可以免费下载。
    4. Ubuntu20.04.3系统可以到,华为OS镜像免费下载:https://mirrors.huaweicloud.com/
    5. 不会用VirtualBox安装Ubuntu的自己百度。

    二、NDK下载

    1. 下载目录(自己的就行):/home/lven/tool/
    2. 下载地址:wget https://dl.google.com/android/repository/android-ndk-r22-linux-x86_64.zip
      备用版本:wget https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip
    3. 解压:unzip android-ndk-r22-linux-x86_64.zip

    三、Cmake 3.18.1安装

    1. 下载目录(自己的就行):/home/lven/tool/
    2. 下载地址:wget https://github.com.cnpmjs.org/Kitware/CMake/releases/download/v3.18.1/cmake-3.18.1-Linux-x86_64.tar.gz
    3. 解压:tar zxvf cmake-3.18.1-Linux-x86_64.tar.gz
    4. 配置软连接:ln -sf /home/lven/tool/cmake-3.18.1-Linux-x86_64/bin/* /usr/bin/

    四、ffmpeg下载(下载目录自己定)

    1. ffmpeg所有下载地址:http://ffmpeg.org/releases 自己找到想编译的版本
    2. ffmpeg-4.0.2下载地址:wget http://ffmpeg.org/releases/ffmpeg-4.0.6.tar.bz2
    3. 解压:tar zxvf ffmpeg-4.0.6.tar.bz2
    4. cd到ffmpeg-4.0.6目录下创建编译解本 affmpegv7a.sh和affmpegv8a.sh
    5. 执行解本:sudo sh affmpegv7a.sh 或者 sudo sh affmpegv8a.sh

    五、affmpegv7a.sh编译脚本

    #!/bin/bash
    ## NDK路径,换成自己的路径,就改这里就行了,其它的看自己需求
    NDK=/home/lven/tool/android-ndk-r22
    API=21
    TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
    SYSROOT=$TOOLCHAIN/sysroot
    ## 输出路径
    PRFIX="$(pwd)/android/armeabi-v7a"
    ARCH=arm
    CPU=armv7-a
    V7ABI=armv7a-linux-androideabi
    CC=$TOOLCHAIN/bin/$V7ABI$API-clang
    CXX=$TOOLCHAIN/bin/$V7ABI$API-clang++
    ARMABI=arm-linux-androideabi
    CROSS_PREFIX=$TOOLCHAIN/bin/$ARMABI-
    # --disable-indev=v4l2 # error
    ./configure \
        --disable-asm \
        --disable-programs \
        --enable-shared \
        --disable-static \
        --enable-cross-compile \
        --target-os=android \
        --disable-indev=v4l2 \
        --prefix=$PRFIX \
        --arch=$ARCH \
        --cpu=$CPU \
        --sysroot=$SYSROOT \
        --cross-prefix=$CROSS_PREFIX \
        --cc=$CC \
        --cxx=$CXX
    
        make clean
        make -j8
        make install
    
    • --disable-indev=v4l2 解决错误:libavdevice/v4l2.c:135:9: error: assigning to 'int (*)
    • CROSS_PREFIX得用arm-linux-androideabi-

    六、affmpegv8a.sh编译脚本

    #!/bin/bash
    ## NDK路径,换成自己的路径,就改这里就行了,其它的看自己需求
    NDK=/home/lven/tool/android-ndk-r22
    API=21
    TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
    SYSROOT=$TOOLCHAIN/sysroot
    ## 输出路径
    PRFIX="$(pwd)/android/arm64-v8a"
    ARCH=arm64
    CPU=armv8a
    V8ABI=aarch64-linux-android
    CC=$TOOLCHAIN/bin/$V8ABI$API-clang
    CXX=$TOOLCHAIN/bin/$V8ABI$API-clang++
    CROSS_PREFIX=$TOOLCHAIN/bin/$V8ABI-
    # --disable-indev=v4l2 # error
    ./configure \
        --disable-asm \
        --disable-programs \
        --enable-shared \
        --disable-static \
        --enable-cross-compile \
        --target-os=android \
        --disable-indev=v4l2 \
        --prefix=$PRFIX \
        --arch=$ARCH \
        --cpu=$CPU \
        --sysroot=$SYSROOT \
        --cross-prefix=$CROSS_PREFIX \
        --cc=$CC \
        --cxx=$CXX
    
        make clean
        make -j8
        make install
    
    • 仔细看$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot/bin下的编译工具类。

    七、总结

    1. 本人就编译v7a和v8a版本,目前用v7a就够了。
    2. 编译时遇到很坑,上面解本是本人编译成功的解本,如果你编译不成功也正常。

    相关文章

      网友评论

          本文标题:Ubuntu 编译ffmpeg so动态库

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