转:Android上ffmpeg移植(2)

作者:jl
首先,Android上面使用的是bionic的C标准库,所以即使你是使用的自带toolchain下面的eabi的arm编译器,其编译出来的 so文件存在调用上面的问题,同样的程序在一般的linux平台下面就可以使用,但是同样的编译环境在Android下面就不能运行,觉得很是奇怪。

没办法,只有自己搞清楚Android.mk这种非标准的makefile的语法,然后再去修改ffmpeg的自带的 makefile,ffmpeg的makefile的结构并不是很难,目录下面有libavutil libavcodec libavformat这三个主要的库,其中avcodec是依赖util,尔format是依赖于util和codec的,所以最先最好先编译 util。

在libavutil建立一个Android.mk的文件,下面我们开始写Android.mk,在写之前,说一下ffmpeg自带的 makefile的框架,ffmpeg在config命令之后会有一个config.h和一个config.mak,这两个文件加起来估计有 600-700个宏,来表述你的代码的各个方面,其中关于编译器、链接库、头文件、版本等等相关的就可以不要,config.mak把开始的一些行去掉,后面的基本上都是某些CONFIG _XX_DECODER等等的,这些根据实际情况来取舍,注意这里有几个宏和是和Android编译环境是相冲突的,注意改动对应地方的源码,基本上这个 config里面的东西不需要大改,在Android.mk里面直接include就行了,因为util比较简单,所以makefile、

也比较简单,一般标准的都需要调用subdir.mak这个东东,这个其实就是真正的编译,但是我们在Android.mk下,这个东西可以不要,直接把对应的源文件引入,标准的makefile是指定.o,我们这里是直接指定.c文件,之于源码的几个地方有Size_t这种错误,就需要在<string.h>前面加上<stdlib.h>,这个可能是因为使用的C库不同的原因。这个都是很简单的,修改几个宏,很快就可以编译通过。

下面就是libavcodec,这个基本上和上面的差不多,但是要注意我们这里是arm平台,把arm平台的几个汇编加进去,不要硬件加速,去掉 x11相关的一个解码库,然后就是有些格式想mkv等需要zlib 和bzlib库的,我郁闷了半天,后来发现,在external下面已经有这两个库,直接加入头文件目录,和相应的链接库,这个也很好编译通过,注意并不是这个目录下面所有的.c文件都需要编译的,有些事不需要的,具体参见原来的makefile。

最后一个format相对简单了,基本和上面差不多。

编译完全通过之后,修改libmediaplayservice里面的代码,写一个简单的FfmpegPlayer,然后上层使用标准的MediaPlayer.java调用打开一个ape文件,播放完全正常,音质很棒,无损嘛。在模拟器上运行一点不卡。

下一步,把视频也添加进去,这个可能有点麻烦,因为还不是很清楚Android下面显示接口以及音视频同步的问题。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

C_see

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

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

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

打赏作者

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

抵扣说明:

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

余额充值