Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发

Miracast投屏协议深入剖析 Miracast由WiFi联盟制定,以WiFi-Direct、IEEE802.11为无线传输标准,允许手机向电视或其他接收设备进行无线投送视频、图片。和Miracast类似的投屏协议,还有Airplay、DLNA、chromecast等,现在主要对今天主角Miracast协议展开分析。 阅读详情
AI摘要

本文介绍了Miracast/WiFiDisplay投屏技术,Miracast以Wi-Fi直连为基础,Wi-Fi Display结合Wi-Fi标准和H.264技术。实现WiFiDisplay涉及设备链接、视频、声音和传输协议等部分,还介绍了视频、声音和协议的验证方法,以及抓包分析rtsp协议的数据传递流程。

Miracast/WifiDisplay概念介绍

在这里插入图片描述

Miracast

Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如手机可透过Miracast将影片或照片直接在电视或其他设备播放而无需任何连接线,也不需透过无线热点(AP,Access Point)。

Wi-Fi Direct

Wi-Fi直连(英语:Wi-Fi Direct),之前曾被称为Wi-Fi点对点(Wi-Fi Peer-to-Peer),是一套无线网络互连协议,让wifi设备可以不必透过无线网络接入点(Access Point),以点对点的方式,直接与另一个wifi设备连线,进行高速数据传输。这个协议由Wi-Fi联盟发展、支持与授与认证,通过认证的产品将可获得Wi-Fi CERTIFIED Wi-Fi Direct®标志。

Wi-Fi Display

Wi-Fi Display是Wi-Fi联盟制定的一个标准协议,它结合了Wi-Fi标准和H.264视频编码技术。利用这种技术,消费者可以从一个移动设备将音视频内容实时镜像到大型屏幕,随时、随地、在各种设备之间可靠地传输和观看内容。

Miracast实际上就是Wi-Fi联盟对支持WiFi Display功能的设备的认证名称,产品通过认证后会打上Miracast标签。

使用场景图
在这里插入图片描述
最经典场景那就是:
手机投屏到电视或者显示器端,即可以把小屏幕设备画面声音投屏到 大屏端,上图还有提到一个Source和Sink概念。

Sink & Source
如下图所示
在这里插入图片描述

Miracast可分为发送端与接收端。Source端为Miracast音视频数据发送端,负责音视频数据的采集、编码及发送。而Sink端为Miracast业务的接收端,负责接收Source端的音视频码流并解码显示,其中通过Wi-Fi Direct技术进行连接。

WiFiDisplay实现核心技术图

如果实现一个最简单的WiFiDisplay核心部分会涉及如下部分:
在这里插入图片描述其实WiFiDisplay和投屏本质没啥差别,主要就是把音视频数据传递给对方,对方接收后解码显示,但是WifiDisplay不是一直简单的私有协议,而是一种认证公共协议,即sink端和source端可能不是自己公司产品设备,但是也可以实现投屏。

1、设备链接部分–使用WIFI P2P,即可以不需要依赖热点

2、视频部分–使用一个类似虚拟屏幕WiFiDisplay,对这个屏幕画面进行编码成h264数据

3、声音部分–使用内录接口REMOTE_SUBMIX,录制系统自带发出声音,可以编码aac也可以直接pcm

4、传输协议-使用标准rtsp协议进行传输,音视频数据包装到rtp中发送

视频验证部分

dumpsys display后可以看到对应的display
在这里插入图片描述
同时从perfetto上vsync进行present时候也可以看到两个display
在这里插入图片描述

声音部分验证

采用 dumpsys media.audio_flinger命令,查看输出的音频情况

系统播放的声音都被输入到了AUDIO_DEVICE_OUT_REMOTE_SUBMIX设备
在这里插入图片描述负责录制系统声音的输入设备就是AUDIO_DEVICE_IN_REMOTE_SUBMIX
在这里插入图片描述

协议部分验证

抓包wireshark工具安装

ubuntu环境wireshark安装

则使用如下命令安装

sudo apt update
sudo apt install wireshark

安装后运行wireshark:

sudo wireshark

注意这里要使用sudo,不使用则很多网卡设备和lo都看不到
在这里插入图片描述但是因为WiFiDisplay开发调研的话,我们主要对手机设备,所以不是在ubuntu电脑上进行的抓包,而是需要到手机上抓包后,使用ubuntu的wireshark打开分析而已。

手机抓包方式

首先需要root权限。
以下是基本的操作步骤:

    安装tcpdump工具:

        可以从网上下载对应Android设备架构(如armeabi, arm64-v8a, x86等)的tcpdump二进制文件。

        将其放置在设备的/system/xbin/或者其他已经在PATH环境变量中的目录下。

    获取root权限:

        使用已经root过的设备或者使用adb root命令来获取root权限。

    使用tcpdump命令抓包:

        通过adb shell进入设备的shell环境。

adb shell ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0 
          inet6 addr: ::1/128 Scope: Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1 
          RX bytes:0 TX bytes:0 

dummy0    Link encap:Ethernet  HWaddr 16:13:15:9b:8a:94
          inet6 addr: fe80::1413:15ff:fe9b:8a94/64 Scope: Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:157 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:0 TX bytes:10990 

wlan0     Link encap:Ethernet  HWaddr f6:ed:b6:e6:93:26  Driver icnss
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:380411 errors:0 dropped:6 overruns:0 frame:0 
          TX packets:651256 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:3000 
          RX bytes:19939920 TX bytes:687241648 

rmnet_data0 Link encap:UNSPEC  
          inet6 addr: fe80::e09a:e739:4a14:c7f0/64 Scope: Link
          UP RUNNING  MTU:2000  Metric:1
          RX packets:384 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:367 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:43754 TX bytes:30654 

rmnet_ipa0 Link encap:UNSPEC  
          UP RUNNING  MTU:2000  Metric:1
          RX packets:363 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:367 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:48362 TX bytes:30654 

p2p0      Link encap:Ethernet  HWaddr 5e:e4:4f:be:f3:d4  Driver icnss
          inet addr:192.168.49.1  Bcast:192.168.49.255  Mask:255.255.255.0 
          inet6 addr: fe80::5ce4:4fff:febe:f3d4/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:142 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:64114 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:3000 
          RX bytes:41602 TX bytes:73275825 

选着合适网卡
adb shell tcpdump -i p2p0 -w /sdcard/capture.pcap

请注意,抓包可能会影响设备的正常网络性能,谨慎使用。此外,不同版本的Android和设备硬件可能需要不同的tcpdump版本和参数。

抓包分析WiFiDisplay数据传输rtsp协议

可以看到整个WiFiDisplay的数据传递流程如下:

1、rtsp进行会话描述协议
2、rtp传输megp-ts流,megp-ts流包裹了相关音视频数据
在这里插入图片描述

更多framework技术干货,请关注下面“千里马学框架”

win10下Miracast无线投屏使用教程及异常解决方案(超详细) 文章目录一、什么是Miracast?二、主流的无线投屏技术有哪些特点?三、如何查看自己的win10电脑是否支持Miracast无线投屏功能?四、win10电脑如何使用Miracast无线投屏功能? 一、什么是Miracast? Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的3C设备(如智能手机、电视、投影、电脑等... 阅读详情

相关推荐

无线高清会议室终端之Miracast

前言:      公司在2015年5月立项做一款硬件类产品,使用SOC(CPU+DSP)芯片方案做一款高清会议室终端,除了会议功能之外,需要具备多路无线投屏功能。项目从5月份立项、历经搭建团队、研发、生产、测试,至2016年1月完成一期功能和试产,期间经历很多困难和曲折,现分一个系列做下回顾,本篇讲下Miracast。 Miracast:      关于Miracast的基础知识,大家可

wanghorse的专栏 5229

miracast技术详解

特殊情况下,由于要投射的内容是手机决定的,所以如果手机侧的miracast不想投某些画面的时候,两侧显示的会有区别,比如说密码输入界面,版权保护的界面,锁屏之后的界面等。请注意,这些接口很多都是无法让第三方APP访问的,所以做这些的前提是整个系统的源码是开放的,这样你才可以给你的 apk 添加系统签名,在源码树中去编译,才能访问这些方法。很明显,会有更高的权限,因为自己是组长。到这一步,我们可以复习一下,整个miracast的架构了,下图是WFD官方的工作模块框图,基本和前面提到的内容是大体对应的。....

bberdong的专栏 1万+

Android WifiDisplay分析一:相关Service的启动

最近在学习Android 4.4上面的WifiDisplay(Miracast)相关的模块,这里先从WifiDisplay用到的各个Service讲起,然后再从WifiDisplaySettings里面讲解打开wfd的流程。首先看下面的架构图: 相关Service的启动 图中主要有以下几个模块,DisplayManagerService、MediaRouterService、WifiD

lilian0118的专栏 2万+

Miracast技术详解(一):Wi-Fi Display

Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如手机可透过Miracast将影片或照片直接在电视或其他设备播放而无需任何连接线,也不需透过无线热点(AP,Access Point)。

juruiyuan111的专栏 3662

Android下WiFiDisplay功能探究

WiFiDisplay(WFD)是WiFi联盟在已有技术的基础上,为了加速视/音频的传输分享而提出来的一个新概念。随着Android4.2实现WiFiDisplay后,越来越多的移动设备都陆续IR实现了这一功能或是使用类似技术实现(DLNA,AirPlay)。

srw11的专栏 3万+

【安卓】安卓设备实现wifi display解决方案

通过演示上面的Demo我们发现Wifi direct技术原理是底层实现了Scoket链接,它是可以替代蓝牙传输的技术实现,传输效率快蓝牙传输100倍,但是也有缺点就是功耗高(耗电)。安卓手机用户都知道我们的安卓手机有一个wifi直连功能,在点击设置–》WIFI–》更多Wifi设置–》Wifi直连;安卓手机默认有source端的api,只是没有暴露出来给开发者,这也是我们在Google开发者文档看不到的原因,我们如果想要调用,需要通过反射的方式(有技术实现难度,而且各个手机厂商的api有可能被定制化了)。

阿甘正传 3774

Android 13 Miracast 投屏代码适配总结

Android 13 Miracast投屏适配总结 本文主要介绍了Android 13系统对Miracast投屏功能的适配方案。针对自研设备无法投屏到笔记本设备的问题,通过分析发现需要修改系统配置和代码逻辑。关键适配点包括: 开启系统Miracast支持,设置相关属性值 针对Windows电脑投屏的特殊处理,修改WifiDisplayAdapter和WifiDisplayController代码 解决设备连接过程中的认证问题,确保正确完成WPS PBC交换 适配后成功解决了Android设备投屏到Windo

wenzhi的博客 1662

Android原生API实现Miracast接收端:从Wi-Fi Direct到MediaCodec解码

Wi-Fi Direct(Wi-Fi P2P)是一种无需路由器即可实现设备间点对点直连的无线通信技术,其底层通过WifiP2pManager完成设备发现与组网。在投屏场景中,发送端与接收端通过RTSP协议协商音视频参数,并利用RTP传输H.264裸流,接收端需借助MediaCodec进行硬件解码与Surface渲染。该技术方案的核心价值在于绕过云端中转与第三方客户端,实现低延迟、高可控的本地投屏链路,适用于电视盒子、车机副屏及定制Android设备。本文围绕Android、Miracast、原生API、投屏

weixin_33796205的博客 156

Miracast通用投屏与厂商自定义投屏优缺点对比分析

下面就来讲解为啥有了这个通用Miracast投屏还需要自定义投屏?它们各自有啥优缺点?优点:1、可以丰富定制各种用户的投屏需求,比如车载多屏幕投屏,游戏扩展投屏,平行空间等。因为source和sink端都属于自己开发功能,所以想要怎么定制功能就可以怎么定制,灵活性非常高,这也才可以方便的满足用户各种各样不同的需求。2、因为sink和source两端都是自己开发的功能,所以使用体验和性能方面有比较好的保证,毕竟二者属于一个厂商的产品,所以测试也是比较全面的。

liaosongmao1的专栏 685

基于Simulink的二相混合式步进电机驱动器快速建模与仿真实践

本文详细介绍了如何利用Simulink对二相混合式步进电机驱动器进行快速建模与仿真。通过从零搭建电机数学模型、设计H桥控制逻辑,并集成步进时序,手把手指导读者创建可运行的仿真模型文件。该方法能有效验证控制策略,避免硬件调试风险,是学习与实践电机驱动开发的理想途径。

weixin_29171087的博客 148

LIO-SAM运行报错‘process has died’?别慌,一个命令搞定libmetis.so库路径问题

本文详细解析了LIO-SAM运行中常见的‘process has died’报错问题,特别是由libmetis.so库路径错误导致的节点崩溃。通过一个简单的命令移动库文件到正确位置,即可快速解决这一问题,同时提供了多种替代方案和预防措施,帮助开发者更好地理解Linux动态库加载机制和ROS环境管理。

weixin_29231221的博客 205

WifiDisplay(Miracast)技术原理及实现

WifiDisplay(Miracast)技术原理及实现 文章目录WifiDisplay(Miracast)技术原理及实现1. WifiDisplay简介2. WifiDisplay协议流程3. WifiDisplay显示框架实现4. Android WifiDisplay实现4.1 Source端实现4.1.1 设备扫描及发现4.2 Sink端的实现4.2.1 设备如何被发现4.2.2 设备p2p连接后如何建立RTSP连接4.2.3 RTSP连接实现 1. WifiDisplay简介 Wi-Fi Disp

一个Android菜鸟的博客 1万+

瑞萨RZN2L工业以太网开发避坑指南:EtherCAT从入门到通信调试全流程

本文详细解析了瑞萨RZN2L MPU在工业以太网开发中的EtherCAT从站配置与通信优化全流程。通过硬件设计关键点、协议栈选型、PDO映射策略及DC同步精度优化等实战技巧,帮助开发者快速搭建高效通信框架并解决调试中的常见问题,特别适合工业自动化领域的实时通信需求。

aitie1479的博客 461

Android多媒体-投屏-wfd之二

(算是在应用层协议?原因:server端没有去初始化P2P,也就没有在WiFi P2P框架中去注册,导致无法client端就无法发现设备,同时server端也要启动discoverPeers,这样才能确保能够被发现,并且GroupOwner也是Server端所持有(并不绝对,可以通过createGroup来决定,最好是在Server端)原因:mWifiP2pInfo?AirPlay:苹果开发的无线技术,通过WiFi传输,支持DLNA没有的镜像(设备显示什么,显示屏幕也显示什么)

weixin_47145826的博客 1606

KEIL5编译报错L6200E:__stdout重定义问题分析与解决

本文深入分析KEIL5编译报错L6200E中__stdout重定义问题的根源,指出因未完整定义__stderr导致与标准库stdio_streams.o冲突。提供完整重定义标准流、启用MicroLIB库等解决方案,帮助开发者彻底解决Symbol multiply defined错误,提升嵌入式开发效率。

uran的专栏 954

ctfshow---sql注入(171-213)

这里提一句,为什么不直接替换成acb这种,因为,flag原本就有字母,还原的时候会全部都还原成数字的,数字替换成符号应该也是可以的,这边测试了下除了&#好像别的符号都可以。插入查询后查询语句就会变成这样,由于id=11111这是一个不存在的id,而后面1=1又为真,所以会查询到表内所有的内容,--+是注释后面的字符。因为接受username的时候没有用引号,所以接受单纯的数字,而数字和字符比较会转换类型,字符串会变成数字0进行比较,所以相等。

fainpo的博客 1320

Android多媒体-投屏-wfd之一

Wi-Fi Display经常和Miracast联系在一起。实际上,Miracast是Wi-Fi联盟(Wi-Fi Alliance)对支持Wi-Fi Display功能的设备的认证名称。通过Miracast认证的设备将在最大程度内保持对Wi-Fi Display功能的支持和兼容。Miracast的Android实现涉及到系统的多个模块,包括:MediaPlayerService及相关模块:原因很明显,因为Miracast本身就牵扯到RTP/RTSP及相应的编解码技术。

weixin_47145826的博客 1645

手把手教您windows如何正确的开启局域网共享,如何解决“没权限、空密码访问等诸多问题”,含手动操作教程 + 傻瓜式一键设置工具(局域网共享+打印机管理),二选一总有一款能满足您!

😫 Windows共享总失败?别抓狂!这篇教程带你破解“空密码”访问的核心难题 🔑,四步搞定所有设置。文末还附赠“一键修复”神器 🚀,让文件共享丝滑如德芙!

XiaoqiangClub的博客 1453

【转载】多屏互动技术研究之WifiDisplay(Miracast)技术原理及实现

文章目录 WifiDisplay(Miracast)技术原理及实现1. WifiDisplay简介2. WifiDisplay协议流程3. WifiDisplay显示框架实现4. Android WifiDisplay实现4.1 Source端实现4.1.1 设备扫描及发现 4.2 Sink端的实现4.2.1 设备如何被发现4.2.2 设备p2p连接后如何建立RTSP连接4.2.3 RTSP连接实现 1. WifiDisplay简介 Wi-Fi Display经常和M...

分享技术与经验的博客 6637

时间序列预测 | Python实现ARIMAX和VARMAX时间序列数据预测

时间序列预测 | Python实现ARIMAX和VARMAX时间序列数据预测 目录时间序列预测 | Python实现ARIMAX和VARMAX时间序列数据预测基本介绍ARIMAXVARVARMAVARMAXSESHWES参考资料 基本介绍 本文介绍ARIMAX、VAR、VARMA和VARMAX基本概念及其Python程序设计。 ARIMAX 具有外源回归量的自回归整合移动平均值(ARIMAX)是 ARIMA 模型的扩展,其还包括外生变量的建模。 外生变量也称为协变量,可以被认为是并行输入序列,其在与

前程算法屋的博客 6688

AI原生应用API编排:如何实现高效的权限管理?

随着GPT-4、Claude 3等大模型的普及,AI原生应用(从设计之初就以AI为核心的应用)正从“概念”走向“落地”。依赖大量外部API的协同工作(如用户身份API→大模型生成API→支付API→存储API)。但随之而来的挑战是:如何在复杂的API调用链中,确保每个环节的权限合规?本文将聚焦这一问题,覆盖API编排的基础逻辑、权限管理的核心机制(如RBAC/ABAC)、实战工具链(如OPA策略引擎),以及常见场景的解决方案。本文将按照“场景引入→核心概念→原理拆解→实战演练→趋势展望”的逻辑展开。

大数据洞察的博客 451

Android WiFi Display (Miracast)

技术体系: WiFi Direct:WiFi P2P,支持在没有AP(Access Point)下,WiFi设备直连并通信 WiFi Protected Setup:用于用户自动配置WiFi网络、添加WiFi设备 11n/WMM/WPA2:11n是802.11n协议(56M提升至600M);WMM是WiFi Multimedia,针对实时视音频数据的QoS服务;WPA2是WiFi Protec...

hesheng1024的博客 4022

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: android14多屏幕帧率刷新率统计显示开发及成果展示
下一篇: 安卓14剖析SystemUI的ShadeLogger/LogBuffer日志动态控制输出dumpsy机制
千里马学框架
博客等级 码龄6年 1万+粉丝 649原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值