美文网首页
Android端获取ffmpeg动态库

Android端获取ffmpeg动态库

作者: Felix_lin | 来源:发表于2018-10-30 22:08 被阅读120次

    参考文章

    https://blog.csdn.net/leixiaohua1020/article/details/47008825 雷霄骅

    1. 编译环境

    • NDK:android-ndk-r15c

    • FFMPEG: ffmpeg-3.4.4

    • Android P: 21(该环境限制最少21)

    • Ubuntu:18.0.1

    • 部分安装库

        sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \ libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \ libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev
      

    2. 下载ffmpeg到本地,配置编译脚本

    • 下载到本地,官网:http://ffmpeg.org/

        git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
        cd ffmpeg
      
    • 修改configure文件,方便自动导出熟悉的文件名称

        #修改前,方便.so库自动生成我们熟知的命名
        #SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
        #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)'
    
    • arm编译脚本如下,替换下面编译平台NDK目录成你自己的
        #!/bin/bash 
        make clean 
        export NDK=/home/felix/wd500g/android-sdk/android-ndk-r14b 
        export SYSROOT=$NDK/platforms/android-21/arch-arm/ 
        export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 
        export CPU=arm
        export ARCH=arm 
        export PREFIX=$(pwd)/android/$CPU 
        export ADDI_CFLAGS="-marm" 
        ./configure --target-os=linux \
        --prefix=$PREFIX \
        --enable-shared \
        --disable-static \
        --disable-x86asm \
        --arch=arm \
        --disable-doc \
        --disable-symver \
        --enable-gpl \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-ffserver \
        --disable-symver \
        --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
        --enable-cross-compile \
        --sysroot=$SYSROOT \
        --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
        --extra-ldflags="$ADDI_CFLAGS" \
         $ADDITIONAL_CONFIGURE_FLAG
        make clean
        make 
        make install
    

    3. 问题修复(限于该环境配置):

    • 将libavcodec/opus_pvq.c文件的变量B0改成b0
    • 将libavcodec/hevc_mvs.c文件的变量B0改成b0,xB0改成xb0,yB0改成yb0
    • 将libavcodec/aaccoder.c文件B0变量替换成b0

    4. 如何裁切

    • 推荐一篇很好的翻译文章:ffmpeg configure配置选项

    • 通过 --help,可以查看当前配置可以添加或者删除的功能

        /configure --help
      

    如下:

    Configuration options:
      --disable-static         do not build static libraries [no]
      --enable-shared          build shared libraries [no]
      --enable-small           optimize for size instead of speed
      --disable-runtime-cpudetect disable detecting CPU capabilities at runtime (smaller binary)
      --enable-gray            enable full grayscale support (slower color)
      --disable-swscale-alpha  disable alpha channel support in swscale
      --disable-all            disable building components, libraries and programs
      --disable-autodetect     disable automatically detected external libraries [no]
    
    Program options:
      --disable-programs       do not build command line programs
      --disable-ffmpeg         disable ffmpeg build
      --disable-ffplay         disable ffplay build
      --disable-ffprobe        disable ffprobe build
    
    Documentation options:
      --disable-doc            do not build documentation
      --disable-htmlpages      do not build HTML documentation pages
      --disable-manpages       do not build man documentation pages
      --disable-podpages       do not build POD documentation pages
      --disable-txtpages       do not build text documentation pages
    
    Component options:
      --disable-avdevice       disable libavdevice build
      --disable-avcodec        disable libavcodec build
      --disable-avformat       disable libavformat build
      --disable-swresample     disable libswresample build
      --disable-swscale        disable libswscale build
      --disable-postproc       disable libpostproc build
      --disable-avfilter       disable libavfilter build
      --enable-avresample      enable libavresample build (deprecated) [no]
      --disable-pthreads       disable pthreads [autodetect]
      --disable-w32threads     disable Win32 threads [autodetect]
      --disable-os2threads     disable OS/2 threads [autodetect]
      --disable-network        disable network support [no]
      --disable-dct            disable DCT code
      --disable-dwt            disable DWT code
      --disable-error-resilience disable error resilience code
      --disable-lsp            disable LSP code
      --disable-lzo            disable LZO decoder code
      --disable-mdct           disable MDCT code
      --disable-rdft           disable RDFT code
      --disable-fft            disable FFT code
      --disable-faan           disable floating point AAN (I)DCT code
      --disable-pixelutils     disable pixel utils in libavutil
    

    5. ffmpeg配置不同扩展功能

    因为功能分离的缘故,在使用ffmpeg编译集成不同功能时需要下载关联扩展库,如libmp3lame

    • 以libmp3lame为例(不安装报错:ERROR: libmp3lame >= 3.98.3 not found)
      前往MP3lame官网下载:http://lame.sourceforge.net/

    安装:

    tar zxf lame-3.100.tar.gz 
    cd lame-3.100
    ./configure
    make
    sudo make install
    
        An assembler used by some libraries.
        
        cd ~/ffmpeg_sources && \
        wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.bz2 && \
        tar xjvf nasm-2.13.03.tar.bz2 && \
        cd nasm-2.13.03 && \
        ./autogen.sh && \
        PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
        make && \
        make install
        
        Yasm
        
        An assembler used by some libraries.
        
        If your repository provides yasm version ≥ 1.2.0 then you can install that instead of compiling:
        
        sudo apt-get install yasm
        
        Otherwise you can compile:
        
        cd ~/ffmpeg_sources && \
        wget -O yasm-1.3.0.tar.gz https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz && \
        tar xzvf yasm-1.3.0.tar.gz && \
        cd yasm-1.3.0 && \
        ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
        make && \
        make install
        
        libx264
        
        H.264 video encoder. See the H.264 Encoding Guide for more information and usage examples.
        
        Requires ffmpeg to be configured with --enable-gpl --enable-libx264.
        
        If your repository provides libx264-dev version ≥ 118 then you can install that instead of compiling:
        
        sudo apt-get install libx264-dev
        
        Otherwise you can compile:
        
        cd ~/ffmpeg_sources && \
        git -C x264 pull 2> /dev/null || git clone --depth 1 https://git.videolan.org/git/x264 && \
        cd x264 && \
        PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic && \
        PATH="$HOME/bin:$PATH" make && \
        make install
        
        libx265
        
        H.265/HEVC video encoder. See the H.265 Encoding Guide for more information and usage examples.
        
        If your repository provides libx265-dev version ≥ 68 then you can install that instead of compiling:
        
        sudo apt-get install libx265-dev libnuma-dev
        
        Otherwise you can compile:
        
        sudo apt-get install mercurial libnuma-dev && \
        cd ~/ffmpeg_sources && \
        if cd x265 2> /dev/null; then hg pull && hg update; else hg clone https://bitbucket.org/multicoreware/x265; fi && \
        cd x265/build/linux && \
        PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source && \
        PATH="$HOME/bin:$PATH" make && \
        make install
        
        libvpx
        
        VP8/VP9 video encoder/decoder. See the VP9 Video Encoding Guide for more information and usage examples.
        
        Requires ffmpeg to be configured with --enable-libvpx.
        
        If your repository provides libvpx-dev version ≥ 1.4.0 then you can install that instead of compiling:
        
        sudo apt-get install libvpx-dev
        
        Otherwise you can compile:
        
        cd ~/ffmpeg_sources && \
        git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \
        cd libvpx && \
        PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \
        PATH="$HOME/bin:$PATH" make && \
        make install
        
        libfdk-aac
        
        AAC audio encoder. See the AAC Audio Encoding Guide for more information and usage examples.
        
        Requires ffmpeg to be configured with --enable-libfdk-aac (and --enable-nonfree if you also included --enable-gpl).
        
        If your repository provides libfdk-aac-dev then you can install that instead of compiling:
        
        sudo apt-get install libfdk-aac-dev
        
        Otherwise you can compile:
        
        cd ~/ffmpeg_sources && \
        git -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac && \
        cd fdk-aac && \
        autoreconf -fiv && \
        ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
        make && \
        make install
        
        libmp3lame
        
        MP3 audio encoder.
        
        Requires ffmpeg to be configured with --enable-libmp3lame.
        
        If your repository provides libmp3lame-dev version ≥ 3.98.3 then you can install that instead of compiling:
        
        sudo apt-get install libmp3lame-dev
        
        Otherwise you can compile:
        
        cd ~/ffmpeg_sources && \
        wget -O lame-3.100.tar.gz https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz && \
        tar xzvf lame-3.100.tar.gz && \
        cd lame-3.100 && \
        PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm && \
        PATH="$HOME/bin:$PATH" make && \
        make install
        
        libopus
        
        Opus audio decoder and encoder.
        
        Requires ffmpeg to be configured with --enable-libopus.
        
        If your repository provides libopus-dev version ≥ 1.1 then you can install that instead of compiling:
        
        sudo apt-get install libopus-dev
        
        Otherwise you can compile:
        
        cd ~/ffmpeg_sources && \
        git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git && \
        cd opus && \
        ./autogen.sh && \
        ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
        make && \
        make install
        
        libaom
        
        AV1 video encoder/decoder:
        
        cd ~/ffmpeg_sources && \
        git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom && \
        mkdir aom_build && \
        cd aom_build && \
        PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off -DENABLE_NASM=on ../aom && \
        PATH="$HOME/bin:$PATH" make && \
        make install
        
        FFmpeg
        
        cd ~/ffmpeg_sources && \
        wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
        tar xjvf ffmpeg-snapshot.tar.bz2 && \
        cd ffmpeg && \
        PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
          --prefix="$HOME/ffmpeg_build" \
          --pkg-config-flags="--static" \
          --extra-cflags="-I$HOME/ffmpeg_build/include" \
          --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
          --extra-libs="-lpthread -lm" \
          --bindir="$HOME/bin" \
          --enable-gpl \
          --enable-libaom \
          --enable-libass \
          --enable-libfdk-aac \
          --enable-libfreetype \
          --enable-libmp3lame \
          --enable-libopus \
          --enable-libvorbis \
          --enable-libvpx \
          --enable-libx264 \
          --enable-libx265 \
          --enable-nonfree && \
        PATH="$HOME/bin:$PATH" make && \
        make install && \
        hash -r
        
        Now re-login or run the following command for your current shell session to recognize the new ffmpeg location:
        
        source ~/.profile
        
        Compilation and installation are now complete and ffmpeg (also ffplay, ffprobe, lame, x264, & x265) should now be ready to use. The rest of this guide shows how to update or remove FFmpeg. 
    

    相关文章

      网友评论

          本文标题:Android端获取ffmpeg动态库

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