MediaRouter和MediaRouteProvider介绍
Android MediaRouter API 旨在利用通用界面在远程接收端设备上实现媒体内容的显示和播放。然后,实现 MediaRouter 接口的应用开发者可以连接到框架并将内容播放到加入 MediaRouter 框架的设备上。媒体播放设备制造商可以通过以下方式加入到框架中:发布 MediaRouteProvider 以允许其他应用连接到接收端设备并在上面播放媒体。 通过 Android 媒体路由器框架,制造商可以通过名为 MediaRouteProvider 的标准化接口在其设备上实现播放功能。路由提供程序定义了用于在接收方设备上播放媒体内容的通用接口,从而可以在设备上通过任何支持媒体路由的 Android 应用播放媒体内容。
如果您想让您的应用支持 Google Cast 设备,则应使用 Cast SDK 并将您的应用构建为 Cast 发送端。请不要直接使用 MediaRouter 框架,而应遵循 Cast 文档 中的说明操作。
对于大多数应用来说,唯一需要的路由类型是 CATEGORY_REMOTE_PLAYBACK。此路由类型会将运行您的应用的设备视为遥控器。连接的接收方设备会处理所有内容数据的检索、解码和播放事宜。这便是支持 Google Cast 的应用(例如,Chromecast)的工作原理。
少数制造商支持称为“辅助输出”的特殊路由选项。借助该路由,您的媒体应用可以检索、渲染视频或音乐,或者直接将视频或音乐流式传输到所选的远程接收方设备上的屏幕和/或音响设备中。使用辅助输出将内容发送到支持无线功能的音乐系统或视频显示屏。要发现并选择这些设备,您需要将 CATEGORY_LIVE_AUDIO 或 CATEGORY_LIVE_VIDEO 控件类别添加到 MediaRouteSelector 中。您还需要创建和处理自己的 Presentation 对话框。
总的来说,MediaRouter和MediaRouteProvider就是一套基础框架,依赖此框架提供的UI,定义好了一套规则,至于怎么发现和连接设备需要自己的应用程序去处理。 请参考谷歌开发者文档:在设备之间传输或者media-routing
Google Cast 介绍及工作原理
Google Cast 专为电视、电影、音乐等而设计。将最好的视频内容放在家里最大的屏幕上,或者将音频内容带到 Google Cast for Audio 设备和 Google Home 设备,包括新的 Google Home Hub。Google Cast SDK 使您能够扩展您的 Android、iOS 或 Web 应用程序,以将其流式视频和音频定向到电视或音响系统。应用程序成为播放、暂停、搜索、倒带、停止和以其他方式控制媒体的遥控器。 使用Google Cast需要购买ChromeCast的设备插入电视HDMI接口或者跟Google合作集成了ChromeCast的电视厂家,谷歌也开发了将谷歌浏览器投屏电视的功能。 更多介绍及集成参考Google Cast官网:Google Cast
Google Cast 大致工作原理
发送端 app(sender app)使用 SDK,将需要播放的媒体的信息发送到 Google 的服务器,服务器再通知接收端播放(所以发送端和接收端必须都可以访问 Google 的服务器才行)。接收端运行的是一个浏览器,它会根据发送端的app ID和媒体信息,去载入对应的一个网页,这个网页(receiver app)也是由发送端 app 的开发者提供的,的将会负责播放相应的媒体内容。即使接收端时 Chromecast Audio 之类只能播放音频的硬件,这个网页也是会载入并渲染的。
Google Cast 和 DLNA 或者苹果的 AirPlay 不同之处,一是依赖 Google 的服务器,也就是说必须连接到 Internet 才可以用,如果只有一个局域网是不行的。二是前两个的接收端播放器接收端本身提供的,开发者只需要提供要播放的内容就可以,但是 Google Cast 则是需要提供自己的receiver app,这样的好处是开发者可以高度定制(比如可以定制UI,或者加入弹幕、歌词滚动、音乐可视化之类复杂功能),虽然接收端往往运行的并不是Android这样的开放操作系统,但是因为receiver app的本质是网页,所以开发难度并不高。
Google Cast 一些概念的介绍: 发送端(sender):可以是Chrome 浏览器(电脑版或者 Android 版)、Android 设备、iOS 设备。 发送端 app(sender app):使用了 Google Cast SDK 的 app,可以是 web app(网页)也可以是 Android 或 iOS app。 接收端(receiver):支持作为接收端的硬件,如Chromecast、机顶盒、音箱、电视之类。 接收端 app(receiver app):接收端上运行的 app,由 sender 指定的 app ID 决定,其本质是网页,接收端上的浏览器将其载入并执行。 session:Sender 首先要跟特定的 receiver 建立 session 才能相互通信。建立 session 对于用户来说就是“设备配对”的过程。 media:Session 建立后,Sender 可以使用 session 的 loadMedia 方法来告诉 receiver 播放媒体。如果 loadMedia 成功,Sender 会获得一个 media 对象。该对象反映了receiver app正在播放的媒体,其中包含了播放状态,播放队列等信息。 以上参考自:Googlecast,无线投屏,多屏互动 GoogleCast大致工作原理
Receiver本质就是一个网页,由html+CSS和jacascript开发,如果要自定义receiver application,需要在 Google Cast SDK Developer Console注册appID,这个appID将会包含在sender的SDK方法中,标识receiver app。 更多请参考下面博客: 深入理解Google Cast(一)基本概念 在深入理解Google Cast(三)探寻原理
Amazon Fling介绍
亚马逊Amazon推出Fire TV机顶盒和Fire TV Stick电视棒的Mozilla也正式发布了他们的串流服务,名为Fling。 Amazon Fling 是 Amazon Fire TV 平台上的一项服务,允许客户从Fire OS、iOS和Android移动设备向Amazon Fire TV 设发送媒体和网络内容进行显示和播放。为开发者提供了一个 API,应用程序可以使用该 API 与此服务进行通信。必须在移动应用程序中实现 API 以创建一个控制器,该控制器使该应用程序能够发现网络上的 Fire TV 设备,并提供播放视频、音频或照片等媒体内容的机制。在 Fire TV 上,将对此 API 的支持添加到 Fire TV 播放应用程序使您能够处理远程播放事件。支持此功能的 Fire TV 应用称为播放器。 控制器服务提供以下功能:
- 设置要呈现的媒体的源 URL。
- 获取有关该媒体的信息,例如持续时间、当前位置和元数据。
- 发现网络上支持此功能的 Fire TV 设备。
- 控制媒体播放(播放、暂停、停止、搜索)。
- 立即或通过回调获取播放状态。
- 将自定义命令发送到 Fire TV 接收器应用程序进行播放。
- 要创建控制器应用程序,请参阅 Flinging From Fire OS 或 Android 或 Flinging From iOS 指南。
Fire OS是Amazon Fire TV和平板电脑上运行的操作系统。Fire OS是Android的一个分支,因此若应用在Android上运行,很可能也能在亚马逊的Fire设备上运行。可通过应用测试服务快速检查应用与亚马逊的兼容性。作为开发者,可能无需调整Android代码,即可在亚马逊平台上发布应用。去掉Google服务,而替换Amazon服务,同样不在中国支持。
更多与Amazon Fling相关的请参考亚马逊开发者官网:理解amazon-fling
同样适配了Google Cast和MediaRouter,将控制器与现有的Google Cast应用程序集成请参考Integrating Amazon Fling with an Existing Android App that Uses Google Cast,与现有的Android Media Router应用程序集成请参考Using Amazon Fling with Android MediaRouter
总结
在多种设备之间串流的解决方案,比如DLNA、Miracast、AirPlay,后来Google(谷歌)也推出了自己的Google Cast,Google Cast在Android的MediaRouter框架上集成了一套属于Google的SDK,Amazon也推出了Fling,同样可以集成Google Cast和MediaRouter API。但Google Cast和Amazon同属于增值服务,需要购买额外的产品,由于需要连接Google和Amazon的国外服务器,在国内不支持。Android的MediaRouter框架旨在为Android移动设备与TV设备投屏提供一套规范,在此规范基础上搭建合适的连接和投屏方案。
|