FFmpeg(3.3.2)移植Android平台

 

 

我的视频课程(基础):《(NDK)FFmpeg打造Android万能音频播放器》

我的视频课程(进阶):《(NDK)FFmpeg打造Android视频播放器》

我的视频课程(编码直播推流):《Android视频编码和直播推流》

我的视频课程(C++ OpenGL):《Android C++ OpenGL教程》

 

 

        Update:话不多说,先看一下后面集成SDL2后的音频播放器(SDK),可以用于FM类型的播放器使用哦~

 

Git地址:https://github.com/wanliyang1990/FFmpeg-Android

正文(视频教程):

随着直播行业的火热,移动端的各种直播(播放)软件多如牛毛,早年我也基于ijkplayer写了一个播放器(wlivetv:https://github.com/wanliyang1990/WliveTV),里面播放模块用的就是ijkplayer编译成Android平台的,自己只是给它添加了一层衣服而已,没有核心技术。时隔两年,随着自己接触的多了,也开始慢慢的接到到ffmpeg这个音视频元老级人物,经过一段时间的研究也还是有点成效,相信很多跟我一样的人想自己倒腾一下ffmpeg,无奈第一步编译都过不了关,就被它狠心的拒之门外了。因为开源让世界美好,so 我就来给你们把这拦路虎牵一边去散步了,留下敞开的大门,任由大家驰骋。说到ffmpeg,就要提到已经离世的雷神了(博客:http://blog.csdn.net/leixiaohua1020),他的博客介绍了很多ffmpeg的相关知识,虽然大多数是windows平台的,但对于我们了解怎么使用还是很有帮助的,感谢雷神,愿天堂没有代码!

        ffmpeg的一个好搭档就是SDL了,Android下编译SDL可见我的另一篇博客:Android编译SDL2和demo展示(2.0.5) ,SDL可用于ffmpeg播放音频和显示视频,里面对线程的处理挺方便的,后面我会写一系列ffmpeg和SDL的博客,现在还在研究阶段ing。好了,开始我们今天的ffmpeg入门旅程吧。

一:这里我用的是Windows+Vm+ubuntu来编译的ffmpeg,其中Windows上面安装vm,在vm中安装ubuntu以及xshell,xftp我就不介绍了,这里当成大家的基本功了(注:Ubuntu中需要安装ssh服务才能连接xshell,安装命令:sudo apt-get install openssh-server)。

二:下载现在最想版本ffmpeg(3.3.2)到本地:http://ffmpeg.org/download.html#releases

创建虚拟机安装ubuntu系统,然后启动我们的ubuntu系统(我的版本是17.04)

系统启动就可以了,然后用xshell连接到系统中,后面的操作都在在xshell中完成的(附:刚开始搭建xshell连接服务时,还是要进入系统安装相应的软件,百度都能解决,我就是这样的),登录系统并改成root用户:

三:配置ndk环境

下载ndk10e(下载:https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip),然后用xftp上传到ubuntu系统中

在目录:/usr/dev/ndk(根据自己喜好来)中创建ndk目录,并上传下载好的NDK到此目录下,用命令解压:unzip xxx.zip,解压后如下:

xshell效果图:

xftp效果图:

然后配置NDK环境

用命令:

vim ~/.bashrc    

打开环境变量配置文件

输入:

#ndk
export NDK_HOME=/usr/dev/ndk/android-ndk-r10e
export PATH=$NDK_HOME:$PATH

输入完后,刷新系统变量:

source ~/.bashrc

输入

ndk-build

检查是否成功:

这样NDK就配置成功了,可以开始ffmpeg的编译了(以上部分对shell不熟悉的,也可以直接在ubuntu用户界面里面设置,只要能配置成功就可以了)。

三:

1):在dev目录下创建ffmpeg目录:mkdir ffmpeg,并上传下载好的ffmpeg到ffmpeg目录下:

 

2):执行命令解压ffmpeg:

tar -zxvf ffmpeg-3.3.2.tar.gz

得到解压后的ffmpeg-3.3.2,因为会编译生成许多文件,所以我们这里给ffmpeg-3.3-2设置权限:

chmod -R 777 ffmpeg-3.3.2

3):然后进入ffmpeg-3.3.2中:

4):然后更改文件configure里面的第3305行内容:

 

#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结尾的,因为Android里面只认识.so结尾的库

 

 

 

可以把configure文件导出到本地计算机上用编辑器来更改,我这里就是。

 

5):给configure赋予可执行权限

chmod -u+x configure 或者直接 chmod 777 configure

然后执行configure来检查系统生成编译所需的配置文件xxxx.h,xxxx.mk等文件

./configure

提示我们要用屏蔽yasm才能执行,所以加上参数后的编译命令是:

./configure --disable-yasm

如图:

表明系统检查配置已经完成,接下来就是编写编译脚本了:

6)编译脚本build_android.sh

 

#!/bin/bash
make clean
export NDK=/usr/dev/ndk/android-ndk-r10e
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 \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--enable-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

其中NDK目录替换为自己的NDK目录就行,这里面把全部功能都编译了的,--disable-xxx是不要某功能,--enable-xxx是需要某功能然后cpu平台之一arm平台的(注意:里面反斜杠 \ 后面不能后空格等字符,不然也会导致编译不成功)后面我会把编译脚本和demo上传到GitHub上面,可以去下载来更改,最保险。

 

把编写好的脚本build_android.sh上传到ffmpeg3.3.2根目录下:

7、然后赋予build_android.sh的可执行权限

chmod 777 android_build.sh

四、编译ffmpeg,执行命令

./build_android.sh

这个过程大概二十分钟左右,可以稍微休息一下了,没有咖啡,喝杯白开水吧,哈哈:

经过漫长的等待,喝了几杯白开水了,终于编译好了:

在ffmpeg3.3.2目录中生成了android目录

最后通过xftp把android文件夹导出到本地计算机目录下:

至此ffmpeg编译成android平台完成,博客内容有点多了,例子将在下一篇博客里面介绍。

先上一张例子运行后的图片,查看FFmpeg里的编解码器:

编译脚本和Demo(eclipse):GitHub地址:https://github.com/wanliyang1990/FFmpeg-Android

 

 


 

 

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ywl5320

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值