Android Multimedia 相关

本文详细介绍了如何在安卓系统中添加自定义的编解码器,包括创建OMX组件和插件的过程。同时,深入探讨了surfaceflinger的工作原理及bufferqueue机制,还讲解了JNI在Java与本地代码交互中的作用。

_________________________________________________________________________________________

添加自己的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点击打开链接
下载方式:https://pan.quark.cn/s/b4d8292ba69a 在构建食品品牌的市场整合营销推广方案时,我们必须首先深入探究品牌的由来、顾客的感知以及市场环境。 此案例聚焦于一款名为“某饼干产品”的食品,该产品自1998年进入河南市场以来,经历了销售业绩的波动。 1999至2000年期间,其销售额取得了明显的上升,然而到了2001年则出现了下滑。 在先前的宣传活动中,品牌主要借助大型互动活动如ROAD SHOW来吸引顾客,但收效甚微,这揭示了宣传信息与顾客实际认同感之间的偏差。 通过市场环境剖析,我们了解到消费者对“3+2”苏打夹心饼干的印象是美味、时尚且充满活力,但同时亦存在口感腻、价位偏高、饼身坚硬等负面评价。 实际上,该产品可以塑造为兼具美味、深度与创新性的休闲食品,适宜在多种情境下分享。 这暗示着品牌需更精确地传递产品特性,同时消解消费者的顾虑。 在策略制定上,我们可考虑将新产品与原有的3+2苏打夹心进行协同推广。 这种策略的长处在于能够借助既有产品的声誉和市场占有率,同时通过新产品的加入,刷新品牌形象,吸引更多元化的消费群体。 然而,这也可能引发一些难题,例如如何合理分配新旧产品间的资源,以及如何保障新产品的独特性和吸引力不被既有产品所掩盖。 为了提升推广成效,品牌可以实施以下举措:1. **定位修正**:基于消费者反馈,重新确立产品定位,突出其美味、创新与共享的特性,减少消费者感知的缺陷。 2. **创新宣传**:宣传信息应与消费者的实际体验相契合,运用更具魅力的创意手段,例如叙事式营销,让消费者体会到产品带来的愉悦和情感共鸣。 3. **渠道选择**:在目标消费者常去的场所开展活动,例如商业中心、影院或在线平台,以提高知名度和参与度。 4. **媒体联...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值