一,下载
1,下载FFMpeg eclispe工程
下载方式
1) git clone https://github.com/havlenapetr/FFMpeg.git
这是从官网上的下载的最新的工程,它存在两个问题:
A,导入工程不能编译.
原因: 没有android.jar(android jar包),需要在工程的根目录下添加(或从别的工程中Copy)两个文件:project.properties和proguard.cfg
B, 在android2.3播放时,图像不能正常显示。(放视频花屏)
原因:需要自己实现OnVideoSizeChangedListener接口
这位兄弟已实现并有源码:
http://blog.youkuaiyun.com/yarpee/article/details/6910877
主要原因是libjnivideo.so和libjniaudio.so 这两个so文件因为不同的版本或者修改过的framework是不一样的,
所以需要在android源码中 编译出自己的so文件。
2) 直接到我的资源库下载:
http://download.youkuaiyun.com/detail/hp_2008/5367745
此工程已解决以上两个问题。
二、编译JNI
1,获得FFMpeg源代码
1),可以到http://sourceforge.net/下载ffmpeg for android 包。
2),用havlenapetr工程的FFMpeg包
3), 用NDK编译 生成libffmpeg.so库
如何用NDK编译请参考我以前的文章:
http://blog.youkuaiyun.com/hp_2008/article/details/7378821
2,编译 libjniaudi.so libjnivideo.so
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
最后,这样就能在 out/target/product/generic/obj/lib/中找到libjniaudio.so libjnivideo.so,
将这两个so文件和havlenapetr-FFMpeg编译好的libffmpeg.so(默认生成libffmpeg_jni.so,修改Android.mk生成库名为libffmpeg.so。不管叫什么,只要和你工程中加载的名相同就行)
放到FFMpeg下libs/armeabi下就可以了。
三、FFMpeg框架结构介绍
http://blog.youkuaiyun.com/wangjianzhongfj/article/details/7622045