Miracast投屏反控

一、 Miracast介绍

Miracast是对支持Wi-Fi Display功能设备的认证名称,也就是通过Miracast认证的设备应该都支持Wi-Fi Display功能。

二、 缩略词以及定义

  • Source 端:支持通过WiFi链路将多媒体内容流式输入到接收端的设备,即发送端。
  • Sink 端:从source端通过WiFi链路接收多媒体内容并进行渲染的设备,即接收端。
  • WFD : Wi-Fi Display
  • UIBC: User Input Back Channel 用户输入反向通道,将用户输入的操作传输到Sink端和- Source端。
  • HIDC:Human Interface Device Class
  • HID: Human Interface Device

三、 Miracast会话过程

  1. Device discovery
    发现设备,通过WiFi P2P查找附近支持WiFi P2P的设备。前提是两个设备都支持P2P功能,现在大部分手机能连WiFi都支持P2P,在ScreenBox项目中,Source端即笔记本电脑,Sink端为ScreenBox盒子,将笔记本投屏到ScreenBox上,Sink端不断向外广播,Source端不断扫描,扫描就是发现设备的过程。
  2. Service discovery
    服务发现。在两个设备连接之前发现彼此的服务功能。
  3. Device selection
    设备A发现设备B,用户选择是否与设备B进行配对。
  4. Connection setup
    Source端和Sink端建立P2P连接,此时建立连接之后,两个设备会协商出谁来当Group Owner(Group Owner中的DHCP服务进程分配IP),至于如何协商,比较两者的Intent参数,在ScreenBox项目中,手动把盒子的Intent值设为最高,盒子即成为Group Owner。此时盒子会为投屏设备分配一个IP,现在还缺一个端口,端口是默认的7236。TCP连接建立,该端口也用于下一步RTSP会话的管理和控制。
  5. Capability negotiation
    能力协商阶段。在成功建立了WFD连接以及TCP连接后,开始WFD协商阶段,该阶段主要是Source端和Sink端两者交互它们支持的一些rtsp编码格式以及后续用到的参数等等。具体看下图M1、M2、M3、M4四个阶段。

图 基于RTSP的Capability Negotiation

  • M1 消息:Source端发送一条RTSP Options请求给Sink端, Sink端响应给Source端,确定了Sink端支持的一些RTSP methods。
  • M2 消息:与M1消息类似,Sink端发送一条RTSP Options请求给Source端,Source端响应给Sink端,确定了Source端支持的一些RTSP methods。
  • M3 消息:双方交换信息完成后,Source端发送RTST GET_PARAMETER 请求给Sink端,指明了后续交互中需要的一系列参数,Sink端做出响应。
  • M4 消息: Source端确定了需要的参数,并通过RTST SET_PARAMETER 请求发送给Sink端
    该过程中,Source端询问Sink端是否支持反控,若它回复支持反控,则Source端会发送自己的端口号50000过去,此时一个用于发送鼠标消息的TCP连接也将被建立,具体的鼠标消息如何发送请看第8条User Input Back Channel Setup。
  1. Content protection setup
    内容保护设置。在音视频传输过程中,对于需要保护的内容,Source端应该建立HDCP,起到一个数据加密的作用。
  2. Session establishment and streaming
    会话建立。在完成第四步rtsp的能力协商之后,建立WFD会话,并且将Source端的音视频发送到Sink端,在两者完成RTSP M7的请求和响应之后,会话才是真正的建立。Source端的视音频数据将由(H264,AAC)编码,复用成MPEG2TS流后通过RTP协议由UDP传给Sink端,Sink端将解码收到的数据,并最终显示出来。(打包成ts包,封装给RTP,由UDP发送给sink端)具体会话的建立过程见下图。

图 会话建立时间线

  • M5 消息:Source端发送一条RTSP 触发器设置的请求,Sink端作出响应。
  • M6 消息:成功交换M5消息之后,Sink端向Source端发送RTSP SETUP请求,Source端作出响应,此时如果状态代码为RTSP OK,那么说明会话建立成功了。
  • M7 消息:Sink端向Source端发送RTSP PLAY请求,此时Sink端已经准备好接收RTP流
  • M8 消息:消息中包含一个RTSP TEARDOWN请求,用于Source端终止RTSP程序,停止音/视频流,终止相应的RTP。
  • M9 消息:Sink端向Source端发送RTSP PAUSE请求
  • 还有其他一系列消息都是用于两者间音视频的传输,这里不在赘述,详细请看《Wi-Fi Display Specification_v1.1》。
  1. User input back channel setup
    用户输入通道。UIBC用于将用户的操作传输到Sink端和Source端,通过TCP传输,这里用户输入类别有两种:generic和HIDC。
    1)Generic:硬件无关型,如鼠标点击、按键点击、touch点击、放大缩小等。
    2)HIDC人机接口设备控制:包括红外线、USB、蓝牙、WIFI、游戏杆、遥控器等,用于由HID生成的用户输入。
    这里笔记本支持的大多数都是HIDC类型,因此通过TCP传输过去的数据需要用到HID报告描述符。HID报告描述符描述其是什么设备,以及后续控制数据的解析格式。例如Sink端发送过去的a1,a2,a3,a4,但是Source端并不认识这些数据,HID描述符告知其a1,a2表示X坐标,a3,a4表示Y坐标。
  2. Payload control
    负载控制。在数据流建立之后,需要有控制管道负载的能力,包含以下功能: 1)时间同步 如果有2个sink设备,二者音视频必须同步,实现保真。2)编码速率控制:因信道条件和电源管理优化控制管道负载。
  3. Display session teardown
    会话终止。

记录学习过程,仅供参考,有错误希望多多指正,感谢ldl同学的大力支持

Miracast投屏反控原理相关推荐

  1. Miracast投屏反控

    Miracast介绍 Miracast是对支持Wi-Fi Display功能设备的认证名称,也就是通过Miracast认证的设备应该都支持Wi-Fi Display功能. 缩略词以及定义 Source ...

  2. 安卓开发投屏反控实现方式

    在安卓开发中,可以通过MediaProjection API来实现屏幕投屏的功能,同时也可以通过Socket通信实现反控功能.下面将详细介绍实现步骤和注意事项. 1. 创建MediaProjectio ...

  3. [转] Android Miracast投屏入门

    原文:https://www.codetd.com/article/12138544 哇,打开新世界了. SOS--遇到问题查看资料,中英文该看的都不落下. 官配1. AOSP源码: Miracast ...

  4. 镜像miracast投屏软件_什么是Miracast投屏,Miracast是怎么投屏的?

    原标题:什么是Miracast投屏,Miracast是怎么投屏的? 什么是Miracast投屏,Miracast是怎么投屏的? 我经常说手机.电脑.电视利用Miracast投屏,那么有人了解Mirac ...

  5. android miracast投屏,MIRACAST投屏功能

    MIRACAST投屏功能 MIRACAST投屏功能是无线HDMI高清传输,将智能手机(操作系统是安卓4.2及以上)里的全部操作界面.游戏状态.视频状态等在智能电视的屏幕上显示,就是我们期待的无线投屏功 ...

  6. Android Miracast投屏入门

    哇,打开新世界了. SOS--遇到问题查看资料,中英文该看的都不落下. 官配1. AOSP源码: Miracast Sink端源码最早出现在Android 4.2.2上,通过googlesource可 ...

  7. Android Miracast 投屏

    从事Connectivity模块几年时间了,Team负责集成包括WiFi/Bluetooth(A2DP Source/Sink,HID[key/Audio],OPP,SPP)投屏类[Miracast, ...

  8. miracast投屏软件下载_手机画面如何投屏到电视?

    投屏方法详解,拆解步骤,视频演示,讲到你会用为止! 安卓手机Miracast镜像 安卓手机Miracast镜像可谓刚需,这种镜像方式的一大优点就是手机端不用再另装其他软件,电视端有"爱投屏& ...

  9. 海信电视power android,海信智能电视投屏之安卓手机miracast投屏教程

    最近把手机游戏投屏到几十寸的大屏电视上玩,似乎成了一个趋势,像王者荣耀.吃鸡等游戏,在电视大屏幕上玩,确实比在手机上玩要得劲!于是,我就试着给家里的海信智能电视投屏,我用的是安卓手机,型号是华为荣耀系 ...

最新文章

  1. vue 结合 echarts
  2. 若所有的参数皆需要类型转换——请为此采用non-member函数
  3. 原型设计真的对用户体验那么重要吗?
  4. 不用数组 java输出杨辉三角_不用数组实现杨辉三角(巴斯卡三角形)
  5. CentOS 7 防火墙开启了哪些服务和端口?
  6. ACwing 245. 你能回答这些问题吗(线段树区间子段最大值+单点修改)
  7. C++描述杭电OJ 2023.求平均成绩 ||
  8. swift怎么调用Java,Swift完成UIAlertController的调用
  9. 全局安装gulp 报错问题解决
  10. 公众服务常用电话号码大全
  11. Baxter实战 (一)ubuntu14.04安装ROS-Indigo
  12. 学习笔记:unity自带寻路(导航)系统:Nav Mesh导航网格
  13. 快讯分类_如何掌握Google快讯
  14. VMware ESXi-虚拟化平台的搭建
  15. 简单的下拉导航条代码
  16. 【Tensorflow】报错:FailedPreconditionError: Attempting to use uninitialized value keep_prob_7
  17. 我想起个公司名字,招投标行业的,快速搜索标讯的,科技公司,蓝色logo的
  18. js实现图片裁剪功能
  19. 学好计算机的用途,学电脑的用途是什么
  20. 调用麦克风列阵进行录音

热门文章

  1. CC1101和CC1310的参数配置的问题整理
  2. 高级软考之——系统分析师历年考点知识点总结
  3. python提取xml格式的出参并转成dict
  4. Java IO流InputString 与 Base64互转
  5. 机器人中的卡尔曼滤波算法——机器人定位
  6. rancher rke 集群恢复
  7. 家用简单电线路图_​家庭电路安装走线图解析,教你4步快速布线
  8. 利用awstats分析nginx日志
  9. 建设可持续社区离不开物业,你们小区的物业怎么样?
  10. 用ATL创建COM组件详细解说