标签(空格分隔): FFMPEG
最近在研究Android视频播放功能,网上有很多关于视频播放解码的库,但是作为程序员的我,还是希望能从源头出发,学习FFMPGE自然是势在必行了。
网上有关FFMPGE学习的文章有很多,但是对于初学者而言,看的时候似乎总有一点不知所以然感觉,本人也是其中一个。再此,作为一个初学者,我们需要按着怎样的步骤来学习FFPEG呢?本系列文章就来一起记录一下,初学者探索FFMPEG的历程,一点一滴的走向通往大神之路。
本片文章,我的计划是这样的,
- 编译出
ffmpeg
可以为Android使用动态链接库- Android studio建立jni工程使用动态链接库
- 使用动态链接库实现一个简单的视频播放
在做上面的功能的时候,作为初学者,我们需要有的基础知识是:linux基本功,C语言的基本功,JNI的基本功,Android的基本功,我相信,本篇文章的人,这些基本功,大多数都已经具备了。
在完成上面的功能的时候,如果你从未接触过ffmeg,或者对linux不熟悉,也不同担心,你完全可以不求甚解的按着我的步骤一步一步的进行下去,我们的目的是先把效果实现,然后在对每一个功能过程逐步展开,到那时,你就会发现自己的不足,在恶补也不迟,正如我们学一门语言的时候,总要先搞一个hello world
,这案例就是我们的hello wrold
.
好了闲话不多扯了,先完成第一个
准备材料:
- Ubuntu ,我这里用的是16.04
- VMware 12.0,如果你的电脑装的就是Ubuntu这个就可以不用了,这里我使用的是虚拟机安装的。
- NDK linux 版本,这里我用的是ndk-r13;
- 下载ffmpeg ,这里我下载的是最新的版本,你根据自己的选择就行了
有了以上的材料,我们的工作就是,在Ubuntu上配置NDK,至于如何配置呢?很简单。打开终端输入一下命令
sudo gedit /etc/profile
然后在文件中配置:
export NDK_HOME=/home/sivin/programs/android-ndk-r13 //这里替换成你的ndk存放路径
export PATH=$NDK_HOME=:$PATH
下载ffmpeg
,这个我们可以直接在搜索引擎上搜索ffmpeg
,进入官网里面提供了很多版本的下载,这里我们使用的是linux
下git
的方式,当然你也可以下载压缩包,然后解压也行,个人喜好。
修改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)'
下面的工作就是编译ffmpeg
了,我们在ffmepg
的根目录下,新建build_android.sh
然后在文件中写入:
#!/bin/bash
make clean
export NDK=你的NDK路径
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--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
make install
然后执行这个文件
./build_android.sh
然后静静等待编译就好了,
编译完成之后,我们会发现,这个目录下多了一个名为android
的目录,里面存放的就是我们想要的动态链接库和头文件。