_________________________________________________________________________________________
添加自己的codec
1. 根据规范创建OMX IL component. 相关头文件路径:frameworks/native/include/media/OpenMAX/OMX_Component.h 2.根据规范创建OMX plugin. 相关头文件路径:frameworks/native/include/media/hardware/OMXPluginBase.h plugin 用于将 component 和 android stagefright service 相关联。
将自定义的codec信息告知app framework
stagefright service 会parse system/etc/media_codecs.xml 和 system/etc/media_profiles.xml 文件生成类 android.media.MediaCodecList 和 android.media.CamcorderProfile,通过该种方式向APP framework 提供相关信息。
_________________________________________________________________________________________
surfaceflinger 是安卓的一个系统服务。将所有的应用的surface和系统的surface排列组合成一个最终用于显示的surface。 system surfaces 包括状态条、浏览条、屏幕翻转时系统产生的surface。 surfaceflinger 的路径:frameworks/native/services/surfaceflinger surfaceflinger 会从activitymanger 接收到 activity info, 从 windows manger 接收到 visiblity Z-order等相关信息。 bufferqueue 的路径: frameworks/native/include/gui/BufferQueue.h。这是android中用来传递GraphicBuffer 的机制。 bufferqueue 的slot大小限制在[2, 32], bufferqueue提供了两个binder接口:IGraphicBufferProducer, IGraphicBufferConsumer。
Buffer Queue 状态变换图
_________________________________________________________________________________________
JNI
java native method 转成C函数之后会额外得到两参数: 1. JNI Interface (environment) pointer JNIEnv * env 2. Object or class parameter instance methods: jobject thisObj class methods: jclass theClass jni.h 中定义了很多的函数用来支持java data type, objects, classes在C C++中的使用。 JNIEnv * env这个参数就是用来提供对jni中提供的方法的访问。 例如可以使用C C++语言来反序JAVA中的String. 通过使用native method 可以在C C++ 语言中修改JAVA类中成员变量和类变量,protected private修辞的也可以被修改。 jfieldID (JNICALL *GetFieldID) (JNIEnv *env, jclass clazz, const char *name, const char *sig); jfieldID (JNICALL *GetStaticFieldID) (JNIEnv *env, jclass clazz, const char *name, const char *sig); 修改变量的值需要类的信息、变量名称、类型名称。变量名称决定offset、类型名称决定size。 例如可以使用C C++语言来修改JAVA中类的private成员变量和类变量. 通过native method 可以在C C++中调用JAVA类的成员函数,包括protected private修辞的函数。
_________________________________________________________________________________________
参考资料
https://source.android.com/devices/media.html点击打开链接 https://quandarypeak.com/2013/08/androids-stagefright-media-player-architecture/点击打开链接 http://stackoverflow.com/questions/15356629/how-to-create-a-stagefright-plugin点击打开链接 https://source.android.com/devices/graphics/点击打开链接 http://www.slideshare.net/BinChen3/android-graphic-system-surface-flinger-patternsperspective-external-version点击打开链接 http://www.slideshare.net/jserv/design-and-concepts-of-android-graphics?related=1点击打开链接 http://bigflake.com/mediacodec/#overview点击打开链接 http://stackoverflow.com/questions/2550847/streaming-video-from-android-camera-to-server点击打开链接