美文网首页
Android音频开发(四)——ffmpeg的编译

Android音频开发(四)——ffmpeg的编译

作者: 又尔enter | 来源:发表于2017-09-05 16:27 被阅读0次

    PS:好久没写文章了,由于年中跳了槽,到新公司一直忙于项目的开发,如今才有时间抽空来继续我们的android音频开发

    前几节我们讲的都是调用android原生API来进行音频的播放,编解码等操作,是在java层面,而且由于MediaCodec兼容性的限制,导致无法在API16以下使用,所以我们不得不放弃java层,转而寻求更为成熟的c/c++处理方案,再用jni去调用。所以,大名鼎鼎的ffmpeg闪亮登场了。
    a1.jpg

    那么问题来了,怎么使用这个玩意儿了?接下来跟着我走

    a2.jpg

    一、首先去官网下载源码http://ffmpeg.org/download.html,最新版本是3.3.3,下载完成后我们在linux下把源码编译成android能用的so文件,当然你也可以直接打开cmd命令去使用它,熟悉它的一些命令。

    我这里用的是VirtualBox+Ubuntu的方式去编译,为了方便,我这里专门设置了共享文件夹方便windows和ubuntu传输文件。共享文件夹的设置大家请百度吧。


    a3.jpg

    二、开始编译

    首先要安装NDK,下载好NDK后解压在用户根目录,并配置好环境变量

    a3.png

    输入gedit ~/.bashrc,加入以下代码
    export NDK_HOME=/home/dy/android-ndk-r14b
    注意换成你自己的路径,保存然后输入source ~/.bashrc编译一下即可

    你可以测试一下有没有安装成功:$ cd $NDK_ROOT$ ./ndk-build NDK_PROJECT_PATH=$NDK_ROOT/samples/two-libs

    在根目录下新建一个工程media,用于存放ffmpeg,和编译脚本,把你下载的ffmpeg源码放进来。

    a4.png

    然后找到ffmpeg文件夹下得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)'
    

    为什么要这么做呢,这是因为如果直接按照未修改的配置进行编译,结果编译出来的so文件类似libavcodec.so.55.39.101,版本号位于so之后,Android无法加载

    接下来在ffmpeg目录下新建脚本文件buildff.sh,文件内容如下

    #清除上次编译的东西
    make clean
    #配置NDK路径,注意换成你自己的路径
    export NDK=/home/dy/android-ndk-r14b
    #配置工具链,注意查看是否有该路径,各个ndk版本不同,路径会有不同
    export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt
    #配置平台,同上注意路径
    export PLATFORM=$NDK/platforms/android-9/arch-arm
    #配置编译好了之后的文件输出目录,$(pwd)当前目录下
    export PREFIX=$(pwd)/android/
    build_one(){
      ./configure --target-os=linux --prefix=$PREFIX \
    --enable-cross-compile \
    --enable-runtime-cpudetect \
    --disable-asm \
    --arch=arm \
    --cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \
    --cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
    --disable-stripping \
    --nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \
    --sysroot=$PLATFORM \
    --enable-gpl --enable-shared --disable-static --enable-nonfree --enable-version3 --enable-small \
    --enable-zlib --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \
    --extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a" 
    }
    build_one
    
    #4线程编译
    make -j4
    make install
    

    然后输入以下命令

    chmod 777 ./buildff.sh
     ./build_android.sh
    

    就开始编译了

    编译完成后会在ffmpeg下生成android文件夹,里面就是include源文件和编译好的so文件,然后通过共享文件夹把android文件夹传给windows,供我们使用即可。

    a5.png

    最后上个妹子图缓解一下视力,接下来就是在AS里面运用了

    6VD[D]L1MLP{EEZX8S498DG.png

    相关文章

      网友评论

          本文标题:Android音频开发(四)——ffmpeg的编译

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