从0到1手撸FFmpeg播放器[1]:FFmpeg的so库编译

来源:互联网 发布:嘉嘉购物业软件 编辑:程序博客网 时间:2024/05/21 11:16

只要有基本的Linux基础,即可编译成功

FFmpeg编译需要的资源

  • 1、FFmpeg源码包:http://ffmpeg.org/download.html
  • 2、android NDK(我这里用的是13,在http://www.androiddevtools.cn/ 上下载的): https://dl.google.com/android/repository/android-ndk-r13-linux-x86_64.zip
  • 3、ubuntu 12 当然,其他linux也是可以的

实操环节:

1、进入linux,下面我基本都在/home目录下(当然也可以在其它目录),这个纠结没卵用。
2、mkdir ffmpeg 创建一个文件夹,后面文件就都放进来
3、把上面的FFmpeg源码包和ndk包复制到这个目录下面,可以使用WinSCP等工具。
这里写图片描述
4.1、首先安装ndk13,不过与其说安装不如说是解压(linux系统- -),解压命令为
unzip android-ndk-r13-linux-x86_64.zip ,unzip后面跟的是文件名字。
4.2、等待了几分钟(机器性能决定),包解压好了。下图所示:
这里写图片描述
4.3 下一步需要配置环境变量,这个跟java在window配置环境变量是同一回事(为了能找到这个程序运行)。
4.3.1、Vim工具少用,记不住指令,这里使用了简单的nano工具,这个挺好用的,编辑都挺方便。
命令:nano ~/.bashrc (bashrc 这个是环境配置的东西)。
4.3.2、把环境变量加上:
export NDK=/home/ffmpeg/android-ndk-r13(解压的路径)
export PATH=${PATH}:$NDK (不需要改)
这里写图片描述
^就是ctrl + 的意思,^V 就是ctrl + v 组合键,按到最后,把环境变量加上去
按 ctrl + o 保存,ctrl + x退出。
4.3.3、命令:source ~/.bashrc 刷新环境变量
4.3.4、检查 NDK是否安装成功 命令:ndk-build -v
这里写图片描述
如果出现:ERROR:Cannot find ‘make’ program.Please install make package or define the GNUMAKE variable to point to it. 这个是你系统没有安装 make,命令:apt-get install make 安装即可,至此 NDK安装完成。
5.1、把FFmpeg解压,命令:tar -vxf ffmpeg-3.3.2.tar.bz2 ,这个解压速度很快
这里写图片描述
5.2、现在开始配置FFmpeg,配置生成安卓的so库,进入ffmpeg目录,绿色的configure就是配置文件
这里写图片描述
5.2.1、编辑配置文件:使用ctrl + w 快速找到SLIBNAME_WITH_MAJOR
这里需要把

    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)'

至于为什么要改成这样,网上都说是为了生成android的so文件,不这样的话,会生成其他东西,这里改成这样就完事了,喜欢可以纠结。
这里写图片描述
改完,保存,然后退出就行。

到此,准备完成,最后一步,配置脚本,生成各种abi(x86,armeabi,mips…)

6.1、一种脚本只能成功一种类型的abi的,下面就是比较通用的armeabi脚本

#!/bin/bashexport TMPDIR=/home/ffmpeg/tmpdir #临时目录路径,编译文件的缓存目录NDK=/home/ffmpeg/android-ndk-r13 #ndk的路径SYSROOT=$NDK/platforms/android-14/arch-arm/ #编译最小兼容到的android api版本,我这个是兼容到api 14.TOOLCHAIN=/home/ffmpeg/android-ndk-r13/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64  #toolchains是工具链,我这里是编译arm肯定要找arm,如果x86就选x86的目录路径CPU=arm # 指定是arm指令集 下面的arch=arm也是这个意思PREFIX=/home/ffmpeg/output_arm #编译文件的输出目录ADDI_CFLAGS="-marm"function build_one{./configure \--prefix=$PREFIX \--enable-shared \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-ffserver \--disable-doc \--disable-symver \--enable-small \--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \--target-os=linux \--arch=arm \--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $ADDI_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAGmake cleanmakemake install}build_one

后面我将提供两个脚本 分别是armeabi 和 x86,同时也提供查考的脚本网址

6.2、脚本搞好就把他防盗ffmpeg目录下面:
这里写图片描述
脚本文件名字是build_android_arm.sh 和 build_android_x86.sh 此时是灰色的也就是没有执行权限,简单粗暴命令: chmod 777 build_android_arm.sh 和 chmod 777 build_android_x86.sh,加上全权限:
这里写图片描述

最最最最后一步: 运行脚本: ./build_android_arm.sh 生成arm的 ./build_android_x86.sh生成x86,生成过程挺长,我用了20多分钟,一次只能执行一个脚本,两个脚本,准备40分钟吧。。。

7:finish:

这里写图片描述
生成的文件不知道为何有软连接的,我也搞不懂,蓝色相当于window系统的快捷链接,不过也没影响,不要就是了,知道了可以留言。
这里写图片描述

8 上传文件要审核。。。 文件名字叫ffmpeg脚本.zip

其他脚本:https://github.com/RoyGuanyu/build-scripts-of-ffmpeg-x264-for-android-ndk

原创粉丝点击