
本文是排查手册手机投屏时搜不到设备、连得上但很快断开、画面卡顿或延迟高问题出在哪一层、怎么定位、怎么修。协议怎么选、接收端怎么装不在本文讨论范围内。一、先搞清楚投屏的三个阶段投屏失败几乎都能归到下面三个阶段中的某一个先判断卡在哪个阶段排查效率会高很多阶段现象主要依赖常见根因发现Discovery列表里搜不到电视组播/广播报文AP 隔离、组播过滤、不同网段、访客网络连接与控制Control能看到设备点了没反应或提示失败单播 HTTP/TCP防火墙、电视端服务被杀、端口被拦传输与播放Streaming能播但卡、花屏、延迟高、没声音带宽、编码信道干扰、码率过高、编解码不兼容二、三种主流协议的发现机制2.1 DLNA / UPnPSSDP 组播DLNA 基于 UPnP设备发现用的是SSDPSimple Service Discovery Protocol组播地址239.255.255.250UDP 端口1900手机控制点发送M-SEARCH请求电视MediaRenderer用单播回复回复里带一个LOCATION地址指向设备描述 XML电视上线时也会主动组播NOTIFY ssdp:alive报文控制阶段手机通过 HTTP 访问LOCATION再用 SOAP 调用AVTransport服务的SetAVTransportURI、Play等动作DLNA 推送的通常是媒体地址电视自己去拉流。手机作为媒体服务器时电视会反过来访问手机上的 HTTP 端口。所以 DLNA 需要两个方向都通组播能到达双向单播 HTTP 也能通。电视端只要运行一个 DLNA 接收端如 喜乐投屏就会在局域网内响应这类发现请求。2.2 AirPlaymDNS / BonjourAirPlay 的发现依赖mDNS DNS-SD苹果的实现叫 Bonjour组播地址224.0.0.251UDP 端口5353IPv6 为ff02::fb服务类型主要是_airplay._tcp和_raop._tcp音频发现之后的连接走 TCP常见 7000 端口镜像时还会用到其他动态端口。224.0.0.x属于链路本地组播默认不会被路由器转发到其他网段。这就是电视接在另一个路由器下就搜不到的原因。2.3 MiracastWi-Fi DirectMiracast 和前两者完全不同它不经过路由器基于 Wi-Fi DirectP2P手机和电视之间直接建立一条无线链路发现靠 Wi-Fi 层的 P2P 探测与 IP 组播无关视频流在源端实时编码通常是 H.264经 RTP 传给电视。对比项DLNAAirPlayMiracast发现方式SSDP 组播 239.255.255.250:1900mDNS 224.0.0.251:5353Wi-Fi Direct P2P是否依赖路由器是是否典型用途推送视频地址推送 镜像镜像受 AP 隔离影响是是一般不受常见干扰源组播过滤、跨网段跨网段、mDNS 被拦信道冲突、设备 P2P 驱动差结论如果 DLNA/AirPlay 搜不到但 Miracast 正常问题基本出在路由器/局域网如果三者都不行就要怀疑电视本身或无线环境。三、搜不到设备的网络层原因3.1 AP 隔离客户端隔离很多路由器、尤其是公司和酒店的网络会开启AP 隔离 / 无线客户端隔离 / Client Isolation。开启后同一个 Wi-Fi 下的终端之间互相访问不到只能上网组播和单播都会被拦。判断方法手机和电视都连上后用同一网络下的电脑 ping 电视如果 ping 不通、arp里也没有电视的 MAC就要怀疑隔离。处理在路由器管理页面里关闭AP 隔离。不同品牌叫法不同常见于无线高级设置。3.2 访客网络访客 Wi-Fi 本质上就是带隔离的独立网段手机连主网络、电视连访客网络或者反过来一定搜不到。确保两台设备连的是同一个 SSID 的主网络。3.3 2.4G / 5G 双频双频合一通常没问题因为两个频段桥接在同一个二层网络里。问题出在以下情况部分路由器给 5G 和 2.4G 分配了不同网段某些 Mesh 或旧固件在频段之间不转发组播。判断方法看手机和电视的 IP 是否在同一网段比如都是192.168.1.x子网掩码255.255.255.0。不放心可以先让两台设备连同一个频段测试。3.4 IGMP Snooping 与组播过滤IGMP Snooping 是交换机/路由器用来只把组播发给订阅了的端口的机制。实现得好它能节省带宽实现有缺陷时SSDP、mDNS 这类报文会被误丢表现为刚开机能搜到过几分钟就搜不到了或者时好时坏。可以尝试在路由器里关闭 IGMP Snooping或者开启组播转发 / 多播增强之类的选项后对比关闭无线组播转单播或组播速率限制后再测试升级路由器固件。具体是开还是关效果更好跟设备有关两种都测一下。3.5 多层路由与中继家里常见的光猫路由 再接一个路由器组合如果第二个路由器工作在路由模式下面的设备拿到192.168.0.x上面的拿到192.168.1.x两个网段之间组播不通SSDP 和 mDNS 都过不去。处理方式把第二个路由器改为AP 模式 / 桥接模式关闭它的 DHCP让所有设备在同一网段无线中继器选桥接中继而不是路由中继Mesh 系统统一用主路由分配地址。3.6 防火墙Windows 电脑做接收端网络类型设为公用网络时系统防火墙默认会拦截发现报文改成专用网络并允许接收程序通过防火墙手机端部分安全软件、VPN、代理/加速器会接管流量投屏前先关掉 VPN电视端少数系统自带的网络防护也会拦截端口。四、“能看到但连不上 / 很快断开”4.1 电视端服务被杀安卓电视和盒子内存小系统为了省资源会杀后台投屏接收服务在后台被清理设备从列表里消失或点击无响应开启待机省电 / 快速待机后网络模块会在待机时休眠。处理在电视设置里把接收应用加入自启动/后台白名单关闭清理加速类工具对它的清理关闭省电待机中的待机断网类选项投屏前确保接收端应用在前台打开。4.2 IP 变化与缓存电视重新获取 IP 后手机里可能还缓存着旧的LOCATION地址点击就会失败。可以在路由器中给电视做DHCP 静态地址绑定或者重启手机端投屏应用刷新列表。4.3 手机侧的 HTTP 服务不通DLNA 推送本地视频时电视要回连手机。部分手机在省电模式下会限制后台网络导致电视拉流失败。推本地文件失败而推在线视频正常时优先怀疑这一点。五、“卡顿、花屏、延迟高”5.1 带宽与码率推送在线视频时由电视直接拉片源卡顿多半是电视自身网速或片源 CDN 的问题镜像时所有画面由手机实时编码后经 Wi-Fi 发出一份流要经过路由器两次手机→路由器→电视对空口占用更大。建议镜像时把清晰度或帧率调低一档尽量让电视走有线网络可以明显减少无线空口占用手机和电视都连 5G 频段。5.2 Wi-Fi 信道干扰在楼宇密集的环境里2.4G 只有 1/6/11 三个互不重叠的信道很容易拥挤。可以用 Wi-Fi 分析类工具看周围信道占用情况手动选一个较空闲的信道5G 频段优先注意部分 DFS 信道在检测到雷达信号时会切换导致短暂断流路由器和电视之间尽量减少墙体遮挡路由器不要放在电视柜后面的金属区域。Miracast 的 P2P 链路如果和路由器工作在不同信道设备需要在两个信道间分时切换也会造成卡顿。5.3 编码兼容问题可能原因处理有声音没画面电视不支持 H.265/HEVC 硬解换 H.264 片源或在发送端选兼容模式4K 视频卡顿严重电视解码能力不足降到 1080p画面正常没声音音频编码如 DTS、杜比不支持换音轨或转码10bit/HDR 片源偏色或黑屏设备不支持对应格式选 8bit SDR 版本老旧盒子的芯片可能只支持 H.264 硬解强行软解 H.265 会非常卡。六、用电脑辅助排查命令与脚本以下命令在与手机、电视同一 Wi-Fi的电脑上执行。6.1 基础连通性ping 与 arp# 查看本机 IP 和网段ipconfig# Windowsifconfig/ipaddr# macOS / Linux# ping 电视IP 可在电视网络设置或路由器后台查到ping192.168.1.23# 查看 ARP 表确认能否拿到电视的 MAC 地址arp-a能拿到 MAC 但 ping 不通可能是电视禁 ping不能直接判定为隔离ARP 表里也拿不到才更像是二层隔离或不在同一网段。6.2 用 Python 发送 SSDP M-SEARCHimportsocket MSEARCH(M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: ssdp:discover\r\nMX: 3\r\nST: urn:schemas-upnp-org:device:MediaRenderer:1\r\n\r\n)socksocket.socket(socket.AF_INET,socket.SOCK_DGRAM,socket.IPPROTO_UDP)sock.setsockopt(socket.IPPROTO_IP,socket.IP_MULTICAST_TTL,2)sock.settimeout(5)sock.sendto(MSEARCH.encode(),(239.255.255.250,1900))foundset()try:whileTrue:data,addrsock.recvfrom(65507)textdata.decode(errorsignore)locationnext((l.split(:,1)[1].strip()forlintext.split(\r\n)ifl.lower().startswith(location:)),)if(addr[0],location)notinfound:found.add((addr[0],location))print(f{addr[0]:16}{location})exceptsocket.timeout:passprint(f共发现{len(found)}个 MediaRenderer)搜到电视说明组播和单播都通问题在手机端App 权限、VPN、省电搜不到把ST改成ssdp:all再试仍然没有就回到第三节排查网络能搜到但访问LOCATION失败用curl访问该地址检查电视端服务是否存活。curl-vhttp://192.168.1.23:49152/description.xml# 以实际 LOCATION 为准多网卡电脑同时有有线、虚拟机网卡、VPN可能从错误的网卡发出组播测试前先断开其他网卡或者在 socket 上绑定 Wi-Fi 网卡的 IP。6.3 Linux 下用 gssdp 与 avahi 工具# Debian/Ubuntusudoaptinstallgupnp-tools avahi-utils# SSDP 发现图形界面gssdp-device-sniffer# 浏览全部 mDNS 服务并解析地址avahi-browse-art# 只看 AirPlay 设备avahi-browse-rt_airplay._tcpmacOS 自带 Bonjour 工具dns-sd-B_airplay._tcp local.6.4 抓包确认报文是否到达# SSDPsudotcpdump-ien0-nudp port1900# mDNSsudotcpdump-ien0-nudp port5353网卡名按实际情况替换Linux 常见为wlan0。如果能看到自己发出的 M-SEARCH却始终看不到电视的 NOTIFY 或回复基本可以确认组播在路由器上被拦了。七、分场景快速定位现象优先怀疑第一步动作一直搜不到电脑也 ping 不通电视AP 隔离、访客网络、不同网段核对两边 IP 网段关闭 AP 隔离能 ping 通但搜不到组播过滤、IGMP Snooping运行 SSDP 脚本/抓包调整组播设置开机能搜到一会儿就消失IGMP Snooping、电视后台被杀关闭清理/省电测试组播设置公司、酒店网络都不行网络策略隔离换成手机热点测试或改用 Miracast能连上本地视频播放失败手机省电限制、防火墙关闭省电模式和 VPN在线视频卡顿电视网速、片源电视接网线测电视网速镜像卡顿、延迟高空口拥挤、信道干扰切 5G换信道降低清晰度有声无画或黑屏编码不兼容换 H.264 / 1080p 片源八、最终排查清单按顺序逐项检查大部分问题在前几步就能定位手机和电视连的是同一个 Wi-Fi 的主网络不是访客网络两台设备的 IP 在同一网段子网掩码一致家里没有处于路由模式的二级路由器中继或 Mesh 是桥接模式路由器已关闭 AP 隔离 / 客户端隔离尝试切换 IGMP Snooping、组播转单播等设置并对比效果手机已关闭 VPN、代理、加速器和省电模式电视端接收应用在前台已加入自启动/后台白名单关闭了待机断网电脑能 ping 通电视arp -a能看到电视的 MACSSDP 脚本或avahi-browse能发现电视Windows 接收端的网络类型是专用网络防火墙已放行镜像时双方都在 5G 频段信道不拥挤电视尽量走有线片源编码是电视支持的格式不确定时用 H.264、1080p 测试用手机热点做对照测试热点下正常说明问题在家里路由器结语投屏故障看起来五花八门但按发现 → 连接 → 传输分层再配合 ping、arp、SSDP/mDNS 脚本和抓包基本都能找到具体原因。最常见的根因集中在 AP 隔离、跨网段和组播过滤这三类排查时优先看这几项。文中的 SSDP 脚本对任何支持 DLNA 的接收端都适用在电视上装一个支持 DLNA 的接收端就可以用它来验证发现流程是否正常。