通过模拟投屏设备捕获直播流 URL
ScreenMirroringCapture 是一个基于 wechat-finder-dlna 项目开发的工具,用于捕获直播流 URL。它在本地网络中模拟一个投屏设备(如电视),当您将视频号直播投屏到该设备时,工具会捕获真实的 m3u8 流地址。
- 多协议支持:同时支持 DLNA/UPnP、AirPlay 和 Google Cast 三种投屏协议
- 图形界面:提供直观的 tkinter GUI,方便操作
- 命令行模式:支持通过命令行参数进行配置和使用
- 流信息检测:自动检测流的编码格式、分辨率、帧率等信息
- 录制功能:支持使用 FFmpeg 进行录制
- 历史记录:保存捕获历史,方便回溯
- 播放器集成:支持 VLC、mpv、ffplay 等播放器直接播放
- 跨平台:支持 Windows、macOS 和 Linux(
run.bat仅限 Windows)
- Python:3.10 或更高版本
- FFmpeg(可选):用于录制功能,需要安装并添加到 PATH
- 操作系统:Windows、macOS 或 Linux
从 Releases 页面下载最新版本:
| 版本 | 说明 |
|---|---|
| exe 安装包 | 双击运行,开箱即用,无需安装 Python |
| OneDir 包 | 解压即用,体积较小 |
# 克隆仓库
git clone https://github.com/Muchen0x/ScreenMirroringCapture.git
cd ScreenMirroringCapture
# 创建虚拟环境(推荐)
python -m venv venv
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate
# 安装
pip install -e .双击运行 run.bat,脚本会自动创建虚拟环境、安装依赖并启动 GUI。
pip install zeroconf>=0.131.0 protobuf>=4.25.0 cryptography>=41.0.0 pycryptodome>=3.23.0# 启动 GUI
screen-mirroring-capture-gui
# 或
python -m screen_mirroring_capture --guiGUI 功能说明:
-
设备设置:
- 设备名称:设置投屏设备显示名称(默认:ScreenMirroringCapture)
- 网络:选择绑定的网络适配器
- 协议:启用/禁用 DLNA、AirPlay、Cast 协议,可自定义端口
-
捕获:
- 点击「开始」启动捕获服务
- 在微信中选择投屏到设备
- 捕获成功后显示 URL 和流信息
-
播放器:
- 点击「播放器」按钮配置本地播放器
- 捕获 URL 后可直接在播放器中打开
-
录制:
- 捕获 URL 后点击「录制」按钮
- 配置保存目录、文件名、格式和时长
- 支持实时显示录制进度
-
历史:
- 查看所有捕获历史记录
- 支持右键菜单操作:复制 URL、修改备注、录制、播放、删除
# 使用所有协议
screen-mirroring-capture
# 仅使用 DLNA
screen-mirroring-capture --protocol dlna
# 使用 AirPlay 和 Cast
screen-mirroring-capture --protocol airplay cast
# 自定义设备名称
screen-mirroring-capture --name "我的电视"
# 捕获并录制
screen-mirroring-capture --record live.mp4
# 设置录制时长(1小时)
screen-mirroring-capture --record live.mp4 --duration 01:00:00
# 管道到 VLC 播放
screen-mirroring-capture | xargs vlc
# 启用调试日志
screen-mirroring-capture -v命令行参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
--name |
投屏设备显示名称 | MAGI |
--port |
DLNA HTTP 基础端口 | 9090 |
--protocol |
启用的协议(可多选) | 所有协议 |
--record |
录制输出文件路径 | - |
--duration |
录制时长(HH:MM:SS 格式) | - |
-v, --verbose |
启用调试日志 | 关闭 |
--gui |
启动图形界面 | - |
- 启动 ScreenMirroringCapture
- 打开微信,进入视频号直播
- 点击直播页面的「分享」或「投屏」按钮
- 在设备列表中选择 ScreenMirroringCapture 设备
- 工具会自动捕获直播流 URL
- 可将 URL 复制到播放器中播放,或使用录制功能保存
- 在 GUI 中点击「编辑」按钮
- 点击「添加」选择播放器可执行文件
- 支持的播放器:
- VLC media player
- mpv
- ffplay (FFmpeg)
- 捕获 URL 后,点击对应的播放器按钮即可打开
ScreenMirroringCapture/
├── screen_mirroring_capture/
│ ├── __init__.py # 核心捕获逻辑
│ ├── __main__.py # CLI 入口
│ ├── gui.py # tkinter GUI
│ ├── airplay.py # AirPlay 接收器
│ ├── cast.py # Google Cast 接收器
│ ├── ssdp.py # SSDP 广播
│ ├── upnp.py # UPnP/DLNA 处理
│ ├── audio_capture.py # 音频捕获
│ ├── descriptors.py # XML 描述符
│ ├── net.py # 网络工具
│ ├── pairing.py # HAP 配对
│ └── generated/ # Protobuf 生成文件
├── pyproject.toml # 项目配置
├── LICENSE # GPL-3.0 许可证
├── run.bat # Windows 快速启动
└── README.md # 项目说明
ScreenMirroringCapture 通过以下方式工作:
- 设备模拟:在本地网络中模拟一个支持投屏的设备(如智能电视)
- 服务发现:
- DLNA:使用 SSDP (Simple Service Discovery Protocol) 广播设备信息
- AirPlay:使用 mDNS/Bonjour 广播
_airplay._tcp.local.服务 - Google Cast:使用 mDNS 广播
_googlecast._tcp.local.服务
- 协议实现:
- DLNA:实现 UPnP 设备描述和 AVTransport 服务
- AirPlay:实现 AirPlay 2 配对握手(HAP)和 FairPlay 认证
- Google Cast:实现 Cast V2 协议(protobuf over TLS)
- URL 捕获:当发送端投屏时,解析协议消息获取媒体 URL
- 确保设备和手机在同一局域网
- 检查防火墙是否阻止了端口通信
- 尝试禁用其他协议,仅使用特定协议
- 启用调试日志查看详细信息:
screen-mirroring-capture -v
- 捕获 URL 后,在 GUI 中点击「录制」
- 或使用命令行:
screen-mirroring-capture --record output.mp4 - 需要安装 FFmpeg 并添加到 PATH
- Windows 10/11
- macOS 10.15+
- Linux (Ubuntu 18.04+, Debian 10+, 等)
AirPlay 音频捕获需要手动启用:
- 在 GUI 中勾选「录制 AirPlay 音频」
- 选择音频保存目录
- 投屏时音频会自动录制为 AAC 格式
本项目基于 gtoxlili/wechat-finder-dlna 项目开发,感谢原作者的贡献。
本项目采用 GNU General Public License v3.0 许可证。
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支:
git checkout -b feature/your-feature - 提交更改:
git commit -m 'Add some feature' - 推送到分支:
git push origin feature/your-feature - 提交 Pull Request
本工具仅供学习和研究使用。使用本工具捕获的内容请遵守相关法律法规和平台服务条款。作者不对因使用本工具产生的任何问题负责。