Tamic/CSDN
http://blog.csdn.net/sk719887916/article/details/53645615
做TV开发一段时间了,国内目前关于这方面的资料并不多,这里我来分享一下我对TIF的使用心得。Android TIF(Android TV Input Framework)是Google向电视制造商提供了一套标准的API,用于创建Input模块来控制Android电视。这套API的底层实现的原理AIDL和provider,从而进行了跨进程通信(Bunder)。系统或第三方的应用可以通过TIF获得所有输入(input)的信源(输入的模块包括:搜台模块,MDMI模块,网络模块等),然后通过aidl切台输出到屏幕上。
#电视相关:
-
HDMI:高清晰度多媒体接口(英文:High Definition Multimedia
Interface, -
HDMI)是一种数字化视频/音频接口技术,是适合影像传输的专用型数字化接口
-
IPTV:网络电视,也叫VOD电视,三方比如说某某视频公司提供的视频资源在电视上播放
-
DTV:数字电视
-
ATV:模拟电视
#TIF的组成部分:
1. TV Provider(com.android.providers.tv.TvProvider):
一个包含频道、节目和相关权限的数据库。
2. TV App (com.android.tv.TvActivity):
一个和用户交互的系统应用。
3. TV Input Manager (android.media.tv.TvInputManager):
一个中间接口层,能够让TV Inputs和TV App进行通讯。
4. TV Input:
可以看做是一个代表物理或者虚拟的电视接收器或者输入端口的应用。Input在TIF中可以看做是一个输入源。
5. TV Input HAL (tv_input module):
TV Input的硬件抽象层,可以让系统的TV inputs访问TV特有硬件。
6. Parental Control:
儿童锁,一种可以锁住某些频道和节目的技术。
7. HDMI-CEC:
一种可以通过HDMI在多种设备上进行远程控制的技术。CEC(Consumer Electronics
Control消费电子控制)
#TIF的整理使用流程。
如上图所示,liveTVApp通过turning调用TV Input Manager获得一个session,session里面放的是一路信源的状态。TvInput将获得的Channel和Programs信息写入到/data/data/com.android.providers.tv/databases/tv.db数据库中。liveTVApp通过session以aidl的方式调用TVinputService获得相关的频道和具体的节目信息进行播放。
#TIF为开发者提供的接口
##TvView
负责显示播放的内容。它是一个ViewGroup的子类,它是切台的入口,内置surface用于显示视频播放的内容和通过控制session可以控制音量的大小等。
##TvInputService
TvInputService是一个重要的类,继承了它并实现一些规范就可以实现一路input信源供其它应用使用。在该service中要实现onCreatSession()方法该方法要返回一个TvInputService.Session对象。这里的service在Manifest中定义时要注意要添加permission和action,具体如图2。添加完之后系统的TvInputManager可以检测到该service是一个TvInputService,也就是一路信源。
##TvInputService.Sssion
该session类TvView通过Tune方法会指定相应的inputId(往往是该service对应的“报名/.类名”)和uri,uri中包含对应的节目id,该tune方法会调用Session的Onturn方法中,在这个方法中解析传过来的id,根据id利用TvProvider去查询数据库的数据,设置给player,这里使用onSetSurface()方法将TvView创建的surface设置给player,然后player就在该surface上显示内容。
##TvContract
介于TvProvider和TvApp之间的一层封装,它里面封装了一些uri。里面有两个内部类是两个ja