分享

转:Android上ffmpeg移植(2)

 lifei_szdz 2013-05-21
作者: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下面显示接口以及音视频同步的问题。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多