• ffmpeg学习笔记-编译脚本


    之前已经用他人的编译脚本对ffmpeg进行了成功编译,那么在裁剪ffmpeg的时候需要指定文件,这时候应该怎么编写编译脚本呢?本文目的在于说明ffmpeg编译脚本的编写

    • 首先在ffmpeg的目录下新建编译脚本
    touch android_build.sh #新建编译脚本
    chmod 755 android_build.sh #修改权限
    
    • 打开编译脚本,进行脚本编写
    vim android_build.sh
    
    • 最开始一行写入如下,表示这是一个bash脚本
    #!/bin/bash
    
    • 定义编译ffmpeg的函数
    function build_ffmpeg
    {
        echo "satrt build ffmpeg"
    }
    
    • 调用ffmpeg函数
    build_ffmpeg
    

    至此,大体框架就已经搭建成功了,接下来就是填空题了

    • 在ffmpeg函数里面调用configure,并且传入参数
    #!/bin/bash
    
    export ANDROID_NDK_HOME=/usr/ndk/android-ndk-r10e
    export PLATFORM_VERSION=android-9
    
    function build_ffmpeg
    {
        echo "satrt build ffmpeg"
    
        ./configure --target-os=linux 
        --prefix=$PREFIX 
        --arch=$ARCH 
        --enable-shared 
        --disable-static 
        --disable-yasm 
        --disable-ffmpeg 
        --disable-ffplay 
        --disable-ffprobe 
        --disable-ffsever 
        --disable-doc 
        --enable-cross-compile 
        --cross-prefix=$CROSS_COMPILE 
        --sysroot=$PLATFORM 
        --extra-cflags="-fpic"
    
        make clean
        make
        make install
    
        echo "build finished $ARCH"
    }
    
    ARCH=arm
    CPU=arm
    PREFIX=$(pwd)/android/$CPU
    TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
    CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
    PLATFORM=$ANDROID_NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH
    build_ffmpeg
    

    说明:
    在传递configure的参数时候,有很多参数,写在一行就显得太长,且不美观
    这时候需要换行,在shell脚本中,使用表示连接一行,在其后面不能有空格,下一行的开始位置也不能有空格
    为保持整齐,使用Tab制表符
    同时配置一些变量,便于多次使用
    target-os:target系统
    prefix:编译生成目录
    arch:CPU架构
    enable-shared:表示生成的是动态库
    disable-static:不生成静态库
    disable-yasm:不使用yasm
    disable-ffmpeg:不生成ffmpeg软件
    disable-ffplay:不生成ffplay播放器软件
    disable-ffprobe:不生成ffprobe信息查看软件
    disable-ffsever:不生成ffserver(主要用于与服务器通信)
    disable-doc:不生成doc文档
    enable-cross-compile:使用交叉编译
    cross-prefix:交叉编译链目录
    sysroot:指定系统目录
    extra-cflags:添加参数,使得动态库可以被加载使用

    以上便生成编译脚本了,按照NDK里面的东西,能看到不仅可以生成arm,还可以生成x86和mipsel等,那么这里就一起生成这三个动态库,在调用函数前重新设置变量即可以下就以编译arm,x86,mipsel为例

    完整shell脚本如下

    #!/bin/bash
    
    export ANDROID_NDK_HOME=/usr/ndk/android-ndk-r10e
    export PLATFORM_VERSION=android-9
    
    function build_ffmpeg
    {
        echo "satrt build ffmpeg"
    
        ./configure --target-os=linux 
        --prefix=$PREFIX 
        --arch=$ARCH 
        --enable-shared 
        --disable-static 
        --disable-yasm 
        --disable-ffmpeg 
        --disable-ffplay 
        --disable-ffprobe 
        --disable-ffsever 
        --disable-doc 
        --enable-cross-compile 
        --cross-prefix=$CROSS_COMPILE 
        --sysroot=$PLATFORM 
        --extra-cflags="-fpic"
    
        make clean
        make
        make install
    
        echo "build finished $ARCH"
    }
    
    #arm
    ARCH=arm
    CPU=arm
    PREFIX=$(pwd)/android/$CPU
    TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
    CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
    PLATFORM=$ANDROID_NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH
    build_ffmpeg
    
    #x86
    ARCH=x86
    CPU=x86
    PREFIX=$(pwd)/android/$CPU
    TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/x86-4.9/prebuilt/linux-x86_64
    CROSS_COMPILE=$TOOLCHAIN/bin/i686-linux-android-
    PLATFORM=$ANDROID_NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH
    build_ffmpeg
    
    #mipsel
    ARCH=arm
    CPU=arm
    PREFIX=$(pwd)/android/$CPU
    TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/mipsel-linux-android-4.9/prebuilt/linux-x86_64
    CROSS_COMPILE=$TOOLCHAIN/bin/mipsel-linux-android-
    PLATFORM=$ANDROID_NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH
    build_ffmpeg
    

    注意:最好在Linux直接用vim编译,本地编译上传可能会出问题,如果本地编写上传时候一定要使用dos2unix转化一下格式

  • 相关阅读:
    2013腾讯编程马拉松初赛第〇场(3月20日)湫湫系列故事——植树节 HDOJ 4503
    组合模式(Composite)
    Git Push 避免用户名和密码方法
    [Yii2] 快速套模板,加载JS,CSS(HTML标签<base>)
    phpstorm 2016.2.x 最新版激活方法
    PHP实现四种基本排序算法
    linux下查看负载均衡的两种方法
    Redis各类型应用场景
    HTTP协议2:请求、响应、缓存 2017-03-16 11:20 197人阅读 评论(0) 收藏
    HTTP协议1:工作原理 2017-03-16 11:18 39人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/cj5785/p/10664654.html
Copyright © 2020-2023  润新知