搭建自己的ffmpeg的android移植开发环境
2014-10-31 10:27
225 查看
最近需要做些基于android的音视频方面的开发,比较幸运的是,网上有一位国外的开发者分享了ffmpeg移植到android froyo的例子:
https://github.com/havlenapetr/FFMpeg
https://github.com/havlenapetr/android_frameworks_base/tree/froyo
我想,可以基于他的例子先搭建好相关的开发调试环境,在自己的手机上把该例子运行起来,通过跟踪调试的方式大概了解ffmpeg的api及其相关的编解码流程。
于是,我开始着手搭建相应的android开发调试环境。
1)初步验证例子的“可编译性”
编译网上的代码,经常会遇到各种问题,但havlenapetr的这个例子挺不错的,整个例子可以直接导入eclipse中,没有任何错误。
即便是ndk部分,也可以顺利编译。
2)android系统的编译环境
该例子用到两个库文件:libjniaudio.so和libjnivideo.so,它们是ffmpeg和目标设备的android系统的适配层,是作者基于froyo版本编译出来的。要移植该例子,需要重新编译这两个动态库。所以,需要建立android系统的编译环境。
每个人做事情都只能基于自己所拥有的资源,我手上有两个android手机可以用来做调试,其中一个是android 4.0.3版本,另一个是android 2.3.4版本。我首先考虑编译一份android 4.0.3的代码。但无奈,好容易从网上找到并下载的的4.0.3版本的代码,编译出错。而且,后来我还看到一个帖子,该帖子也说到4.0.3版本的编译,也遇到和我一样的编译错误,作者说换了一份代码就好了。这让我认为,再去寻找这个编译错误的解决方法变得没有意义,很可能是源码本身就有问题。幸运的是,从网上找到了一份2.3.5的代码,它在我的机器上是可以编译通过的,我的手机是2.3.4版本,和2.3.5版本相差不大:
API等级10:Android 2.3.3-2.3.7 Gingerbread
换句话说,用2.3.5的编译系统编译出来的动态库在2.3.4的手机上应该是可行的。
3)动态库的编译
在前面提到的第二个链接中,havlenapetr提供了这两个动态库libjniaudio.so&libjnivideo.so对应的源代码,甚至连Android.mk文件都有,挺佩服老外的这种认真,严谨的态度和精神。
framework/base/native/
audio/jni/Android.mk
audiotrack.cpp
graphics/
include/android/audiotrack.h
bitmap.h
surface.h
video/jni/Android.mk
surface.cpp
把audio&video目录,以及audiotrack.h&surface.h头文件拷贝到编译环境的相同目录下,编译,可生成针对当前android系统版本的库文件。
把新生成的库文件拷贝到eclipse工程的jni/prebuilt目录下,替换原先的同名文件,至此,针对新的目标设备2.3.4版本的ffpmeg移植开发环境就算是搭建好了,往下,就可以在手机上调试这个例子了。
https://github.com/havlenapetr/FFMpeg
https://github.com/havlenapetr/android_frameworks_base/tree/froyo
我想,可以基于他的例子先搭建好相关的开发调试环境,在自己的手机上把该例子运行起来,通过跟踪调试的方式大概了解ffmpeg的api及其相关的编解码流程。
于是,我开始着手搭建相应的android开发调试环境。
1)初步验证例子的“可编译性”
编译网上的代码,经常会遇到各种问题,但havlenapetr的这个例子挺不错的,整个例子可以直接导入eclipse中,没有任何错误。
即便是ndk部分,也可以顺利编译。
2)android系统的编译环境
该例子用到两个库文件:libjniaudio.so和libjnivideo.so,它们是ffmpeg和目标设备的android系统的适配层,是作者基于froyo版本编译出来的。要移植该例子,需要重新编译这两个动态库。所以,需要建立android系统的编译环境。
每个人做事情都只能基于自己所拥有的资源,我手上有两个android手机可以用来做调试,其中一个是android 4.0.3版本,另一个是android 2.3.4版本。我首先考虑编译一份android 4.0.3的代码。但无奈,好容易从网上找到并下载的的4.0.3版本的代码,编译出错。而且,后来我还看到一个帖子,该帖子也说到4.0.3版本的编译,也遇到和我一样的编译错误,作者说换了一份代码就好了。这让我认为,再去寻找这个编译错误的解决方法变得没有意义,很可能是源码本身就有问题。幸运的是,从网上找到了一份2.3.5的代码,它在我的机器上是可以编译通过的,我的手机是2.3.4版本,和2.3.5版本相差不大:
API等级10:Android 2.3.3-2.3.7 Gingerbread
换句话说,用2.3.5的编译系统编译出来的动态库在2.3.4的手机上应该是可行的。
3)动态库的编译
在前面提到的第二个链接中,havlenapetr提供了这两个动态库libjniaudio.so&libjnivideo.so对应的源代码,甚至连Android.mk文件都有,挺佩服老外的这种认真,严谨的态度和精神。
framework/base/native/
audio/jni/Android.mk
audiotrack.cpp
graphics/
include/android/audiotrack.h
bitmap.h
surface.h
video/jni/Android.mk
surface.cpp
把audio&video目录,以及audiotrack.h&surface.h头文件拷贝到编译环境的相同目录下,编译,可生成针对当前android系统版本的库文件。
把新生成的库文件拷贝到eclipse工程的jni/prebuilt目录下,替换原先的同名文件,至此,针对新的目标设备2.3.4版本的ffpmeg移植开发环境就算是搭建好了,往下,就可以在手机上调试这个例子了。
相关文章推荐
- 深入浅出 - Android系统移植与平台开发(六)- 搭建基于Linux的Android开发环境
- Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解
- ARM11Mini6410 Android系统移植及 Android 开发环境搭建 笔记
- 深入浅出 - Android系统移植与平台开发(六)- 搭建基于Linux的Android开发环境
- 深入浅出 - Android系统移植与平台开发(六)- 搭建基于Linux的Android开发环境
- Android移植开发(1):源代码下载&环境搭建
- 自己动手搭建Android开发环境
- Android:开发环境搭建、移植
- 搭建自己的android 开发环境 (eclipse + ADT)
- 深入浅出 - Android系统移植与平台开发(四)- 搭建Linux编译环境
- 深入浅出 - Android系统移植与平台开发(四)- 搭建Linux编译环境
- Android 开发环境搭建
- Android 开发环境搭建
- 谷歌Android手机应用开发环境的搭建
- Android 开发环境搭建-JAVA SDK(Updated by 2011-03-02)
- 如何在Windows下搭建Android开发环境
- Android开发环境搭建
- Android开发环境搭建
- Windows平台下搭建Android原生C/C++开发环境(转)
- 如何搭建自己的开发环境