美文网首页
Windows 下编译 FFmpeg 小记(移植到Android

Windows 下编译 FFmpeg 小记(移植到Android

作者: _SOLID | 来源:发表于2017-05-14 13:23 被阅读2005次

    本文是基于 Windows 10 下的 Linux 子系统,不得不说 Win 10 的子系统功能特别赞,默认我们的磁盘挂载在这个系统上,我们不需要再去装虚拟机或者双系统就可以很方便的完成 Linux 上才能做的事,大大的节省了我们的开发时间,为在 Windows 上进行开发的开发人员开辟了一块新的天地。

    1. 如何开启这个子系统
    2. 下载 ffmpeg 源码:https://ffmpeg.org/ , 当前版本为3.3
    3. 下载 Linux 下的 NDK:https://developer.android.com/ndk/downloads/index.html

    由于是在 Linux 下编译,所以务必要下载 Linux 版本的 NDK

    4. 解压到一个文件夹,在根目录下找到 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 文件的命名问题

    5. 新建编译脚本 & 编译:

    在与ffmpeg源码文件夹同级的目录下建立build_android.sh文件,内容如下

    #!/bin/sh
    cd ffmpeg-3.3
    make clean
    #这里的这些变量根据自己本地的环境切换
    export NDK=/mnt/d/ProgramFiles/Development/SDK/ndk-bundle-linux/android-ndk-r14b
    export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt  
    export PLATFORM=$NDK/platforms/android-19/arch-arm
    export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
    export PREFIX=../ffmpeglib  
    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-small \
    --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  
      
    make  
    make install  
    cd ..
    

    记得最上面的变量一定要根据自己的开发环境切换

    安装 gcc

    apt-get install gcc

    安装 make

    apt-get install make

    最后打开命令行输入 bash 进入 linux 子系统,切换目录至 build_android.sh 所在的目录下,在命令行中输入 <code>./build_android</code> 执行上面的脚本等待编译的完成即可

    编译完成后ffmpeg源码的同级目录下会多一个 ffmpeglib 目录,此目录中包含so库文件以及编程会使用到的头文件,将其拷贝到自己项目的目录中即可使用。

    6. 新建一个Android Studio工程,写一个Demo

    项目结构如下图(使用最新的 cmake 构建):


    项目结构

    本项目是基于雷神的 最简单的基于FFmpeg的移动端例子:Android HelloWorld 这篇文章有更多细节的介绍。

    运行截图:

    运行截图

    到此本文就完了,在构建的过程中遇到了很多的坑,也花费了不少的时间,使用FFmpeg也走出了第一步,后面还需要更多的学习,如果读者在构建的过程中遇到问题也欢迎留言。

    源码地址:https://github.com/burgessjp/BlogDemo/tree/master/FFmpegStatDemoForAndroid

    参考文章:

    相关文章

      网友评论

          本文标题:Windows 下编译 FFmpeg 小记(移植到Android

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