• Ubuntu编译Android使用的FFmpeg


    本文介绍在Ubuntu平台编译FFmpeg库,用于Android使用。前提需要配置好NDK的环境。可以参考之前的文章Android NDK环境搭建

    下载FFmpeg

    在官网下载FFmpeg源码,https://ffmpeg.org/download.html

    本文基于FFmpeg2.8进行编译。

    将下载的文件解压,得到ffmpeg目录。

    修改configure文件

    由于FFmpeg默认生成的库文件格式为libavcodec.so.xx.xx.x。其中的xx就是主副版本号,这种格式在Ubuntu下使用是没有问题的,但是在Android下开发使用,并不把其作为有效的库文件。所以需要修改其他生成的文件名的格式。

    通过修改configure文件要实现,打开configure,找到如下内容:

    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)'  

    编译生成类库

    基本的编译过程是configure, make, make install。其中configure的配置文件根据需要进行配置,如果是第一次使用,可以按如下进行配置。如果你不是第一次使用,相信你对于配置的参数应该已经知道自己需要哪些功能。

    在与ffmpeg相同级别建立,编译脚本文件build.sh

    #!/bin/bash
    
    NDK=/home/mn/bin/android-ndk-r15b
    SYSROOT=$NDK/platforms/android-16/arch-arm/
    TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
    PREFIX=../output
    ADDI_CFLAGS="-marm"
    
    
    # --disable-symver - disable symbolic versioning
    function build_one
    {
        ./configure 
            --prefix=$PREFIX 
            --enable-shared 
            --enable-small 
            --disable-static 
            --disable-doc 
            --disable-ffmpeg 
            --disable-ffplay 
            --disable-ffprobe 
            --disable-ffserver 
            --disable-symver 
            --target-os=linux 
            --arch=arm 
            --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- 
            --enable-cross-compile 
            --sysroot=$SYSROOT 
            --extra-cflags="-Os -fpic $ADDI_CFLAGS" 
            --extra-ldflags="$ADDI_LDFLAGS" 
            $ADDITIONAL_CONFIGURE_FLAG
        make clean
        make -j4
        make install
    }
    
    cd ffmpeg
    build_one

    在脚本的开始处定义了一些变量,其他NDK需要根据自己的环境进行配置,配置为NDK的根目录。

    PREFIX为编译的输出的目录。其他参数不需要修改。

    执行如下命令进行编译:

    $ chmod u+x build.sh
    $ ./build.sh
    

    等待编译结束。在output/lib/的目录下生成如下文件:

    libavcodec-57.so
    libavcodec.so
    libavdevice-57.so
    libavdevice.so
    libavfilter-6.so
    libavfilter.so
    libavformat-57.so
    libavformat.so
    libavutil-55.so
    libavutil.so
    libswresample-2.so
    libswresample.so
    libswscale-4.so
    libswscale.so
    pkgconfig

    错误处理

    如果在编译的过程中出现了错误,查看ffmpeg/config.log对配置的日志,及make的错误输出。欢迎留言相互交流。

    By 枫竹梦

  • 相关阅读:
    SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)
    SonarQube系列二、分析dotnet core/C#代码
    SonarQube系列一、Linux安装与部署
    asp.net core 集成JWT(二)token的强制失效,基于策略模式细化api权限
    asp.net core 集成JWT(一)
    visual studio 各版本激活码
    服务网关Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)
    一人撸PaaS之“应用”
    使用Roslyn脚本化C#代码,C#动态脚本实现方案
    try.dot.net 的正确使用姿势
  • 原文地址:https://www.cnblogs.com/furzoom/p/7710126.html
Copyright © 2020-2023  润新知