USB有线投屏

  • 有线镜像投屏简介
  • iOS 有线镜像投屏原理
    • 1. 启动投屏
    • 2. 接收数据
    • 3. 关闭投屏
  • Android 有线镜像投屏原理
    • 使用 ADB 镜像投屏
    • 使用 USBAccessory 镜像投屏
  • 展望

有线镜像投屏简介

手机投屏到电脑分为无线和有线两种方式
无线通过WiFi投屏,基本能实现高清,但是受限于网络速度, 延迟会比较高, 不适合玩游戏这种使用场景.
有线投屏 通过usb数据线能实现设备间稳定的连接, 可以高速传输数据, 延迟低, 画面清晰, 适合游戏, 直播等场景

iOS 有线镜像投屏原理

MAC系统自带的 QuickTime Player 在插入Lighting 数据线时, 能实现iOS 屏幕镜像和录制, 如图所示:

可以此为基础研究有线投屏的协议, 根据抓包并分析, 可以初步得到协议实现, 分成3个步骤:

1. 启动投屏
  1. 启用隐藏设备配置
  2. 声明结束端点
  3. 等待接收 PING 数据包
  4. 使用 PING 数据包进行响应
  5. 等待 SYNC CWPA 数据包接收设备音频时钟的时钟
  6. 创建本地时钟,将时钟ref作为回复SYNC CWPA并发送
  7. 发送ASYN_HPD1
  8. 发送ASYN_HPA1与步骤 6 中收到的设备音频时钟
  9. 接收 SYNC AFMT,并回复零错误代码
  10. 使用设备视频时钟Ref接收 SYNC CVRP
  11. 使用本地视频时钟Ref进行回复
  12. 使用设备的视频时钟Ref开始发送 ASYN 需求
  13. 接收两个 ASYN 集属性
  14. 接收同步 Clok,并回复新创建的时钟
  15. 接收两个 SYNC 时间,并回复两个 CMTimes
2. 接收数据

视频和音频的数据包将由设备发送。我们需要定期发送视频的 NEED 数据包

3. 关闭投屏
  1. 从 cwpa 同步数据包发送带有设备时钟ref 的 asyn hpa0,告诉设备停止发送音频
  2. 发送 hpd0 与空时钟Ref 停止视频
  3. 接收同步停止包,我们创建的视频时钟时,cvrp发送给我们,这是在每个馈送数据包
  4. 回复以 8 个零字节同步停止
  5. 接收本地视频时钟Ref的 ASYN RELS(在 FEED 数据包中找到的 ASYN RELS)
  6. 接收 SYNC CLOCK 后创建的本地时钟的 ASYN RELS
  7. 释放 usb 终结点
  8. 将设备活动配置设置为仅 usbmux

具体的镜像协议细节点击访问 quicktime_video_hack , 包括一个go 语言的协议实现, 可以运行在Ubuntu 和 MacOS 平台.

Android 有线镜像投屏原理

Android系统的有线投屏有2种实现方式, 使用ADB 和 USBAccessory 方式. 缺点是, 不管哪种方式, 目前都不能投屏系统声音.

使用 ADB 镜像投屏

这种方式有个优秀代表 - scrcpy, 是genymobile开源的利用ADB工具实现画面投屏的项目:

  1. 打开手机的usb 调试即可投屏
  2. 可达到60fps 的镜像帧率
  3. 35-70ms 的低延时
  4. 可在电脑反向控制手机
使用 USBAccessory 镜像投屏

此方式的技术实现和adb 完全不一样, 主要基于 Android USBAccessory , 在两个设备间建立usb 传输通道, 手机端运行app 录屏传输数据至电脑

展望

投屏技术极大改进了设备互联互通, 华为和苹果都在此领域发力, 未来肯定会有更长远的发展.
我们团队深耕投屏领域, 不仅实现了miracast 和airplay 无线投屏, 目前也完美实现了 iOS和android 的有线投屏.
分享本文的技术资料, 只为了让有兴趣的人深入研究 , 实现低延时, 高可用, 秒级设备发现的投屏技术, 提升每个人的数字生活体验.

安卓Android/苹果iOS USB有线投屏原理和实现相关推荐

  1. uniapp-条件编译安卓Android/苹果iOS

    uniapp-条件编译安卓Android/苹果iOS //在全局common.js定义 module.exports = {is_iOS: function() {if (uni.getSystemI ...

  2. android win10 投屏,安卓Android手机或平板如何投屏到WIN10电脑? - 常见问题 - 服务支持 - 冠艺Guanyee,科技造就冠军品质...

    安卓Android手机或平板如何投屏到WIN10电脑? 在我们日常办公使用的时候,有时需于将笔记本电脑屏幕投屏到大屏幕上,有时也需要将手机屏幕投屏到笔记本电脑上 这个时候很多人会不知道怎么做,其实可以 ...

  3. ios10 Android airplay,iOS下AirPlay投屏功能实现

    这篇文章注重于如何实现AirPlay投屏功能.具体AirPlay的实现逻辑这里不再赘述,网上帖子很多 首先.想要呼出AirPlay列表的话,需要将MPVolumnView控件声明且添加到UI.上使用之 ...

  4. android scrcpy 源代码分析,Scrcpy投屏原理浅析-设备控制篇

    起初我真的想过自己单独写一套来着,后来发现 Scrcpy与vysor是都是投屏中比较优秀的项目了,非侵入性,不需要设备单独 scrcpy启动阶段 它到底是怎么做到执行scrcpy命令,在较短的时间内就 ...

  5. 微信小程序安卓(Android) /苹果(IOS)时间戳转换NaN兼容性问题

    微信小程序(Android / IOS)是戳转换问题 1.定义时间转换的函数 function formatNumber(n){n = n.toString()return n[1] ? n : '0 ...

  6. 多用途通讯录短信定位获取系统(安卓Android+苹果IOS+双端)带视频教程

    源码介绍: /定位/短信/实时监控程序_老赖/出轨克星带视频教程 网盘下载地址: https://zijiewangpan.com/fBxOJBEC556 图片:

  7. 安卓获取手机网络强度_USB调试和USB网络共享,安卓有线投屏究竟选哪个?

    用过EZCast投屏设备的安卓手机E粉,可能有过这样的困惑. 「开启USB调试」和「开启USB网络共享」 究竟选哪个进行有线同屏? 今天的小E课堂中,我将带大家看看这两者的区别,以及应该用哪个比较好. ...

  8. 局域网屏幕共享_USB调试和USB网络共享,安卓有线投屏究竟选哪个?

    用过EZCast投屏设备的安卓手机E粉,可能有过这样的困惑. 「开启USB调试」和「开启USB网络共享」 究竟选哪个进行有线同屏? 今天的小E课堂中,我将带大家看看这两者的区别,以及应该用哪个比较好. ...

  9. android 视频投屏,USB视频投屏

    USB视频投屏是一款非常好用的手机投屏软件,嫌手机屏幕太小,那就利用这款软件投屏到电视上吧.屏幕大,而且很清爽,画质清晰,一览无余.带给你不一样的观看感受.这款软件支持的类型也很多,不管是平板还是手机 ...

最新文章

  1. Python 3 利用 Dlib 和 sklearn 人脸笑脸检测机器学习建模
  2. C#实现像微信PC版一样的扫码登录功能
  3. UI标签库专题四:JEECG智能开发平台 Upload(上传标签)
  4. linux网络子系统分析(一)——协议栈分层实现综述
  5. JAVA中如何产生透明的VolatileImage
  6. 【数据集】Python爬取某国内所有航班记录
  7. 英语基础语法-语态(被动语态Be done)
  8. python图书销售系统
  9. 群体优化算法工具箱分享(GA、PSO、CS、GWO、WOA、HHO)
  10. PHP反序列化原生类利用
  11. 弹性与智能—下一代移动网络系统(RINGS)
  12. 拼多多新手商家开直通车一定要避免的雷区有哪些?
  13. 《黑客狙击》--一部值得观看的国产高科技犯罪电影
  14. 【新知实验室】腾讯云TRTC实时音视频体验
  15. 机器学习 | 特征重要性判断
  16. Python 真的好学吗?
  17. CleanMyMac X激活码免费版安装包MAC清理工具
  18. 为什么你只需要CD音质:16bits, 44.1kHz的意义
  19. 一文查看公信宝查封始末,CEO此前曾表示获利数千万
  20. 【转】图灵机与计算问题(张江)

热门文章

  1. [code]自动白平衡white blance
  2. 电信新套路?为推广5G或将限制4G网速,网友:网速早就变慢了
  3. 服务器虚拟化培训计划,vmware虚拟机使用培训(一)概要.ppt
  4. 零售周报 | 苏宁易购收购万达百货;可口可乐今年增长放缓;京东27亿收购北京翠宫饭店...
  5. 9.WireShark学习-使用WireShark分析SYN-Flooding攻击
  6. Matlab实验(六)
  7. (附源码)springboot智能手机的微课程学习系统 APP 毕业设计 100909
  8. html audio标签无效,HTML5的audio标签设置currentTime无效解决方案
  9. 已解决bs4.FeatureNotFound: Couldn‘t find a tree builder with the features you requested: html5Lib. Do y
  10. 中央财经大学python 期末考试题_选择在中央财经大学念书你后悔吗?