美文网首页androidDLNA投屏技术android
android设备投屏技术🔥:协议&概念

android设备投屏技术🔥:协议&概念

作者: 细卷子 | 来源:发表于2017-07-01 19:14 被阅读5346次

    前言

    由于工作上的需求,开始接触投屏技术。

    为何要写这篇文章?
    我怀疑想学这技术的人群不多,也许文章不会火,毕竟也不是什么热门技术。
    但正因为不是热门技术,所以资料很少。我也是自己摸索过来的,我希望写完这篇文章能帮助更多想学习这门技术的人。

    “投屏技术”听起来挺高大上的样子,觉得可能比较难。其实实现并不难,因为有了很多成形的底层平台,在一些比较好的平台上 连 demo 也帮你写好了。
    虽然实现不难,但<b>作为优秀的程序员 我们知其然也要知其所以然</b>。所以我们要理解它的原理。(看到“原理”,莫慌,我保你能轻松理解)

    android投屏技术,我分三个部分来讲:
    关于 android 投屏技术系列:
    一、知识概念

    这章主要讲一些基本概念, 那些 DLNA 类库都是基于这些概念来做的,了解这些概念能帮助你理清思路,同时可以提升开发效率,遇到问题也能有个解决问题的清晰思路。

    二、手机与tv对接

    这部分是通过Cling DLNA类库来实现发现设备的。
    内容包括:

    1. 抽出发现设备所需接口
    2. 发现设备步骤的实现
    3. 原理的分析

    三、手机与tv通信

    这部分也是通过Cling DLNA类库来实现手机对tv的控制。
    内容包括:

    1. 控制设备步骤
    2. 控制设备代码实现
    3. 手机如何控制tv
    4. tv将自己的信息如何通知手机
    5. 原理的分析

    第二部分跟第三部分 我是通过使用Cling DLNA类库来实现的,目前已知的搜狐视频就是用的Cling。而且Cling实现起来还算不难,所以公司也使用Cling来实现投屏。

    关于投屏 ios 可以使用苹果公司的 airplay,android 设备投屏 可以使用 DLNA 功能来实现投屏 android 设备是具备 DLNA 功能的,而且很多物理设备也是具有 DLNA 功能的。

    概念①:什么是DLNA

    专业术语:
    DLNA的全称是DIGITAL LIVING NETWORK ALLIANCE(数字生活网络联盟)。
    DLNA(Digital Living Network Alliance) 由索尼、英特尔、微软等发起成立、旨在解决个人PC,消费电器,移动设备在内的无线网络和有线网络的互联互通。
    DLNA 2003年诞生是为了能够把当时相互独立的电视机及其相关设备(功放、音响、DVD/蓝光播放机)、PC及其相关设备(数码相机、音乐播放器)和移动电话在家庭中有机地整合起来,使得多媒体内容能够在各个设备上便捷地播放。

    通俗术语:
    DLNA(数字生活网络联盟) 就是大佬们一起搞事情 商讨“我们要将物联网设备连接起来,怎么搞啊?” 搞着搞着 就搞出了这套设备的工业标准。 然后让其他设备具备 DLNA 这种工业标准,这样这些设备就可以互联互通了。

    概念②:UPnP组件

    UPnP组件包括如下:


    UPnP组件

    投屏设备提供 控制服务、事件服务和展示服务,android设备通过控制点控制投屏设备的这些服务。

    • 根设备 与 设备:
      设备 就是那些物联网设备 如:家用电器、盒子 等。因为一台 UPnP 设备可以是多个服务的载体或多个子设备的嵌套,所以存在一个根设备的概念。

    • 服务:
      是指 设备所支持 能提供的服务,例如:支持 控制服务、事件服务、展示服务。

    • 控制点:
      控制点 就是可以发现并控制其他设备的控制设备。听起来有点绕,其实就是控制设备,例如: android 设备需要控制设备来控制投屏设备的视频播放、暂停等操作,就需要控制点对设备进行控制。

    下面是我们想象一下投屏的过程:
    我在看楚乔传,我觉得手机屏幕太小看得不爽,我想要我的 android 手机投屏到大屏显示器上。
    首先需要两个设备(一个是 android 手机,另一个是小米盒子)都连上同一个局域网中(假设连接的是 wifi),我的小米盒子就告诉 wifi 它的描述信息,android 手机开始进行设备发现,就发现了我的小米盒子。然后 我就点击楚乔传 要将它投屏到显示器上,那么首先 小米盒子要支持投屏(这里路由器已经知道了小米盒子支持投屏的), android 手机就通过控制点来控制视频的播放了。(视频的传输的话,可以直接传视频流。但现实情况不是这么干的。因为手机屏幕小,显示器屏幕大,所以显示器需要更清晰的分辨率,因此跟手机上的播放片源是不同的,所以只需要换一个更清晰的片源 url 就好了)

    • 设备发现:
      android设备投屏,首先android设备就要找到所有支持投屏的设备,找到设备的过程就是设备发现。

    • 设备控制:
      例如:android设备将视频播放投屏到显示器上,设备需要对显示器上的视频进行 播放、暂停、进度拖拽等操作,这些操作就是设备控制。

    • 设备事件:
      例如:android 设备需要随时知道 支持投屏设备在局域网中的出现,当出现一个新的设备 android 设备就通知到,要实现这点 android 设备就要订阅这个事件,这也就是设备事件。

    DLNA 标准包括多项协议及标准,其中最重要的部分是 UPnP 协议

    概念③:那些协议

    协议部分,可能比较无聊(可能是我写得比较无聊吧 ),还是稍微了解一下吧。

    UPnP协议栈:
    UPnP是由“通用即插即用论坛”(UPnP Forum)推广的一套网络协议,它的目标是实现设备间网络互联。

    • UPnP协议定义了设备之间,设备和控制点,控制点之间通信的协议
    • 完整的UPnP协议栈由设备寻址、设备发现、设备描述、设备控制、事件通知以及基于Html的描述等几部分构成
    UPnP协议内容

    别被吓跑了,我们目前还不用了解很透彻,心里有个底就好了,这对我们之后理解有帮助。
    该图每一层都以相邻的下层为基础,同时又是相邻上层的基础。直至达到应用层为止。
    看到这个图有没有想到 ISO 七层模型

    我从下至上来介绍一下:

    ip网络协议 大哥哥

    IP:就是ip网络协议
    为什么需要它?
    因为用到网络层数据的传输,IP层用于数据的发送与接收。
    想象一下两个设备互联,其实就是在网络互联,所以需要网络层协议。

    TCP-UDP

    这里包含了UDP和TCP两块协议。
    这里图应该这样表示:

    一堆看不懂的?

    UDP协议跟IP协议组合成:UDP/IP协议
    而 HHTPMU 和 HTPU 这两个协议是基于 UDP/IP 协议之上的。
    TCP协议跟IP协议组合成:TCP/IP 协议
    HTTP 则是基于 TCP/IP 协议上。

    TCP/IP 协议大家应该都了解,但为何出现一个 UDP/IP 呢?
    使用UDP,可以通过多点传送(Multicast)向 LAN 上所有支持UPnP的设备发送新设备接入的通知。这里流媒体 也会使用 UDP 来传输,因为速度快。

    HHTPMU 和 HHTPU 是什么?
    它是构建在 TCP/IP 协议之上的是 HTTP 协议及其变种,所有 UPnP 消息都被封装在 HTTP 协议及其变种中。HTTP 协议的变种是 HTTPU 和 HTTPMU,这些协议的格式沿袭了 HTTP 协议,只不过与 HTTP 不同的是他们通过 UDP 而非 TCP 来承载的,并且可用于组播进行通信。
    可见 它之所以存在就是替换 TCP 为 UDP。

    接下来就是 设备发现 | 设备控制 | 设备事件 协议了:
    (打起精神 )
    1、设备发现 SSDP 协议
    简单服务发现协议(Simple Service Discovery Protocol:SSDP)
    具体包括控制点如何发现网络上有哪些服务,以及这些服务的资讯,还有控制点本身宣告他提供哪些服务。

    2、控制设备 SOAP 协议
    简单对象访问协议(Simple Object Access Protocol:SOAP)
    它定义如何使用 XML 与 HTTP 来执行远程过程调用。包括控制点如何发送命令消息给设备,设备收到命令消息后如何发送响应消息给控制点。

    3、设备事件 GENA 协议
    通用事件通知架构(Generic Event Notification Architecture:GENA)
    定义在控制点想要监听设备的某个服务状态变量的状况时,控制点如何传送订阅信息并如何接收这些信息。

    体系定义

    这一层仅仅是一个抽象的、公用的设备模型。就是一个规范 定义,所有的 UPnP 设备都必须使用这层。

    UPnP论坛

    UPnP 论坛的各个专业委员会的设备定义层,在这个论坛中,不同电器设备由不同的专业委员会定义,例如:电视委员会只负责定义网络电视设备部分,空调器委员会只负责定义网络空调设备部分,依此类推。

    UPnP设备制造厂商定义

    也就是应用层,由 UPnP 设备制造厂商定义的部分。

    总结:
    内容都是一些概念,所以比较枯燥,下面章节我会通过代码一步一步实现投屏,还深入进行原理的分析噢。一周内更新,不要错过!
    下章预告:
    手机通过WIFI发现设备
    这部分是通过Cling DLNA类库来实现发现设备的。
    内容包括:
    1、抽出发现设备所需接口
    2、发现设备步骤的实现
    3、原理的分析

    android实现投屏代码

    相关文章

      网友评论

      • FTE:感谢楼主的分享,学习到了,也在github上学习了您的代码,谢谢!:smile:
      • 乔啊良:加油顶 ,最近要做电视投屏,感觉以自己的能力压根 写不出来大神有好用的第三方吗?
      • 宝宝妈妈:几个问题哈:
        1. 加密视频是否支持投屏呢,是否有泄漏风险
        2. 是否支持倍数播放
        3. 手机,电视兼容性问题如何呀。
        4. 接入投屏这个功能,你们开发了多久呢?
        thanks:)
      • 三井胖:咨询一下,假如在一个已完成的app内增加投屏功能,开发周期大概多久?投屏投出的内容不是视频只是app的界面和声音,也不用控制进度。
        三井胖:@细卷子 是的
        细卷子:@三井胖 是不是等于同步app的界面和声音到屏幕上?
      • 付三君::+1: :+1: 《智能家庭网络-技术.标准与应用实践》这本书 应该有研讨过吧。另外你上面的协议分层图 有几处错误哦 HHTPMU->HTTPMU , HHTPU->HTTPU ,第二个SOAP(设备控制)应该是HTTP(设备描述)吧
      • Jason_SZ:别人是来看文章的, 我是来看妹子的.
      • eb6f1ea6038d:能不能投影到PC端呢?
      • ZzTt_df3f:你好,我只想问一下,为什么配置进studio之后一直显示少了org.seamless.util.Iterators呢?
      • shuaizi:博主, 有没有建个QQ群啊, 大家可以一起讨论
        Tjeam:您好 如果我想投放本地视频或者音乐 应该如何处理
        细卷子:@shuaizi 我木有建群 我朋友有个群 欢迎加入鸡窝窝,群号码:110801914:smile:
      • deqiutseng:我很想了解 设备端(TV 如小米电视 上的投屏应用开发)实现的功能是把手机上的屏幕设放到TV 应用(自主开发)上,该如何做?
      • 梦回唐朝编程:我们也要做视频投屏功能,前提是还要做手机遥控电视的功能,楼主也做了类似的功能吗? 是用的什么开源库?
        细卷子:@小二比 用的Cling
      • 诫人随笔:请教一下,如果我想把手机当前正在进行的视频通话投影到大屏上去,该如何操作呢,看了阁下的代码,现在是指定一个url作为片源进行播放。
        细卷子:@诫人随笔 这个主要看Tv端播放器是否支持直播流的格式
      • 60fd15e74895:咦 ,不错 我们也是cling 来实现的 不过这个库有一些坑不知道你们解决了没有 ,坑1 切换wifi很容易连接不上设备的 坑2 搜索历史设备后 切换wifi 搜索出来的还是那些 就算情况设备列表 ,就搜索不出来设备了 微信二五77113 交流一下?
        60fd15e74895:@细卷子 你切WiFi试试就知道了 网络很好的环境下是没问题的 切换WiFi经常连不上设备
        60fd15e74895:@细卷子 还有很多比较坑的地方:joy: 我写这块我知道 坑了我好久,现在好几个测试提的问题也解决不了,也在琢磨源码,不过我们组投的技术力量太少了还没头绪:persevere:
        细卷子:@ACEInandroid 嗯嗯 我也听说过有坑 只是还未遇到 :joy:
      • 296d6ebc6cd2:🔥🔥🔥
        细卷子:@颜路 :sunglasses:
      • 彳亍路:用markdown写呀!
        细卷子:@筱眞 这个是用的markdown
        彳亍路:@细卷子 markdown写文章,排版设计好看些!
        细卷子:@筱眞 什么?
      • 香脆的大鸡排:加油 加油 :+1:
        香脆的大鸡排:@细卷子 没有关系。总有人要做领域知识。也许有那么一个人别的地方找资料没有找到,看到这篇文章后茅塞顿开。
        细卷子:@香脆的大鸡排 我在想 是不是还是写一点热门话题会好一点啊?
      • 温柔地捶胸口的声音:满满的实战经验

      本文标题:android设备投屏技术🔥:协议&概念

      本文链接:https://www.haomeiwen.com/subject/qhpwcxtx.html