- 浏览: 1591180 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (289)
- java 语法基础 (51)
- spring (8)
- mvc struct /Ant --build.xml (8)
- SOA (0)
- oracle 9i/10g (23)
- sql server 2000-2005 (3)
- 数据库基础知识 (6)
- 设计模式与软件架构 (10)
- Hibernate 持久化 (9)
- J2SE/J2EE/J2ME/AJAX 技术 (8)
- JSF 技术 (3)
- JAVA 图形化 (0)
- JMS (40)
- Eclipse 3.2 IDE 开发技巧 (13)
- 项目处理方法集合 (2)
- html/jsp/javascript (2)
- Unix/Linux (9)
- j2me/ARM/windriver/嵌入式 (4)
- 电信科学 (8)
- jsp (1)
- c/c++ (1)
- LZW压缩算法(java) (2)
- Android (77)
- 版本管理git/svn (2)
最新评论
-
huihai:
有demo吗?
NamingStrategy实现动态表名映射 -
cangbaotu:
推荐给大家一些有用的爬虫源码:https://github.c ...
网络爬虫(源代码参考) -
tuspark:
除了.classpath文件以外,.project文件也应该了 ...
Eclipse .classpath文件浅谈 -
tuspark:
造成eclipse自动关闭的原因有很多,这里有很多介绍:ecl ...
eclipse 自动关闭 解决方案 -
DEMONU:
网上都是这些,这种文章。。。
ActiveMQ中的消息持久性
Codec集成和video overlay是现在FSL对android多媒体修改的所有东西,codec
library以.so的形式放在prebuilt目录下,没有源文件。而video
overlay的实现主要是使用了FSL的ipu底层库,将视频数据直接发送到硬件,由硬件进行merge。
A、Codec 集成
1、codec 集成方法
首先声明一下俺说的codec集成是指将codec集成到opencore框架中,网上看有人直接放个库然后通过jni调用,这种的方式有点扯蛋,
得自己实现控制,同步,输出等一堆东西,完全是杀鸡取卵,我们就不讨论了。要把一个裸的codec放在opencore框架内有三种方式:
a、实现一个openmax component 注册在android已存在的omx core上,或者提供自己的omx core
b、实现一个封装了codec的PVMF标准的 mio(media input/output)
c、 实现一个封装codec的PVMF的Node
三种方式都涉及到opencore一堆BT的术语,首先我们得来消化下这几个术语,不然很难有个直观的了解。因为opencore实在庞大得超出我的能
力之外,所以俺只是从整体结构上看了下骨架,我是这么理解的:opencore实际包含两部分:一部分就是command管道,一个就是数据管
道;command就是我们的player/author engine, 而数据的流动就是在pvmf
中进行。PVMF下面挂载的的基本组件就是Node,就是实现一个具体功能的单元,比如说file parse, codec,
sink等等。前面提到的MIO实际上也是一个特殊的Node,它的功能就是media input/output 。
engline接受上层的command,控制PVMF下的Node进行工作,而Pvplayer/author是基于engline实现的一个提供给android使用的SDK,这就是Opencore的工作原理了。
在这里只说第一种方式,就是omx封装的方式,FSL也是采用的这种方式的提供的 HW codec
library,并且提供了自己的omx
core。换句话就是说FSL实现了整个/external/opencore/codecs_v2这个目录的内容,虽然这个闷骚的公司只是提供了几
个.so 。我们要想实现一个完整的omx封装的codec移植得准备下面的知识:
/external/opencore/doc/openmax_call_sequences.pdf
/external/opencore/doc/omx_core_integration_guide.pdf
http://omxil.sourceforge.net/docs/modules.html
除了这些spec和guide之外,现成的例子就是android已经封装好的omx
core了,也就codecs_v2/omx里面的内容。如果有裸codec,封装成omx从技术讲应该是不难的,基本过程就是先封装成omx,然后再封
装成pv_omx,不过opemax IL层的spec很复杂,要做的工作可能比较多。
编译好的omx library
我们可以按照FSL的方式放在prebuilt目录下面,并提供相应的配置文件,比如fslomx.cfg,在这里说一下我们封装好的library是如
何被调用的。所有编译好的library最后都会被放在/system/lib目录,android会在/etc读取所有的.cfg文件,然后根据
UUID来判断是否为omx封装好的library,如果UUID匹配的话它就会到lib目录中载入相应的library。这里涉及到一个重要的文件
/opencore/external/codecs_v2/omx/omx_mastercore/src
/pv_omxmastercore.cpp。由这个文件来负责当存在多个omx core的时候的处理。
omxmastercore.cpp管理一个优先权的问题,比如说当存在多个omx core,而且每个omx
core都具有一个mp3 decode component
时我们应该使用哪一个component进行解码?omxmastercore对这个选择的处理过程是这样的:
a、根据.cfg的文件名的字母排列顺序载入.cfg文件,也就是说fslomx.cfg会比pvomx.cfg先载入
b、根据UUID一个一个判断是否为omx封装的library,如果是的话就载入相应的library,并对omx core下所有的component进行注册
[换句话说就是配置文件名字母靠前的会被先载入,相应component注册也会被注册在前面]
c、omxmastercore根据应用程序要求的role(比如mp3)及其要求的配置去注册的component中寻找满足要求的component,一旦找到就选定进行解码
因此如果你想使用自己的codec来进行解码,必须使你的配置文件名排在前面,或者如果不需要其他的omx
core的话干脆删除它的配置文件。我曾经做过一个实验,去掉fsl的codec ,
51播视频就会直接卡死,如果去掉android自带的codec视频和音频都无法播放,因为fsl现在只提供了视频的硬解码,当应用程序找不到音频的解
码的时候就会直接报错。从侧面来说fsl的 video
codec还是很牛B的,它调用了/external/fsl_imx_lib/vpu中的接口。
因此总的来说实现codec的移植应该是不难的,将来还可以使用偷懒的方法,也就是说只实现相应的component,把它注册到android已有的
omx
core中,这个注册是在/external/opencore/codecs_v2/omx/omx_common/src
/pv_omxregistry.cpp中实现的。
除了omx封装外其他两种方式我没仔细看过,Node方式PV还没提供文档,而mio集成方式在doc里面有它的开发文档。
B、Video Overlay
Android原来是video
playback的输出是使用的Isurface接口,也就是说它是用surfaceflinger来实现window的合并的,SW
merge必然导致播放的效率低下,而且资源消耗很高。FSL在这里实现了硬件overlay的方式来播放视频,就是使用ipu进行硬件的merge,说
穿了就是把vpu解码后的数据直接送到ipu的overlay buffer。
这里涉及到两个底层的lib,一个就是libipu.so,还一个是libvpu.so,vpu负责解码,而ipu负责显示。在这里要改变的主要是两个地方,首先要获得vpu解码后的数据,这里主要涉及到下面目录中的文件:
/external/opencore/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_node.h
/external/opencore/nodes/pvomxbasedecnode/include/pvmf_omx_basedec_node.cpp
/external/opencore/nodes/pvomxvideodecnode/src/pvmf_omx_
然后就是将数据送到overlay buffer,这部分修改的内容实际上就是实现了ipu 的一个sequence,这个sequence的内容可以参照:
/external/fsl_imx_lib/ipu/mxc_ipu_hl_lib.h
具体的修改内容在下面几个文件:
/android/android_surface_output.cpp
/android/android_surface_outpur.h
总结一下多媒体已经完成的工作:
1、codec基本到位了,几乎什么格式都支持了,除了指定格式的一些特殊版本之外(比如说有些版本的avc可能无法正常播放)
2、视频解码的硬件加速由fsl实现了,调用vpu接口
3、视频播放的硬件加速实现了,调用ipu接口
将来可能需要进行的工作:
1、文件格式的支持,现在文件格式的支持还比较少,将来可能需要加入文件格式的支持比如.avi,mkv等等,如果将来android加入flash的话,还有对flash格式的支持。
2、对网络数据包的支持如http, rtsp,以及对流媒体数据.rm等格式的支持可能是将来需要工作的内容,
发表评论
-
APN(default、mms、supl、dun、hipri接入点类型的区别)
2013-10-10 19:31 45867设置APN上网时,大家可能经常遇到这个问题:为什么有时要填写 ... -
AMR音频编码器概述及文件格式分析
2013-10-10 19:29 3958全称Adaptive Multi-Rate,自适应多速率编码 ... -
pad 强制加载 Hdpi资源 (2.3 dpi < 240)
2012-07-16 16:47 0pad 强制加载 Hdpi资源 (2.3 dpi < ... -
android 设计模式-享元模式
2011-12-16 23:01 2193享元(FlyWeight)模式,原意是“轻量级”模式,它用来解 ... -
statusbar 2.3
2011-11-08 16:04 1284以前我的文章分析过Stat ... -
android 输入法默认设置
2011-07-07 14:00 7196设置默认输入法 在 frameworks\base\co ... -
Android Media Scanner Process
2011-06-06 22:58 3408下面是系统图 Medi ... -
handler与多线程消息处理
2011-06-04 13:42 8282在Android下面也有多线程的概念,在C/C++中,子线程可 ... -
android light
2011-03-24 16:15 3414背光设置是在:设置->声音和显示->亮度,通过进度 ... -
PowerManagerService sensor
2011-03-22 20:06 2673默认分类 2010-12-24 14:34:55 阅读144 ... -
android 单例
2011-02-15 09:26 42291. Framework层的代码: A ... -
Android 开发之 Services 服务
2010-11-02 18:21 4244Service Service ... -
深入学习android之AlarmManager
2010-11-01 16:50 34768对应AlarmManage有一个Alarm ... -
eclipse+android+ddms+adt
2010-09-14 10:30 8460用eclipse + ADT作为android ... -
Menus
2010-09-05 19:01 1791Android Menus 文章分类:移动开发 1.O ... -
Android开机自启动应用开发
2010-08-28 10:07 4594目前需要开发一个开机自启动的GTD应用程序来提醒用户的 ... -
Android2.1_Launcher学习笔记
2010-08-11 13:40 3878文章分类:移动开发 好么,2.0的源码没看几天,2.1的 ... -
Browsing Android Source in Eclipse
2010-08-09 16:00 3437Google’s Android SDK includes ... -
android 编译
2010-08-07 16:31 25321 我的系统是Ubuntu 8.04 * 2 系统上 ... -
Ubuntu linux 右键添加"以管理员身份打开","在终端中打开"
2010-08-02 15:04 4661Ubuntu linux 右键添加"以管理员身份打开 ...
相关推荐
Happytime Video Overlay Filter 是一个专门为VC开发人员设计的DMEO,支持输入的视频格式如MPG ,AVI或MPEG,支持添加图片,文字或日期等,安装程序附示例代码及DEMO,欢迎下载研究。
Voice overlay helps you turn your user's voice into text, providing a polished UX while handling for you the necessary permission. Demo You can clone this repo, then run the Demo ...
综合这些信息,这个压缩包提供了一个关于DirectShow视频叠加技术和hypervideo概念的深度学习资源,包括了理论讲解、代码示例以及可能的Web服务集成。对于想要在多媒体处理领域深化技能的开发者,尤其是那些专注于...
这些网页可能讲解了如何配置和使用DirectShow的滤镜图,以及如何创建和管理Video overlay。 2. logo1.jpg 和 di2001.jpg:这些可能是示例图片,可能用于演示如何在实际应用中集成视频叠加效果,或者作为DirectShow的...
1. **动态显示**:videojs-overlay插件允许在视频播放的任意时刻显示和隐藏覆盖层,可以用于呈现广告、提示信息或者互动元素。 2. **自定义内容**:覆盖层可以包含HTML元素,因此开发者可以自由设计想要展示的任何...
【标题】:“百度地图Android SDK拖拽...总的来说,实现百度地图Android SDK中的拖拽Overlay Item涉及到地图交互、事件处理和自定义视图的知识。通过学习和实践,开发者可以为用户提供更直观、更具交互性的地图体验。
其中,“主机Overlay”和“网络Overlay”是两种重要的网络部署方式,它们能够更好地支持虚拟化环境下的资源调度与隔离需求。本篇将深入探讨这两种Overlay技术的特点、工作原理及应用场景。 #### 二、主机Overlay *...
Android的视频输入输出系统是一个复杂且强大的架构,通过Camera和Overlay系统分别处理视频的输入和输出。这两个系统都依赖于硬件抽象层(HAL),以提供高效且跨平台的解决方案。HAL的存在不仅提高了系统的可移植性,...
`Overlay`是Android SDK中用于在地图上绘制图形或文本的对象,它允许我们在地图上添加自定义的图标或标注。 首先,我们需要在项目中引入Google Maps API。在`build.gradle`文件中添加依赖: ```groovy ...
### Android的Video 输入输出系统详解 #### 第一部分:Video输入输出系统的综述 在深入探讨Android的Video输入输出系统之前,我们首先需要了解其基本架构。Android系统中的视频输入输出功能有着独特的设计思路,...
以上就是实现Android高德地图自定义点聚合Marker图片以及Overlay点击选中功能的主要步骤和技术要点。在实际应用中,可能还需要考虑性能优化,比如在数据量大时使用异步处理,以及如何优雅地处理用户交互和视觉反馈。...
7. **持续集成和发布**: 为了保持项目整洁和易于维护,可以将这个集成的CAS服务器设置为持续集成的一部分,每次更改后自动构建和测试,确保一切正常。 总的来说,`cas-overlay-template-5.3.zip`提供了一个方便的...
综上所述,"Overlay Menu Android.zip"是一个关于如何在Android应用中实现Overlay Menu的实例,包含了实现该功能所需的基本技术点和资源。如果你打算深入研究,你需要熟悉并掌握上述提到的Android开发知识,并根据...
在Android系统中,"device overlay"是一个重要的概念,它允许开发者和制造商自定义设备的用户界面(UI)和系统组件,以适应特定设备的需求或提供独特的用户体验。在本例中,"a870device的overlay参考"是针对泛泰( ...
开发者可能通过这个项目来学习和实践高德地图API的使用,以及Android平台上照相功能的集成。 总结来说,这个项目涵盖了以下几个关键知识点: 1. 高德地图API的Overlay使用,包括自定义绘制和点击事件处理。 2. ...
DICOM图像,overlay层,包含只有一层overlay,两侧overlay,overlay加原始图像三种DICOM图像。 不少DICOM开源框架对这种图像支持不够,显示有问题。便于测试系统对带有overlay图像的显示是否正确
Overlay技术是一种在计算机网络和存储系统中广泛使用的技术,特别是在虚拟化环境中,例如容器化平台(如Docker和Kubernetes)和分布式文件系统。下面将详细介绍overlay的相关知识。 1. **Overlay Network**:...
本文讲述了如何解决 Docker 中的 overlay 和 overlay2 文件占用磁盘太大的问题,并提供了相应的解决方案。同时,文章也附带了 Docker 配置 overlay 存储驱动的前提条件和步骤。 一、 Docker 中的 overlay 和 ...
android.frameworkres.overlay_12.apk