安卓Android/苹果iOS USB有线投屏原理和实现
USB有线投屏
- 有线镜像投屏简介
- iOS 有线镜像投屏原理
- 1. 启动投屏
- 2. 接收数据
- 3. 关闭投屏
- Android 有线镜像投屏原理
- 使用 ADB 镜像投屏
- 使用 USBAccessory 镜像投屏
- 展望
有线镜像投屏简介
手机投屏到电脑分为无线和有线两种方式
无线通过WiFi投屏,基本能实现高清,但是受限于网络速度, 延迟会比较高, 不适合玩游戏这种使用场景.
有线投屏 通过usb数据线能实现设备间稳定的连接, 可以高速传输数据, 延迟低, 画面清晰, 适合游戏, 直播等场景
iOS 有线镜像投屏原理
MAC系统自带的 QuickTime Player 在插入Lighting 数据线时, 能实现iOS 屏幕镜像和录制, 如图所示:
可以此为基础研究有线投屏的协议, 根据抓包并分析, 可以初步得到协议实现, 分成3个步骤:
1. 启动投屏
- 启用隐藏设备配置
- 声明结束端点
- 等待接收 PING 数据包
- 使用 PING 数据包进行响应
- 等待 SYNC CWPA 数据包接收设备音频时钟的时钟
- 创建本地时钟,将时钟ref作为回复SYNC CWPA并发送
- 发送ASYN_HPD1
- 发送ASYN_HPA1与步骤 6 中收到的设备音频时钟
- 接收 SYNC AFMT,并回复零错误代码
- 使用设备视频时钟Ref接收 SYNC CVRP
- 使用本地视频时钟Ref进行回复
- 使用设备的视频时钟Ref开始发送 ASYN 需求
- 接收两个 ASYN 集属性
- 接收同步 Clok,并回复新创建的时钟
- 接收两个 SYNC 时间,并回复两个 CMTimes
2. 接收数据
视频和音频的数据包将由设备发送。我们需要定期发送视频的 NEED 数据包
3. 关闭投屏
- 从 cwpa 同步数据包发送带有设备时钟ref 的 asyn hpa0,告诉设备停止发送音频
- 发送 hpd0 与空时钟Ref 停止视频
- 接收同步停止包,我们创建的视频时钟时,cvrp发送给我们,这是在每个馈送数据包
- 回复以 8 个零字节同步停止
- 接收本地视频时钟Ref的 ASYN RELS(在 FEED 数据包中找到的 ASYN RELS)
- 接收 SYNC CLOCK 后创建的本地时钟的 ASYN RELS
- 释放 usb 终结点
- 将设备活动配置设置为仅 usbmux
具体的镜像协议细节点击访问 quicktime_video_hack , 包括一个go 语言的协议实现, 可以运行在Ubuntu 和 MacOS 平台.
Android 有线镜像投屏原理
Android系统的有线投屏有2种实现方式, 使用ADB 和 USBAccessory 方式. 缺点是, 不管哪种方式, 目前都不能投屏系统声音.
使用 ADB 镜像投屏
这种方式有个优秀代表 - scrcpy, 是genymobile开源的利用ADB工具实现画面投屏的项目:
- 打开手机的usb 调试即可投屏
- 可达到60fps 的镜像帧率
- 35-70ms 的低延时
- 可在电脑反向控制手机
使用 USBAccessory 镜像投屏
此方式的技术实现和adb 完全不一样, 主要基于 Android USBAccessory , 在两个设备间建立usb 传输通道, 手机端运行app 录屏传输数据至电脑
展望
投屏技术极大改进了设备互联互通, 华为和苹果都在此领域发力, 未来肯定会有更长远的发展.
我们团队深耕投屏领域, 不仅实现了miracast 和airplay 无线投屏, 目前也完美实现了 iOS和android 的有线投屏.
分享本文的技术资料, 只为了让有兴趣的人深入研究 , 实现低延时, 高可用, 秒级设备发现的投屏技术, 提升每个人的数字生活体验.
安卓Android/苹果iOS USB有线投屏原理和实现相关推荐
- uniapp-条件编译安卓Android/苹果iOS
uniapp-条件编译安卓Android/苹果iOS //在全局common.js定义 module.exports = {is_iOS: function() {if (uni.getSystemI ...
- android win10 投屏,安卓Android手机或平板如何投屏到WIN10电脑? - 常见问题 - 服务支持 - 冠艺Guanyee,科技造就冠军品质...
安卓Android手机或平板如何投屏到WIN10电脑? 在我们日常办公使用的时候,有时需于将笔记本电脑屏幕投屏到大屏幕上,有时也需要将手机屏幕投屏到笔记本电脑上 这个时候很多人会不知道怎么做,其实可以 ...
- ios10 Android airplay,iOS下AirPlay投屏功能实现
这篇文章注重于如何实现AirPlay投屏功能.具体AirPlay的实现逻辑这里不再赘述,网上帖子很多 首先.想要呼出AirPlay列表的话,需要将MPVolumnView控件声明且添加到UI.上使用之 ...
- android scrcpy 源代码分析,Scrcpy投屏原理浅析-设备控制篇
起初我真的想过自己单独写一套来着,后来发现 Scrcpy与vysor是都是投屏中比较优秀的项目了,非侵入性,不需要设备单独 scrcpy启动阶段 它到底是怎么做到执行scrcpy命令,在较短的时间内就 ...
- 微信小程序安卓(Android) /苹果(IOS)时间戳转换NaN兼容性问题
微信小程序(Android / IOS)是戳转换问题 1.定义时间转换的函数 function formatNumber(n){n = n.toString()return n[1] ? n : '0 ...
- 多用途通讯录短信定位获取系统(安卓Android+苹果IOS+双端)带视频教程
源码介绍: /定位/短信/实时监控程序_老赖/出轨克星带视频教程 网盘下载地址: https://zijiewangpan.com/fBxOJBEC556 图片:
- 安卓获取手机网络强度_USB调试和USB网络共享,安卓有线投屏究竟选哪个?
用过EZCast投屏设备的安卓手机E粉,可能有过这样的困惑. 「开启USB调试」和「开启USB网络共享」 究竟选哪个进行有线同屏? 今天的小E课堂中,我将带大家看看这两者的区别,以及应该用哪个比较好. ...
- 局域网屏幕共享_USB调试和USB网络共享,安卓有线投屏究竟选哪个?
用过EZCast投屏设备的安卓手机E粉,可能有过这样的困惑. 「开启USB调试」和「开启USB网络共享」 究竟选哪个进行有线同屏? 今天的小E课堂中,我将带大家看看这两者的区别,以及应该用哪个比较好. ...
- android 视频投屏,USB视频投屏
USB视频投屏是一款非常好用的手机投屏软件,嫌手机屏幕太小,那就利用这款软件投屏到电视上吧.屏幕大,而且很清爽,画质清晰,一览无余.带给你不一样的观看感受.这款软件支持的类型也很多,不管是平板还是手机 ...
最新文章
- Python 3 利用 Dlib 和 sklearn 人脸笑脸检测机器学习建模
- C#实现像微信PC版一样的扫码登录功能
- UI标签库专题四:JEECG智能开发平台 Upload(上传标签)
- linux网络子系统分析(一)——协议栈分层实现综述
- JAVA中如何产生透明的VolatileImage
- 【数据集】Python爬取某国内所有航班记录
- 英语基础语法-语态(被动语态Be done)
- python图书销售系统
- 群体优化算法工具箱分享(GA、PSO、CS、GWO、WOA、HHO)
- PHP反序列化原生类利用
- 弹性与智能—下一代移动网络系统(RINGS)
- 拼多多新手商家开直通车一定要避免的雷区有哪些?
- 《黑客狙击》--一部值得观看的国产高科技犯罪电影
- 【新知实验室】腾讯云TRTC实时音视频体验
- 机器学习 | 特征重要性判断
- Python 真的好学吗?
- CleanMyMac X激活码免费版安装包MAC清理工具
- 为什么你只需要CD音质:16bits, 44.1kHz的意义
- 一文查看公信宝查封始末,CEO此前曾表示获利数千万
- 【转】图灵机与计算问题(张江)
热门文章
- [code]自动白平衡white blance
- 电信新套路?为推广5G或将限制4G网速,网友:网速早就变慢了
- 服务器虚拟化培训计划,vmware虚拟机使用培训(一)概要.ppt
- 零售周报 | 苏宁易购收购万达百货;可口可乐今年增长放缓;京东27亿收购北京翠宫饭店...
- 9.WireShark学习-使用WireShark分析SYN-Flooding攻击
- Matlab实验(六)
- (附源码)springboot智能手机的微课程学习系统 APP 毕业设计 100909
- html audio标签无效,HTML5的audio标签设置currentTime无效解决方案
- 已解决bs4.FeatureNotFound: Couldn‘t find a tree builder with the features you requested: html5Lib. Do y
- 中央财经大学python 期末考试题_选择在中央财经大学念书你后悔吗?