一、功能描述
Android 的媒体路由API被设计用来允许多种媒体(视频、音乐、图片)在与ANDROID设备连接(无线或有线)的辅助设备(如电视、立体声、家庭戏院系统、音乐播放机)上显示和播放,使用该框架和API,允许Android用户立即在辅助设备上显示图片、播放音乐、共享视频等。
媒体路由框架提供两种播放输出类型:远端播放和辅助输出。远端播放类型指的是辅助设备处理媒体内容的接收、解码和回放,而Android设备(如手机)只起远程控制作用,如ANDROID应用使用该类型用来支持Google Cast。辅助输出类型则是应用本身处理媒体内容(视频或音乐),包括媒体内容的引出和处理,并把处理结果直接呈现和串流到辅助接收设备上,辅助接收设备只是呈现媒体处理后的最终内容,如Android系统中使用该方式用来支持Wireless Display输出。
如下图是应用使用媒体路由框架播放内容的有关类的高层视图:
媒体路由框架用来提供和抽象已连接的媒体辅助输出的逻辑路径。
媒体应用通过一个MediaRouter对象(媒体路由框架提供的一个对象)来使用媒体路由框架,用来选择媒体路由,并经过媒体路由框架的路由连接到选择的最终接收设备。
Android系统从4.3版本开始提供了一个媒体路由服务,用来对ANDROID系统自带的本地显示和声音输出设备的路由支持,如speaker、有线耳机、USB耳机,蓝牙A2DP输出、HDMI输出、Wireless Display输出等。这些媒体路由设备被称为框架提供的系统媒体路由。
对于没有被媒体路由框架支持的媒体播放硬件,可以通过实现一个应用,在此应用中通过使用ANDROID提供的媒体路由支持库v7-mediarouter( v7-mediarouter支持库是版本为V18及以上的Android Support支持库的一部分),继承v7-mediarouter支持库中提供的MediaRouteProviderService和MediaRouteProvider基类,实现一个继承这些基类的特定MediaRouteProviderService服务和一个针对特定硬件的特定的MediaRouteProvider对象,以此实现对特定媒体播放硬件的路由支持。这种用户实现的媒体路由称为用户媒体路由。由于v7-mediarouter路由支持库兼容于ANDROID2.1以上的版本,因此可以使用该库在ANDROID2.1以上的系统上开发针对特定媒体播放辅助硬件的媒体路由应用。
每个辅助设备(除了蓝牙输出设备)为了支持媒体路由必须继承和实现一个特定MediaRouteProvider和创建和实现相关的RouteController对象。
如以上媒体路由框架视图所示,用户通过MediaRouter对象对媒体路由的选择最终由媒体路由框架传递和路由到选择路由对应的MediaRouteProvider对象,对选择的媒体设备的操作由媒体路由框架转发到MediaRouteProvider对象关联的MediaRouteProvider.RouteController对象,由MediaRouteProvider.RouteController对象完成对媒体设备的实际操作,包括转发应用发送来的媒体播放控制命令或其它请求以及处理实际的与媒体硬件的通讯。