Android投屏总结
#android手机投屏
####导语
至于手机投屏的实现方法可谓五花八门,今天小袁就说下以开发人员的角度来说下当今手机的主流投屏方法。目前这种将终端信号经由WiFi传输到电视、电视盒的技术有三种:DLNA、AirPlay、Miracast、Google Cast。
##手机投屏智能电视的几种方法
###DLNA 专业术语:DLNA的全称是DIGITAL LIVING NETWORK ALLIANCE(数字生活网络联盟)。 DLNA(Digital Living Network Alliance) 由索尼、英特尔、微软等发起成立、旨在解决个人PC,消费电器,移动设备在内的无线网络和有线网络的互联互通。 DLNA 2003年诞生是为了能够把当时相互独立的电视机及其相关设备(功放、音响、DVD/蓝光播放机)、PC及其相关设备(数码相机、音乐播放器)和移动电话在家庭中有机地整合起来,使得多媒体内容能够在各个设备上便捷地播放。
通俗术语: DLNA(数字生活网络联盟) 就是大佬们一起搞事情 商讨“我们要将物联网设备连接起来,怎么搞啊?” 搞着搞着 就搞出了这套设备的工业标准。 然后让其他设备具备 DLNA 这种工业标准,这样这些设备就可以互联互通了。
####UPnp协议
DLNA 标准包括多项协议及标准,其中最重要的部分是 UPnP 协议 UPnP是由“通用即插即用论坛”(UPnP Forum)推广的一套网络协议,它的目标是实现设备间网络互联。
- UPnP协议定义了设备之间,设备和控制点,控制点之间通信的协议
- 完整的UPnP协议栈由设备寻址、设备发现、设备描述、设备控制、事件通知以及基于Html的描述等几部分构成

看到这个图有没有想到 OSI 七层模型? 我从下至上来介绍一下:

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 设备制造厂商定义的部分。
###Miracast
Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连为基础的无线显示标准。支持此标准的设备可通过无线方式分享视频画面,例如手机可通过Miracast将影片或照片直接在电视或其他装置播放而无需受到连接线缆长度的影响。与DLNA不同的是,Miracast 也有类似于AirPlay 的镜像功能,可以将手机中屏幕内容直接投放到高清电视屏幕里,这样你也可以通过电视屏幕来玩游戏了。Android4.2版本以后系统标配此功能(在设置或显示菜单中可以找到,应用名称诸如:Wlan display、Wifi display、Miracast、Allshare cast、Mirroring screen、无线显示等,只是各手机厂家命名不同而已)。可以将手机屏幕通过无线显示接收器将画面无线传输到其他较大屏幕上,如客厅电视,会议室投影仪。画面传输延时150ms以下,几乎同时。点击此功能,但没有任何反应,因为此项功能需要配件支持。
###AirPlay
AirPlay 是苹果开发的一种无线技术,可以通过WiFi将iPhone 、iPad、iPodtouch 等iOS 设备上的包括图片、音频、视频通过无线的方式传输到支持AirPlay 设备。售价99美元的Apple TV就具备这样的功能,现在一些传统的家庭影院和HIFI如马兰士和天龙的新品功放和网络播放器已经支持AirPlay功能。
AirPlay具备与DLNA所没有的镜像功能,这一功能叫AirPlay镜像,可将iPhone 或iPad 上的画面无线传输到电视上,也就是说你设备显示的是什么,电视屏幕显示就就是什么,而不仅限于图片和视频。你可以拿着iPad 来当做方向盘,然后看着大屏玩游戏。
另外AirPlay镜像最牛地方是它可以实现双屏游戏,让你的游戏有更多的交互。比如,电视里显示的是游戏画面,而iPad上显示的是比赛的路线图。
###Google Cast
谷歌官方的文档
谷歌官方的demo
因为国内的手机基本都是阉割版本的。因为不需要使用Google Play,所以国内很多手机需要下载好谷歌的三件套才能使用,然后就是谷歌官方的硬件Chromecast,在国内基本很难用,因为要用访问谷歌的服务器,所以需要外网才行, 我在集成Chromecast中遇到的坑
#####申请id
*使用Styled Media Receiver类型注册,获取id,然后替换官方demo的id就不会有sample这个水印了,我开始用的Custom Receiver类型注册,水印还在。
#####Android代码加入
compile 'com.google.android.gms:play-services-cast-framework:10.0.1'//这里要用低版本,困扰两天compile 'com.googlecode.android-query:android-query:0.25.9'compile 'com.android.support:mediarouter-v7:25+'
#####投屏关键代码
private MediaInfo buildMediaInfo() {MediaMetadata movieMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);movieMetadata.putString(MediaMetadata.KEY_SUBTITLE, mTitle);movieMetadata.putString(MediaMetadata.KEY_TITLE, "第" + mPart + "集");movieMetadata.addImage(new WebImage(Uri.parse(mPictureUrl)));movieMetadata.addImage(new WebImage(Uri.parse(mPictureUrl)));// Log.e(TAG, "buildMediaInfo" + mSelectedMedia.getUrl() + " " + mSelectedMedia.getDuration() * 1000);//第一条为谷歌,第二条为我加密,三 不加密 4 网路不加密// return new MediaInfo.Builder("https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/hls/WhatCarCanYouGetForAGrand.m3u8")// return new MediaInfo.Builder("https://cdn61.ytbbs.tv/cn/tv/55550/55550-1/play.m3u8?md5=QXaEWg8r8NkZJo9ln0cZwg&expires=1521010007&token=55550")// return new MediaInfo.Builder("https://cdn61.ytbbs.tv/cn/tv/54063/54063-1/play.m3u8?md5=DRhHA6ToB4z43_32sex0kw&expires=1521012980&token=54063")// return new MediaInfo.Builder("http://cdn14.ytbbs.tv/666/ds3/play.m3u8")// return new MediaInfo.Builder(mSelectedMedia.getUrl())// url = "https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/DesigningForGoogleCast.mp4";//url = "https://cdn61.ytbbs.tv/666/ds3/ds3s.mp4";LogUtils2.logi(TAG, "buildMediaInfo" + url);return new MediaInfo.Builder(url).setStreamType(MediaInfo.STREAM_TYPE_BUFFERED).setContentType("application/vnd.apple.mpegurl")// .setContentType("application/x-mpegurl")// .setContentType("videos/m3u8")// .setContentType("videos/mp4").setMetadata(movieMetadata).setStreamDuration(0).build();}
setContentType里面MIME值类型非常重要。很多小伙伴投屏失败就是因为没有使用正确的__MIME__类型
###DLNA和Miracast区别
DLNA是基于文件的,媒体文件可能有各种各样的编码格式,播放器这端必须能够处理这么多种编码格式。通常为了比较好的播放体验,DLNA会先缓存一小段时间。 Miracast是实时的,它可以实时传输源端(Source)的输出。源端任何屏幕的操作都会被传输到接收(Sink)端。如果源端是播放媒体文件,源端负责先对媒体文件解码,然后再编码成H.264的格式。接收端只需要做H.264的解码就可以了。相对DLNA,Miracast对于WiFi通路的要求要更高一些。
相关文章:
Android投屏总结
#android手机投屏 ####导语 至于手机投屏的实现方法可谓五花八门,今天小袁就说下以开发人员的角度来说下当今手机的主流投屏方法。目前这种将终端信号经由WiFi传输到电视、电视盒的技术有三种:DLNA、AirPlay、Miracast、Google Cast。 ##手机投屏智能电…...
vue2 组件组成部分,组件通信,进阶语法
一、学习目标 1.组件的三大组成部分(结构/样式/逻辑) scoped解决样式冲突/data是一个函数 2.组件通信 组件通信语法父传子子传父非父子通信(扩展) 4.进阶语法 v-model原理v-model应用于组件sync修饰符ref和$refs$nextTic…...
信看课堂笔记—LDO和DC-DC电路打PK
LDO(low dropout voltage regulator,低压差线性稳压器)和DC-DC(Direct current-Direct current converter,直流电压转直流电压转换器)电源是非常常见的电源电路,LDO 出来的比较早,像老戏骨一样,…...
C++ Day6
目录 一、菱形继承 1.1 概念 1.2 格式 二、虚继承 2.1 作用 2.2 格式 2.3注意 三、多态 3.1函数重写 3.2 虚函数 3.3 赋值兼容规则 3.4 多态中,函数重写的原理 3.5 虚析构函数 3.5.1 格式 3.6 纯虚函数 3.6.1格式 四、抽象类 五、模板 5.1模板的特…...
分布式系统与微服务的区别是什么?
分布式系统和微服务是两个相关但不同的概念,它们都是在构建复杂的软件应用时使用的架构思想。 分布式系统: 分布式系统是指由多个独立的计算机或服务器通过网络连接共同工作,协同完成一个任务或提供一个服务。在分布式系统中,各个…...
python:用python构建一个物联网平台
要使用Python构建物联网平台,您需要考虑以下步骤: 确定平台的基本要求和功能 首先,您需要明确您将要构建的平台的功能和特点。例如,您可能需要支持多种设备,并使用各种传感器来收集数据。您可能需要实现实时数据可视化…...
基于Qt5开发图形界面——WiringPi调用Linux单板电脑IO
Qt5——WiringPi Qt5WiringPi示例教程 Qt5 Qt是一种跨平台的应用程序开发框架。它被广泛应用于图形用户界面(GUI)开发,可以用于构建桌面应用程序、移动应用程序和嵌入式应用程序。Qt提供了丰富的功能和工具,使开发人员可以快速、高…...
【MySQL】组合查询
目录 一、组合查询 1.创建组合查询 2.union规则 3.包含或取消重复的行 4.对组合查询结果排序 一、组合查询 多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句。MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查…...
ChatGPT:引领人机交互的未来
前言 在信息技术飞速发展的时代,人机交互的方式也在不断演进。技术对人们生活和工作的影响。本文将带您深入探讨一款引领人机交互未来的人工智能模型——ChatGPT。 ChatGPT简介 ChatGPT 是一种由开放AI(OpenAI)开发的人工智能模型…...
【算法】经典的八大排序算法
点击链接 可视化排序 动态演示各个排序算法来加深理解,大致如下 一,冒泡排序(Bubble Sort) 原理 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过多次比较和交换相邻元素的方式,将…...
防溺水预警识别系统算法
防溺水预警识别系统旨在通过opencvpython网络模型深度学习算法,防溺水预警识别系统算法实时监测河道环境,对学生等违规下水游泳等危险行为进行预警和提醒。Python是一种由Guido van Rossum开发的通用编程语言,它很快就变得非常流行࿰…...
Redis 的整合 Jedis 使用
大家好 , 我是苏麟 , 今天带来 Jedis 的使用 . Jedis的官网地址: GitHub - redis/jedis: Redis Java client 引入依赖 <!--jedis--> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version…...
Mainline Linux 和 U-Boot编译
By Toradex胡珊逢 Toradex 自从 Linux BSP v6 开始在使用 32位处理器的 Arm 模块如 iMX6、iMX6ULL、iMX7 上提供 mainline/upstream kernel ,部分 64位处理器模块如 Verdin iMX8M Mini/Plus 也提供实验性支持。文章将以季度发布版本 Linux BSP V6.3.0 为例介绍如何下…...
Mycat教程+面试+linux搭建
目录 一 MyCAT介绍 二 常见的面试题总结 三 linux下搭建Mycat 一 MyCAT介绍 1.1. 什么是MyCAT? 简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的“大数据库集群” 支持事务、ACID、可以替代Mysql的加强版数据库 一个可…...
基于工作过程的高职计算机网络技术专业课程体系构建策略
行业人才需求分析高职教育是面向地方行业培养技能型、应用型人才,因此, 在课程体系的构建上要走社会调研、构建岗位群、构建专业模块及课程设置“四步 曲”。即通过社会行业需求调查研究,构建岗位群,设置相应的专业模块…...
(笔记四)利用opencv识别标记视频中的目标
预操作: 通过cv2将视频的某一帧图片转为HSV模式,并通过鼠标获取对应区域目标的HSV值,用于后续的目标识别阈值区间的选取 img cv.imread(r"D:\data\123.png") img cv.cvtColor(img, cv.COLOR_BGR2HSV) plt.figure(1), plt.imshow…...
一、计算机硬件选购
计算机硬件选购 一、设备选购1.1 I/O设备1.2 机箱1.3 主板1.3.1 主板芯片组的命名方式1.3.2 主板版型1.3.3 Z790-a(DDR5)主板参数 1.4 CPU1.5 硬盘1.6 显卡1.7 内存条1.8 散热器(水冷)1.9 电源、风扇、网线、插线板1.9.1 电源1.9.2 风扇1.9.3 网线1.9.4 …...
Dockerfile制作LAMP环境镜像
文章目录 使用Dockerfile制作LAMP环境镜像编写Dockerfile不修改默认页面修改默认页面 Start Script目录结构及文件登录私有仓库给镜像打标签上传镜像页面检查检测镜像可用性 使用Dockerfile制作LAMP环境镜像 编写Dockerfile 不修改默认页面 FROM centos:7 MAINTAINER "…...
暴力递归转动态规划(二)
上一篇已经简单的介绍了暴力递归如何转动态规划,如果在暴力递归的过程中发现子过程中有重复解的情况,则证明这个暴力递归可以转化成动态规划。 这篇帖子会继续暴力递归转化动态规划的练习,这道题有点难度。 题目 给定一个整型数组arr[]&…...
debian apt error: Package ‘xxx‘ has no installation candidate
新的debian虚拟机可能会出现这个问题。 修改apt的source.list,位于/etc/apt/source.list,添加两行: deb http://deb.debian.org/debian bullseye main deb-src http://deb.debian.org/debian bullseye main执行: sudo apt-get u…...
3分钟免费制作AI视频:零基础也能成为数字导演
3分钟免费制作AI视频:零基础也能成为数字导演 【免费下载链接】auto-video-generateor 自动视频生成器,给定主题,自动生成解说视频。用户输入主题文字,系统调用大语言模型生成故事或解说的文字,然后进一步调用语音合成…...
安装即实战,用快马平台生成集成openclaw的数据采集与分析示例项目
最近在做一个数据采集相关的项目,需要用到openclaw这个工具。说实话,刚开始安装和集成的时候踩了不少坑,后来发现InsCode(快马)平台可以一键生成完整的实战项目,简直不要太方便。今天就把我的经验分享给大家,希望能帮到…...
Qwen3-ForcedAligner-0.6B实战:基于CNN的语音特征提取优化
Qwen3-ForcedAligner-0.6B实战:基于CNN的语音特征提取优化 如果你做过语音相关的项目,比如给视频加字幕、做语音分析,肯定遇到过这样的问题:模型识别出的文字,怎么才能和音频里的时间点对上号?这就是“强制…...
Linux用户管理全攻略:从创建到权限配置
1. Linux用户管理基础入门 刚接触Linux系统的朋友,经常会遇到这样的困惑:为什么有些命令普通用户不能执行?为什么新建的用户连基本的命令补全都没有?其实这些都是用户管理的问题。作为一个用了10年Linux的老鸟,今天我就…...
别再手动算占空比了!手把手教你用TI C2000 EPWM互补输出驱动电机(附死区配置避坑指南)
从零到精通的TI C2000 EPWM电机驱动实战:死区配置与波形调试全解析 在电机控制领域,精确的PWM信号生成直接决定了系统性能和可靠性。传统的手动计算占空比方式不仅效率低下,还容易引入人为误差。TI C2000系列DSP内置的增强型PWM模块ÿ…...
科哥定制版Z-Image-Turbo体验:中文提示词友好,AI绘画小白也能玩转
科哥定制版Z-Image-Turbo体验:中文提示词友好,AI绘画小白也能玩转 1. 为什么选择科哥定制版Z-Image-Turbo 作为一名长期使用各类AI绘画工具的设计师,我发现科哥定制版的Z-Image-Turbo在中文提示词理解和生成效果上有着显著优势。这个版本基…...
uniapp安卓应用实现开机自启动的完整配置指南
1. 为什么需要开机自启动功能? 很多智能设备(如工业平板、广告机、自助终端)都需要在通电后立即运行指定应用。比如商场的导购系统、工厂的生产看板、医院的叫号终端,都需要保证设备重启后业务系统能自动恢复。传统方案需要人工点…...
Pitest:Java代码质量保障的突变测试解决方案
Pitest:Java代码质量保障的突变测试解决方案 【免费下载链接】pitest State of the art mutation testing system for the JVM 项目地址: https://gitcode.com/gh_mirrors/pi/pitest 一、概念解析:突变测试的技术本质与工作原理 1.1 从传统测试到…...
2条普通程序员的靠谱出路:AI开发与出海SEO,让AI成为你的助力而非威胁
文章分析了适合普通程序员的两种新出路:转型AI开发和出海做SEO。这两种路径均满足三大条件:市场空间大、AI能赋能工作、有标准执行路径。AI开发是配合业务团队开发AI工作流,可通过前端专精→涉猎AI应用开发→魔改开源项目逐步转型。出海SEO则…...
零基础也能挖洞赚钱?SRC漏洞挖掘从入门到精通,附全套工具包+学习路线!
开篇:为什么说SRC挖洞是安全新手的最佳起点? 凌晨两点,大学生张三盯着电脑屏幕突然跳出的「高危漏洞奖励到账」提示,手抖得差点打翻泡面——这是他挖到人生第一个SRC漏洞(某电商平台的越权访问漏洞)后收到…...
