ffmpeg编译

作者: Liuqc | 来源:发表于2019-12-19 21:14 被阅读0次

    配置环境

    编译环境ubuntu16.0.4

    编译版本 ffmpeg-3.2.12

    打开profile文件

    vi /etc/profile
    

    在尾部添加

    export NDK_PATH="/home/lq/android-ndk-r14b"
    export PAHT=$NDK_PATH:$PATH
    

    保存

    source /etc/profile
    

    shell脚本

    用vi文件编辑器写ffmpeg_build.sh文件,不能从windows直接复制,不然会有特殊字符,导致编译错误

    #!/bin/bash
    #最低兼容版本
    export PLATFORM_VERSION=android-14
    function build
    {
        echo "start build ffmpeg for $ARCH"
        #configure 编译裁剪配置,你可以在ffmpeg根目录下使用./configure --hellp 查看 ./configure后可填入的参数。
        #-target-os 指定编译目标的系统,由于编译目标是Android系统,Android又是基于liunx内核,所以是liunx,如果要是iOS,则指定darwin
        ./configure --target-os=linux \
        #编译输出文件路径
        --prefix=$PREFIX --arch=$ARCH \
        #禁止输出文档
        --disable-doc \
        #启用构建共享库
        --enable-shared \
        #禁止静态库
        --disable-static \
        --disable-yasm \
        --disable-asm \
        --disable-symver \
        --enable-gpl \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-ffserver \
        --cross-prefix=$CROSS_COMPILE \
        --enable-cross-compile \
        --sysroot=$SYSROOT \
        #启用优化生成库文件大小,编译时间会延长
        --enable-small \
        --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
        --extra-ldflags="$ADDI_LDFLAGS" \
        $ADDITIONAL_CONFIGURE_FLAG
        #清理编译过程中临时文件
        make clean
        #编译,可指定编译线程数  -j4
        make
        #执行安装,就是将相关编译好的程序,类库以及头文件示例代码拷贝到
        make install
        echo "build ffmpeg for $ARCH finished"
    }
    
    ARCH=arm
    CPU=arm
    #生成库文件的安装目录
    PREFIX=$(pwd)/android/$ARCH
    #编译工具链目录
    TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
    #类似于通配符方式指定 bin 目录下以 arm-linux-androideabi-
    CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
    ADDI_CFLAGS="-marm"
    # 设置你的android平台编译器的版本 这里采用Android4.0
    SYSROOT=$NDK/platforms/$PLATFORM_VERSION/arch-$ARCH/
    build
    
    

    编译

    修改configure文件,主要跟动态库名字有关,不修改,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)'  
    

    执行编译脚本

    ./ffmpeg-build.sh
    

    编译成功后目录,include头文件,lib文件夹中存放动态库


    clipboard.png
    clipboard2.png

    问题

    问题1.png

    ndk版本引起的,解决方法替换成ndk14b

    相关文章

      网友评论

        本文标题:ffmpeg编译

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