havlenapetr-FFMpeg移植到android2.3

之前编译过havlenapetr-FFMpeg,参考网上的一些帖子编译成功生成libffmpeg_jni.so,并使用havlenapetr提供的libjniaudio.so和libjnivideo.so,在虚拟机下播放正常,在真机下出现花屏问题,参考http://blog.csdn.net/yarpee/article/details/6910877,做相应更改后正常播放,但只可以在android2.2下运行。主要原因是libjnivideo.so和libjniaudio.so 这两个so文件因为不同的版本或者修改过的framework是不一样的,所以需要在android源码中 编译出自己的so文件。
 
在android2.3下编译生成libjnivideo.so和libjniaudio.so
参考  http://blog.csdn.net/cibon/article/details/7398795
我的环境是windows下vmware虚拟机centos系统,分配硬盘空间20G以上(编译之后好像有16G,要提前留出足够的空间)。(Google官方说明android源码的编译只能在macOS和linux下进行,所以说cygwin是无能为力了)
 
准备工作:
1). android2.3源码(可以通过git和repo下载到Google官方提供的android源码,可能需要很长时间,根据网速而定)参考http://source.android.com/source/downloading.html
 
2). havlenapetr在github上的另一个开源项目,修改过的frameworks/base/native/  https://github.com/havlenapetr/android_frameworks_base
现在的这个项目native目录下已经没有我们需要的东西了,我用的是git下载的代码,只要git checkout froyo,回滚到之前的版本就会看到了。
 
2.3下编译源码的步骤
1. 将android_frameworks_base/native文件夹下的 video和audio文件夹 复制到android源码/frameworks/base/native/文件夹下。
 
2. 将android_frameworks_base/native/include/android/surface.h 和 android_frameworks_base/native/include/android/audiotrack.h  复制到android源码/frameworks/base/native/include/android/文件夹下。
 
3.将frameworks/base/native/video/jni/surface.cpp中32行mSurface改为mNativeSurface.
 
4. 在android源码文件夹下,
source build/envsetup.sh
lunch 1
make
 
在这个过程中可能会有些问题,我遇到的有以下,其他问题可以上网搜索。
1). 我的android源码是从Windows下复制到虚拟机上的,make时可能出现权限不够的问题。
错误:
/bin/bash: prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gcc: Permission denied
 

/bin/bash: build/core/find-jdk-tools-jar.sh: Permission denied

 
解决方法:chmod a+x给这几个文件夹权限 或 直接 chmod 777 * -R /android源码文件夹
 
2). 
错误:
sh: gperf: not found

calling gperf failed: 32512 at ./makeprop.pl line 96.
make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h] Error 25
make: *** Deleting file `out/target/product/generic/obj/SHARED_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h'
 
解决方法:
没有找到gperf,通过sudo yum install gperf 安装gperf,(红帽和ubuntu 用 sudo apt-get install gperf)
安装后可以继续编译。
 
3).后面还遇到些问题,具体忘了,网上都有解答,最后我是直接make -i 编译的。
 
 
最后,这样就能在 out/target/product/generic/obj/lib/中找到libjniaudio.so libjnivideo.so,将这两个so文件和havlenapetr-FFMpeg编译好的libffmpeg_jni.so放到havlenapetr-FFMpeg下libs/armeabi下就可以了。
 
havlenapetr-FFMpeg中的java代码有些错误,FFMpegMovieViewAndroid.java 中可能有错误,按照错误指示添加空实现就可以。项目可能有引入android包的错误,在项目properties中Java Build Path中删除多余的Libraries,留下你想要的android版本就可以。
 
posted @ 2012-04-16 16:02  saber酱  阅读(3042)  评论(0编辑  收藏  举报