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 应用称为播放器。
控制器服务提供以下功能

  1. 设置要呈现的媒体的源 URL。
  2. 获取有关该媒体的信息,例如持续时间、当前位置和元数据。
  3. 发现网络上支持此功能的 Fire TV 设备。
  4. 控制媒体播放(播放、暂停、停止、搜索)。
  5. 立即或通过回调获取播放状态。
  6. 将自定义命令发送到 Fire TV 接收器应用程序进行播放。
  7. 要创建控制器应用程序,请参阅 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设备投屏提供一套规范,在此规范基础上搭建合适的连接和投屏方案。

Android之在设备之间传输--MediaRouter、Google Cast、Amazon Fling介绍相关推荐

  1. 基于阿里云物联网平台的设备之间传输十六进制数据

    基于阿里云物联网平台的设备之间传输十六进制数据 文章目录 基于阿里云物联网平台的设备之间传输十六进制数据 1. 创建阿里云物联网产品 1.1 创建新的产品 1.2 为产品创建自定义topic 1.3 ...

  2. 二维码文件传输小工具(可在两台完全隔离的设备之间使用) - QFileTrans 2.0.0.6

    原帖地址为吾爱破解,本账号与吾爱破解原贴为同一人所有,故投了原创. 程序下载 总链接:https://wwd.lanzout.com/b03j7l92h#7i3b 密码:7i3b 已知问题: 因转向C ...

  3. Android 连接USB设备(配件模式)

    Android 连接USB设备(主机模式) Android 连接USB设备(配件模式) 上一章介绍了Android USB主机模式,以及两种模式的区别,本章主要介绍USB 配件模式. USB 配件模式 ...

  4. 安卓 和 Linux 之间传输文件的 8 个应用程序

    需要将文件从 Linux 桌面共享到 Android,反之亦然?查看这八个可让您轻松传输文件的应用程序. 作为在桌面上运行 Linux 的 Android 用户,您可以通过多种方式在 Android ...

  5. iphone和mac互传文件_在 iPod touch 和电脑之间传输文件

    在 iPod touch 和电脑之间传输文件 您可以使用 iCloud 云盘让文件在所有设备(包括 Windows PC)上保持最新且可访问.您还可以使用"隔空投送"以及发送电子邮 ...

  6. [转载] 如何在Android设备之间共享Google Play应用,音乐等

    参考链接: 使用super访问Java祖父母的成员 We recently showed you how to configure your iOS devices for app and media ...

  7. 如何在Android设备之间共享Google Play应用,音乐等

    We recently showed you how to configure your iOS devices for app and media sharing; more than a few ...

  8. 实现了 Android 设备之间通过 Wifi 传输文件的功能

    WifiFileTransfer 项目地址:leavesC/WifiFileTransfer 简介:实现了 Android 设备之间通过 Wifi 传输文件的功能 更多:作者   提 Bug 标签: ...

  9. tftp 在嵌入式设备和主机之间传输文件

    tftp 在嵌入式设备和主机之间传输文件 tftpd服务器启动: service xinetd restart 参数说明:-l 是local的缩写,后跟存在于Client的源文件名,或下载Client ...

最新文章

  1. 考夫曼:破解大脑代码并创建真正的人工智能
  2. multipart/form-data和application/x-www-form-urlencoded的区别
  3. Java 输入两个数并输出它们的和
  4. mysql 取数据 展示_php mysql_fetch_row逐行获取结果集数据并显示在table表格中
  5. codeUp 2031 To fill or not to fill 复杂贪心
  6. 4.2路由算法与路由协议概述
  7. angular示例_Angular Dependency Injection用示例解释
  8. 存储桶列表访问权限_十分钟从入门到精通(上)——OBS权限配置
  9. python多线程结束线程_Python线程– Python多线程
  10. Android---真机调试时不能识别手机的解决方案
  11. Linux下source ./bashrc出现的command not found: shopt问题
  12. [转]8个实用而有 趣Bash命令提示行
  13. activiti 获取审批人员_activiti,根据任务id获取该任务节点配置的获选人或者获选组...
  14. 【vn.py】SpreadTrading价差交易
  15. Geek生活--netHack
  16. 交管123缴费显示代理服务器异常,交管12123服务异常怎么回事?交管12123网络请求失败怎么办...
  17. iostat命令详解指标分析
  18. python中base64 decode_python2解码base64中文乱码怎么解决?
  19. 呼叫中心系统运营如何制定KPI指标
  20. 显著性检测评估指标及计算方法

热门文章

  1. SpringBoot中: Incorrect result size: expected 1, actual 0以及column xxxx not found解决
  2. pixi.js v5 快速了解
  3. 三步下载有3D封装的Altium designer官方库
  4. Swin Transformer v2实战:使用Swin Transformer v2实现图像分类(一)
  5. XSSF:POI IndexedColors 编码 与 颜色 对照(本想自定义颜色,不方便实现。先尽量找个能用的)
  6. 使用Matlab对频繁2项集和频繁3项集的求取
  7. tkinter-Entry详解
  8. vim 错误提示解决:The ycmd server SHUT DOWN (restart with ‘:YcmRestartServer‘). Unexpected exit code 1.
  9. Apple新发布的APFS文件系统对用户意味着什么
  10. threejs-绘制剖切面