[信息与通信]Android系统与android在机顶盒中的应用.ppt
Android系统与android在机项盒中的应用,软件一部 李义才2011.08.01,内容提要,Android系统特征及相关技术 Android系统中扩展DVB电视业务使用skhdi/skyapi支持DVB业务 面向机顶盒产品定制Android系统 Android系统中应用开发的相关技术,1.Android系统特征及相关技术,Android系统概况Android系统版本Android系统开发Android系统的优缺点,1.1 Android系统概况,最流行的手机开发平台,包括操作系统、中间件和一些关键应用的软件堆栈。软件叠层架构:内核层系统库及运行时环境层应用框架及应用程序层,1.1.1 Android内核,基于Linux核心的软件平台及业务系统,系统内核依靠Linux2.6版的核心系统服务 除Linux标准驱动外,需要一些专有驱动,如Binder、Log、Ashmem,1.1.2 系统库及运行时环境,Android包含多种嵌入式函数库被系统中不同的组件使用,通过应用程序框架为开发者提供服务。主要的核心库有:系统C/C+、媒体、2D/3D图形引擎及图形管理、浏览器引擎、数据库、字体等。Dalvik虚拟机:基于寄存器依赖Linux内核、同时运行多个实例、执行.dex文件,1.13 框架及应用,应用框架则是可重用的软件组件,简化应 用程序的开发,向应用提供API。应用程序是带GUI的程序,包含各种资源,基于框架层的API。用Java语言编写。,1.2 Android系统版本,已经发布的重要版本:Android 1.1:发布于2009 年2 月 Android 1.5 Cupcake:发布于2009 年 5 月Android 1.6 Donut:发布于2009 年 9 月 Android 2.0/2.1 Eclair:发布于2009 年 10 月 Android 2.2 Froyo:发布于2010 年 5 月 20日Android 2.3/2.4 Gingerbread:发布于2010 年12月 Android 3.0 Honeycomb:发布于2011 年 2 月,1.3 Android系统开发,Android系统开发三个层次:Android系统移植开发Android子系统开发Android应用程序开发,1.3.1 Android系统移植开发,Android系统移植开发涉及:内核层的移植:Ashmem、Logger、Binder、Pmem、Low memory killer。CONFIG_ANDROID=yCONFIG_ANDROID_BINDER_IPC=yCONFIG_ANDROID_LOGGER=y设备驱动:Linux标准设备驱动程序。系统启动过程修改:init进程与Init.rc。Dalvik虚拟机:目前支持的CPU:ARM、X86、MIPS。图形加速及硬件编解码支持,1.3.2 Android子系统开发,Android子系统开发涉及各个层面:封装所使用到的硬件抽象层代码增加C/C+本地业务库定义Java层所需要的类(系统API)将本地业务库的功能接口封装成JNI结合Java类和JNI提供应用程序调用的Java框架类,1.3.3 Android应用程序开发,应用程序使用Java语言开发,程序如游戏开发、播放器开发等。应用程序开发两种环境:基于Android源代码的SDK:只能在Linux下基于Android SDK:Linux或Windows中的IDE下(Google提供的SDK包含Android系统映像、模拟器和相关工具,只需要了解系统API,只能开发应用程序),1.4.1Android系统的优势,完全开放的系统,吸引越来越多的厂家和消费者,将崔生众多硬件支持和程序选择。无缝结合google应用,如Google地图、邮件、搜索等互联网的重要服务。开源软件系统,功能强大,众多支持软件,如webkit浏览器、播放器、FLASH等。高效的JAVA虚拟机Dalvik,支持JAVA,速度快。,1.4.2Android系统的劣势,版本更新快,如何保持前后兼容完全开发的系统,如何保持不同厂家之间兼容Android3.0及以后的版本是否会象之前一样完全开放 与ORACLE间Java专利诉讼案其它公司的专利侵权诉讼,如微软、苹果等,2.Android系统中扩展电视业务,Android多媒体系统介绍Android中广播流播放过程设计DVB播放特点及播放过程优化扩展DVB业务机顶盒应用开发,2.1 Android多媒体系统,Android多媒体业务目前主要有:Music Player(音频播放器)Video Player(视频播放器)Camera(照相机)Sound Recorder(录音机)Camcorder(摄像机)Video Metadata(媒体元信息),Android多媒体系统的宏观结构,JAVA类:frameworks/base/media/java/android/media/java 实现的JAVA包是android.media,实现了mediaplayer、mediarecorder等几个重要的类。JAVA本地调用部分(JNI):frameworks/base/media/jni/;这部分内容编译成libmedia_jni.so。多媒体框架的media库:frameworks/base/media/libmedia/;这部分的内容被编译成库libmedia.so。多媒体服务:frameworks/base/media/libmediaplayerservice 这部分内容被编译成库libmediaplayerservice.so。利用它实现的frameworks/base/media/mediaserver是一个可执行程序,用于启动一个多媒体的守护进程。多媒体的实现:Android中使用OpenCore(/external/opencore/)和StageFright(frameworks/base/media/libstagefright)两个库实现媒体播放。,Android多媒体系统的层次及模块,Android媒体播放器框架,PVPlayer的结构,StagefrightPlayer的结构,2.2 Android中广播流播放过程设计,重新设计DvbMediaPlayer&MediaPlayer?广播流的播放融入现存的MediaPlayer体系(融入更利于应用程序开发,操持一致性),2.2.1 统一广播流播放时资源表现形式,应用层广播节目播放时资源形式即URL为:dvb:/+”频点信息”+”节目信息”具体实例:dvb:/435000.6875.64/live?aud=mpeg.1922;vid=mpeg2.1921;pcr=1921;dvb:/+”节目号”具体实例:dvb:/serviceid=123(前提是底层有节目数据库支持),2.2.2 广播流播放器实现,参考PVPlayer和StagefrightPlayer的结构在MediaPlayService中继承MediaPlayerHWInterface实现DvbMediaPlayer,class DvbMediaPlayer:public MediaPlayerHWInterfacepublic:DvbMediaPlayer();virtual DvbMediaPlayer();/*解析DVB的URL资源获取频点信息、播放节目的PID数据及相关数据,并保存供后面使用;或通过节目从DVB业务中查询得到节目信息*/virtual status_t setDataSource(const char*url,const KeyedVector*headers);virtual status_t setVideoSurface(const sp,广播流播放时PLAYER调用过程,2.3 DVB播放特点及优化,硬件解码,不需要软解编码数据流解码后直接显示硬件输出,不需要在图形层Overlay解码与显示输出不需要外部再进行数据流重新转换、分配、连接设备底层的操作经常需要root身份不需要OPENCORE复杂体系,适合DVB平台的StagefrightPlayer结构,2.4 Android中扩展DVB业务,需要支持的业务:节目搜索EPG服务数据广播 节目播放(涉及底层驱动、C+底层业务、DVB框架、JAVA框架及应用,可参考多媒体系统实现),2.5 机顶盒应用开发,采用Android应用程序,Java编程+资源+工程文件直接用Java语言+XML描述资源,实现方便、灵活可展现多样性,容易展示炫丽的图形效果可APK程序可下载、安装需要在Java框架层实现DVB所有功能扩展JS对象通过浏览器实现机顶盒应用 程序简单,方便更新扩展的JS对象一旦实现,一劳永逸不需要在Java框架层实现DVB应用展示全部通过HTML+JS实现1.利用JAVA对象通过WEBVIEW注册实现JS扩展:方便、能双向调用2.通过C/C+对象在脚本引擎中注册实现JS扩展:通用、直接,3.使用skhdi/skyapi支持DVB业务,平台程序SKYAPP特征移植SKHDI/SKYAPI 可能存在的问题,3.1 平台程序SKYAPP特征,3.2 移植SKHDI/SKYAPI,SKHDI整体进入Android环境,需重新编译SKAPI部分进入Android环境,需重新编译skyapi_dm、skyapi_dvbsi、skyapi_si_service、skyapi_search、skyapi_epg_service、skyapi_pvr、skyapi_uart、skyapi_filemage、skyapi_player、skyapi_sysctl、skyapi_time_timer、skyapi_util、skyapi_flash 初始化过程类似于平台程序,3.3 可能存在的问题,数据的存储与访问:DM不支持SQL及单进程特性,如何使用ContentProvider 信息通讯与及时性:多层次多跨进程的数据通讯API的安全性:原来单进程简单调用到向多进程提供服务如何支持CA:需要集成CA的,目前没有参考,需要CA厂家的协作,4.面向机顶盒产品定制Android系统,裁减系统中DVB产品无关的业务及应用 修改相关业务符合DVB产品的习惯正确映射遥控器输入按键及集成适合遥控器的输入法增强大屏幕图形显示效率及速度集成CA支持,5.Android中应用开发的相关技术,Android的应用程序构成Android应用程序包含的内容Android程序开发思想,5.1 Android的应用程序构成,活动(Activity)广播接收器(BroadcastReceiver)服务(Service)内容提供器(ContentProvider),5.2 Android应用程序包含的内容,Android.mk:统一工程文件,工程编译时指定工程的一些属性。用SDK在Eclipse环境开发中可以不需要;AndroidManifest.xml:工程描述文件,其中定了程序中使用的各种组件,这对每个程序都是必要的;Java源代码:按照Java包的方式来组织目录结构,包含了Java类的源代码;资源文件:包含XML文件、图片、原始数据文件等,其中Layout目录下有 界面布局的文件,String目录下有表示文字、字符描述的文件;,5.3 Android程序开发思想,Java程序思想资源的思想工程描述文件思想工程描述文件、代码、资源三位一体安全性和权限,5.3.1 Java程序思想,面向对象的程序设计,应用设计方法大部分java程序做一定修改可在Android上运行Android上的java程序与J2ME/J2SE的程序有不同:Intent带来意何驱动的开发模式:Itent具胡跨进程、使用灵活的特性。Binder带来高性能的进程通信。提供参数选项(Preferences)、文件(Files)、数据库(Database)、网络(Network)4种机制存储数据,并且通过ContentProvider对外提供一致的数据访问接口。,5.3.2 资源的思想,Android支持XML格式文件、图片文件及原始数据文件,放置在程序包子目录res/中,安全性和权限,Android是一个多进程系统,每一个应用程序都是运行在自己的进程中,拥有独立的用户身份ID。应用程序和系统安全通过标准的Linux设备在进程级执行,其它级别的安全特性通过“许可”机制来提供,该机制能够对一个抒写进程的特定操作进行约束。Android中默认情况下应用程序没有权限执行对其它程序、操作系统或用户有害的操作,这些操作包括读写用户隐私数据、执行网络访问、操持设备及其它程序文件等。如果要获取额外的权限,则需要在工程描述文件中通过来声明,