做局域网投屏的时候,我常遇到两类麻烦:电视在同一 Wi-Fi 里,但手机找不到;网页里明明有 HLS 流,却要把 m3u8 从开发者工具里抠出来再手动填。
TV 投屏助手把这两步收进同一个 App:扫描局域网电视,用 DLNA 把 m3u8 推过去,同时带一个内嵌浏览器,Network 面板可以直接点选检测到的 m3u8。目前是v1.0.9,包名com.tvcastassistant.app,Android 和 iOS 各有一份工程。
Android 安装包:v1.0.9,文件名 TVCastAssistant-v1.0.9-release.apk。安装包发在本账号的 CSDN 下载频道,搜索「TV 投屏助手」即可。
源码工程名tv-cast-assistant,目录是 Androidapp/与 iOSios/。
它适合谁
- 想在同一 Wi-Fi 下把 HLS / m3u8 投到支持 DLNA 的电视(小米电视等常见机型)
- 需要看网页请求、从页面里捞 m3u8,又不想开完整抓包环境
- 要对照 Android / iOS 两边实现(Kotlin + Jetpack Compose,Swift + SwiftUI)
- 准备上国内应用商店,需要一份不含 VPN、不含系统抓包的投屏工具
它不是万能投屏盒,也不替代专业播放器。定位很明确:局域网发现 + DLNA 投 m3u8 + 浏览检测 + 扫码填地址。
四个页签
应用底部是四个入口,和日常使用顺序一致。
1. 投屏:发现电视,推 m3u8
手机和电视连同一 Wi-Fi 后,扫描局域网设备。发现走 SSDP / UPnP,再读设备描述 XML,用厂商、型号、FriendlyName 等关键词标出电视。
选中设备后可以:
- 填网络 m3u8 地址
- 选本地
.m3u8文件(同目录 ts 分片会由内置 HTTP 服务暴露给电视) - 发送 DLNA
SetAVTransportURI+Play
前提是电视打开了 DLNA / 无线投屏,并且能播 HLS。本地列表里的分片需要和播放列表在同一目录。
2. 网络:看本机和网段
「网络」页展示本机 IP、网段和设备列表,可做快速扫描或更深一点的探测,并把可投屏设备标成 DLNA。排查「为什么扫不到电视」时,先看这一页往往比反复点投屏更有效。
3. 浏览:内嵌浏览器 + Network 识别 m3u8
内嵌浏览器打开网页后,Network 面板会记录请求。可以过滤「仅 m3u8」,点一条记录即可选中并投屏。iOS 侧用 WKWebView,能力和 Android 对齐。
对开发者来说,这相当于把「看 Network、复制 HLS、再切到投屏页粘贴」收成一次操作。请求记录只留在本机,不会上传。
4. 扫一扫:二维码填投屏地址
相机扫码后把内容填进投屏地址,少一次手打长 URL。也可以用来识别屏幕上的二维码。权限按需申请:扫码要相机,选本地文件才碰存储。
应用内还有微信赞赏码,方便支持开发。
为什么说适合上架小米应用商店
国内商店对 VPN、系统级抓包比较敏感。当前版本已经去掉 VPN 抓包相关能力,投屏和扫描都限制在同一 Wi-Fi 的 DLNA / UPnP 路径上。
隐私面上也比较克制:不注册、不接广告 SDK、不采集通讯录和精确位置。相机和存储都是用户主动操作才用。
Android 要求 7.0+(API 24)。构建:
./gradlew assembleDebugiOS 在ios/,需要 Mac + Xcode,系统要求 iOS 16.0+,真机才能验证局域网投屏。Windows 环境编不出 IPA。
实现要点(方便对照源码)
| 能力 | 做法 |
|---|---|
| 设备发现 | SSDP M-SEARCH,再解析 UPnP 设备描述 |
| 电视识别 | Manufacturer / Model / FriendlyName 关键词 |
| 投屏 | DLNA AVTransport |
| 本地 m3u8 | 本机 HTTP 服务把播放列表和 ts 分片提供给电视 |
| 网页流 | WebView / WKWebView 拦截请求,识别 m3u8 |
| 扫码 | 相机 + 条码识别,结果回填地址 |
仓库结构大致是app/(Android)和ios/(Xcode 工程)。签名模板是keystore.properties.example,真正的 keystore 和local.properties不要提交。
使用时注意
- 手机和电视必须同一局域网,访客 Wi-Fi / AP 隔离会直接扫不到。
- 电视要打开 DLNA;只开投屏镜像、不支持 HLS 的设备,地址推过去也不会播。
- 只投你有权播放的内容。应用本身不做片源聚合。
- iOS 第一次使用要允许「本地网络」,扫码要允许相机。
小结
如果你需要的是「扫到电视 → 投 m3u8 → 必要时从网页 Network 里点一条流」,这个开源项目比再搭一套 SSDP + DLNA + WebView 拦截要省事。Android 可直接编,iOS 源码也在同一仓库里。欢迎对照源码改电视识别规则,或按自己的局域网环境做二次开发。