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 枫竹梦

  • 相关阅读:
    vue学习笔记之v-if
    vue学习笔记之属性和方法
    vue学习笔记之v-for与-repeat
    王阳明心学
    读《铁血并购》
    心理测试:DISC性格测试(完整版)
    关于旅行
    [转载]win32 计时器使用
    [转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件
    [转]C#读写TEXT文件
  • 原文地址:https://www.cnblogs.com/furzoom/p/7710126.html
Copyright © 2011-2022 走看看