zoukankan      html  css  js  c++  java
  • 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 枫竹梦

  • 相关阅读:
    F# 语法概览
    Excel 帮助无法正常工作的解决方法
    autofac 组件的实例范围
    visual studio code 中隐藏从 ts 文件生成的 js 文件和 map 文件
    git vim 编辑器基本操作
    nhibernate 中 lazy="no-proxy" 时的问题
    什么是数据科学
    Elasticsearch 疑难解惑
    Hadoop MapReduce执行过程实例分析
    深入浅出JVM
  • 原文地址:https://www.cnblogs.com/furzoom/p/7710126.html
Copyright © 2011-2022 走看看