Android Multimedia技术实现分析 --- 开局篇

lxzhg 2010-09-19 06:39:16
http://blog.csdn.net/lxzhg/archive/2010/09/19/5895244.aspx

已在Android项目上摸爬滚打一年多,带着对庞大代码的恐惧,慢慢深入其中,终在multimedia实现上有所领悟,窥得一二,为防日久生忘,分篇逐一总结。

鉴于Android架构已为人所众知,这里不再赘述,所涉及的模块也不足其一二。multimedia相关的技术无非几大块,第一当然是UI系统,其他有media player和recorder,Android已提供了Java层的API和相关例子实现。且不论Java开发者用起来是否满意,但GUI及Gallery/3D的实现已让人体会到其强大可靠。

支撑Java应用的中间模块混杂在一起,被称之为framework,主要由C/C++实现,这是整个Android最博大精深之处,犹如四通八达的高速公路网络,向上用JNI连接Java应用,向下连接着内核驱动,横跨UI, Media, Database, Wifi等众多模块。若无明确的路线图,以及巨大的定力,初涉其中犹走迷宫,往往徘徊其间不得返。

走出Framework的迷宫,再放眼望去,就是眼花缭乱的组件世界,此处仅仅讨论multimedia,谈及Android的架构系统,最庞大之处莫过于Media和UI。对应的模块主要有Opencore,GLES,Skia以及万能的Surface系统等,后面将分若干篇幅逐一介绍。

如果侥幸走出framework,仍尚有余力,不妨去研究些更巨挑战性的东西,与multimedia相关的,譬如音频视编解码,2D/3D图像处理,如果仍觉得不过瘾,还有VPU和GPU硬件加速等着你,足以让你乐而忘返。

再假如仍不能止步于multimedia带来的魅力,那就需要做好心理准备,这里不过是冰山一角,往大处看还有dalvik虚拟机,linux内核及不计其数的driver,足够花一百年的时间去体会。

我认为我已没有这个机会:)
...全文
713 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
vclongking 2010-09-26
  • 打赏
  • 举报
回复
前段时间自己看了一下Opencore , 郁闷 ,把我弄猥琐了。
vclongking 2010-09-26
  • 打赏
  • 举报
回复
说的挺好的啊 。
共勉吧
lxzhg 2010-09-26
  • 打赏
  • 举报
回复
谢谢各位达人批评指点,一起交流,共同进步,毕竟还要再靠Android吃几年饭
lxzhg 2010-09-26
  • 打赏
  • 举报
回复
http://blog.csdn.net/lxzhg/archive/2010/09/25/5905799.aspx

Android Multimedia技术实现分析 --- Java篇

本篇讨论不详细列举分析Java的API,只是对Multimedia的设计思路进行一个总结。

不大清楚什么时候,Java开始流行起来,真正火的时候,已经离开了学校,一直无缘接近它,最粗略的印象是觉得它长得像C,用起来像C++,是开发互联网应用的利器。
Android出现也是一两年的事情,其中最新鲜的玩意就是把Java成功推向移动开发,把大批的Java开发者带到一个充满诱惑的嵌入式世界,而我也因此有机会近距离观察它。
在Multimedia方面,Java提供的功能很多很强大,只是那一片片密密麻麻的代码,直让人头昏眼花,幸好有一点MFC基础,就尝试对号入座,如此一套,差不多理清一半的概念。先说头绪最乱的UI系统,Java提供的专业名字叫Graphic,首先映入眼脸的是Bitmap,这应该是2D数据存储的容器,千变万化,无所不包,能与JPG, PNG, GIF格式进行互换,又能轻松与Canvas, SurfaceView, Widget等概念融合,在真实的用户界面上展示出来。虽然很讨厌各式各样的概念,但本着艺多不压身的精神去深入琢磨,Canvas提供的功能涵盖了描点画线,绘图画圈,和MFC的DC概念如出一辙,顿悟。鉴于学习MFC时熟知的App/View/Frame架构,于是乎套了一下,应该是Activity/View/Widget,心中大喜,不再去细究。

跳过UI层出不穷概念,试图去寻找本质,发现整个UI系统的灵魂叫Surface,不管Canvas, Widget, 还是各种各样的View,只要想在界面上有所展示,最终都离不开它。Java层的Surface,只是一个外壳,功能实现全部在JNI下面,后续篇幅会陆续谈到这一点。按耐住强烈的好奇心,先撇开Surface的具体实现不管,往上望去,在Surface上搭建出了SurfaceView, 以及用于GLES的GLSurfaceView,学习MFC时,接触过ListView,TreeView等等一大堆的View,想必Java里也有类似的高级货。各种View所提供功能只是如何去显示,为了更好的显示,需要对图形,图像进行复杂的加工处理,这就是bitmap, canvas等价值所在。鉴于其具体实现来自于底层的Skia库,应该在Skia篇细细唠叨。

说完错综复杂的UI,进入Multimedia的一个重要话题,不管Mp3, Mp4 Player,核心都需要一个播放器,再高级一点,比如DV,那就需要Recorder,Android在Java层提供了周全的API,并且封装了类似MovieView等更到位的SDK,使得开发Android上的Audio, Video录放器变得易如反掌,虽然在Java里看不到太多的Player和Recorder代码,并不意味着这东西就很简单,上头轻松,下头受罪,Android的Opencore四千多个文件,就是专门用来干这个事情,当然想要支持更多更强劲的性能,这些还远远不够,需要更强大的硬件加速支持。

该收尾时,发现自己对Java确实没有天赋,鉴于自身经历,不得不拿出MFC来说事,希望对MFC免疫的朋友,不要嘲笑-:)
CyberLogix 2010-09-22
  • 打赏
  • 举报
回复
呵呵,android多媒体子系统无非包括OPENCORE,OPENMAX,STAGEFRIGHT,OPENGL ES,Skia邓库,只不过是android的冰山一角啊,研究内核和驱动才是王道
SongQues 2010-09-21
  • 打赏
  • 举报
回复
计算机发展了这么多年我们一直在学应用层的东西!想想发展这么多年还不是一相人的智慧然后我们现在要全把全部吃透呵呵!我是很累了!
luckyzhw 2010-09-20
  • 打赏
  • 举报
回复
启动打牛整一个好的android的视频播放器,造福我等影迷~
jjgy801 2010-09-20
  • 打赏
  • 举报
回复
期待续集
bigpretty 2010-09-20
  • 打赏
  • 举报
回复
LZ太强大了,多多写文章
one2zero 2010-09-19
  • 打赏
  • 举报
回复
楼主厉害~
elfylin 2010-09-19
  • 打赏
  • 举报
回复
楼主很凶悍……

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧