Skip to main content

Capture WeChat Video Channel (视频号) live streams via fake screen casting (DLNA / AirPlay / Chromecast)

Project description

wechat-finder-dlna

中文文档

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

Looking for a single-binary, no-runtime-dependency version? Check out wechat-finder-dlna-rs — same protocols, async Rust, compiles to one static binary.

See also

  • wechat-finder-dlna-rs — Rust rewrite, single binary, async runtime
  • 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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wechat_finder_dlna-0.4.0.tar.gz (40.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wechat_finder_dlna-0.4.0-py3-none-any.whl (43.7 kB view details)

Uploaded Python 3

File details

Details for the file wechat_finder_dlna-0.4.0.tar.gz.

File metadata

  • Download URL: wechat_finder_dlna-0.4.0.tar.gz
  • Upload date:
  • Size: 40.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for wechat_finder_dlna-0.4.0.tar.gz
Algorithm Hash digest
SHA256 253d248672bf09c9d7467c9a30fa32c7506c65b3cd1b81bbbb48eb6f4ae78aa3
MD5 4048f573f0beb1ab7b79c56ff1730d54
BLAKE2b-256 8ffb05c28b465eff8c477a5eeecade01bd739341d3c266ef8011d0475ad3db5c

See more details on using hashes here.

File details

Details for the file wechat_finder_dlna-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for wechat_finder_dlna-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 177ccb0af179bf8f35c70708ee9bf703cecdf49448b99e0f825e64b36a7b1da1
MD5 5bac2dd7853f4db6fd521e2b10cc1665
BLAKE2b-256 17f97c043dac94b480418b2853f3f992efed997387ef28852d3513630f63dd8a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page