Skip to main content

wechat-finder-dlna

中文文档 · Rust version →

PyPI Python License

Grab WeChat Video Channel (视频号) live stream URLs by faking a TV on your LAN.

No proxy, no certificate, no MITM — just standard casting protocols your smart TV already speaks.

Supports three casting protocols simultaneously:

Protocol Discovery How it captures
DLNA/UPnP SSDP multicast SetAVTransportURI SOAP action
AirPlay mDNS/Bonjour HTTP /play endpoint
Google Cast mDNS Cast V2 LOAD command over TLS
┌──────────┐  DLNA / AirPlay  ┌─────────────────────┐
│  WeChat   │  / Chromecast   │ wechat-finder-dlna  │
│  (phone)  │ ──────────────► │ (your computer)     │
└──────────┘   "投屏"         └────────┬────────────┘
                                       │
                              captures the m3u8 URL
                                       │
                                       ▼
                              ffmpeg / VLC / mpv / ...

The tool advertises itself as a media receiver on the local network using all three protocols. When you cast a live stream from WeChat (or Bilibili, iQiyi, Youku — anything that supports casting), the app sends the real stream URL. We grab it and either print it or pipe it straight into ffmpeg.

WeChat can't tell the difference between this and a real TV — there's nothing to detect.

Install

# uv (recommended)
uv tool install wechat-finder-dlna

# pip
pip install wechat-finder-dlna

Python 3.10+, dependencies are installed automatically.

Quick start

# All protocols enabled by default
wechat-finder-dlna

# DLNA only (original behavior)
wechat-finder-dlna --protocol dlna

# AirPlay + Chromecast only
wechat-finder-dlna --protocol airplay cast

# Record to file (needs ffmpeg)
wechat-finder-dlna --record live.mp4 --duration 01:00:00

# Pipe to VLC
wechat-finder-dlna | xargs vlc

# Show up as "Living Room TV" in the cast list
wechat-finder-dlna --name "Living Room TV"

As a library:

from wechat_finder_dlna import capture

url = capture(name="My Recorder")
# do whatever you want with the m3u8 URL

# Specify protocols
url = capture(name="My TV", protocols=["dlna", "airplay"])

Requirements

  • Python 3.10+
  • Phone and computer on the same WiFi / LAN
  • ffmpeg only if you use --record

How it works

DLNA/UPnP

  1. SSDP multicast — announces a MediaRenderer on 239.255.255.250:1900.
  2. UPnP device description — replies with XML descriptor that looks like a TV.
  3. SOAP control — the app sends SetAVTransportURI with the stream URL.

AirPlay

  1. mDNS/Bonjour — advertises an _airplay._tcp service via zeroconf.
  2. HTTP server — handles the /play endpoint where senders POST the video URL.

Google Cast (Chromecast)

  1. mDNS — advertises a _googlecast._tcp service.
  2. TLS + Cast V2 — runs a TLS server on port 8009 speaking the Cast protobuf protocol.
  3. Media LOAD — captures the contentId URL from the sender's LOAD command.

FAQ

Does this work with replays / VODs? This is for live streams. For VOD downloads, look into tools that use the WeChat Web sync protocol.

Does this work with apps other than WeChat? Yes — any app that supports DLNA/AirPlay/Chromecast casting works. Bilibili, iQiyi, Youku, Tencent Video, etc.

Can WeChat detect or block this? No. The protocol is standard UPnP/DLNA. From WeChat's perspective this is just another TV on the network.

Rust version

wechat-finder-dlna-rs — same protocols, async Rust, compiles to a single static binary with zero runtime dependencies. Better suited for long-running capture, embedded/NAS deployment, or if you don't want a Python runtime.

See also

  • dlnap — control DLNA renderers from the command line (the other direction: you push to a TV)
  • macast — full-featured DLNA renderer with GUI, uses mpv for playback

License

GPL-3.0

Release files for wechat-finder-dlna 0.4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wechat-finder-dlna 0.4.3
File Size Uploaded
wechat_finder_dlna-0.4.3.tar.gz 40.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wechat-finder-dlna 0.4.3
File Interpreter ABI Platform
wechat_finder_dlna-0.4.3-py3-none-any.whl Python 3 none any Details

Total release size: 84.1 kB

Release files / wechat_finder_dlna-0.4.3.tar.gz

Download URL wechat_finder_dlna-0.4.3.tar.gz
Size 40.6 kB
Tags Source
SHA-256 checksum
How to use checksums
88982aadbb4a2597fc5a495c489b42a52a9ec48738d4dcdc3313af4a9936bde3
BLAKE2b-256 checksum
How to use checksums
f2430ae129b32d059c7d7a8d522d28c8b5d405fca6b2f7bb7995decded447fac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release files / wechat_finder_dlna-0.4.3-py3-none-any.whl

Download URL wechat_finder_dlna-0.4.3-py3-none-any.whl
Size 43.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6d43646feecfb59be1929e2cb72aa0ef6306141f4886f6b6352f6a58a70d6156
BLAKE2b-256 checksum
How to use checksums
d2dcdb3a9b0ad439a1443e3446584fd9e3e3685b7876cd93ca2173ee4c4ef42e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release history Release notifications | RSS feed

This release

0.4.3 This release

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page