Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

MixDrop Direct Link Resolver

Resolve a MixDrop file ID into a signed, direct mxcontent.net MP4 URL. The server reverse-engineers the embed player page; the bundled UI can test playback locally.

Input: el09xempuzkxz4 — not a full URL.

Architecture

flowchart TB
  subgraph client ["Browser"]
    UI["public/app.js"]
    VID["<video>"]
  end

  subgraph server ["Node server :8789"]
    IDX["index.js"]
    RES["POST /api/resolve"]
    STR["GET /api/stream"]
    DEC["decode-page.js"]
    HTTP["http/client.js"]
  end

  subgraph upstream ["Upstream"]
    EMB["miixdrop.net/e/{id}"]
    CDN["*.mxcontent.net/v2/{id}.mp4"]
  end

  UI -->|file ID| RES
  RES --> HTTP
  HTTP -->|HTTP/2| EMB
  EMB --> DEC
  DEC -->|MDCore.wurl| RES
  RES -->|directLink + referer| UI
  UI -->|proxy URL| STR
  STR --> HTTP
  HTTP -->|HTTP/1.1 + Referer| CDN
  STR -->|range passthrough| VID
Loading
Layer Host Role
Site miixdrop.net Canonical origin; mirrors redirect here
Embed miixdrop.net/e/{id} Packed player script with stream URL
CDN *.mxcontent.net Signed MP4 delivery

Stream resolution

Resolution is a single path — no mirror lists, no protocol retries.

sequenceDiagram
  participant API as /api/resolve
  participant H2 as HTTP/2 client
  participant Embed as miixdrop.net
  participant Decode as decode-page
  participant H1 as HTTP/1.1 client
  participant CDN as mxcontent.net

  API->>H2: GET /e/{id}
  H2->>Embed: Chrome TLS + document headers
  Embed-->>H2: HTML + packed eval()
  H2-->>API: page body
  API->>Decode: unpack eval → MDCore.wurl
  Decode-->>API: https://a-delivery46.mxcontent.net/v2/{id}.mp4?s=…
  API->>H1: Range bytes=0-15, Referer miixdrop.net/
  H1->>CDN: probe
  CDN-->>H1: 206 + ftyp
  API-->>API: validate host ends with mxcontent.net
Loading
  1. Fetch embedGET https://miixdrop.net/e/{id} over HTTP/2 with a reused session and Chrome-like TLS.
  2. Unpack player — the page ships a packed eval() string. decode-page.js unpacks it and reads MDCore.wurl, a protocol-relative CDN URL (//a-delivery46.mxcontent.net/v2/{id}.mp4?…).
  3. Probe CDNGET the signed URL over HTTP/1.1 (the CDN rejects HTTP/2) with Referer: https://miixdrop.net/. A bytes=0-15 range must return 206 and an MP4 ftyp atom.
  4. Respond — JSON with directLink, referer, title, and videoId.

The signed query parameters (s, e, _t) are issued by MixDrop and expire; resolve again when a link stops working.

Playback

The direct CDN URL is the real stream. The proxy exists only because browsers cannot set a cross-origin Referer on <video src> — and the CDN returns 403 without https://miixdrop.net/ (not mixdrop.net).

sequenceDiagram
  participant UI as app.js
  participant Proxy as /api/stream
  participant CDN as mxcontent.net

  UI->>Proxy: GET ?url=…&referer=…
  Note over UI,Proxy: Browser sends Range headers
  Proxy->>CDN: same Range + Referer from resolve
  CDN-->>Proxy: 200 or 206
  Proxy-->>UI: passthrough headers + body
  UI->>UI: video.play()
Loading
  • Direct link — use in tools that let you set Referer (curl, ffmpeg, download managers).
  • Proxy link — for in-page test playback; forwards Range and sets Referer server-side. No caching, no re-encoding.

Transport split matches what was traced on the wire: HTTP/2 for the embed page, HTTP/1.1 for CDN byte ranges.

Quick start

Requirements: Node.js 18+

npm start

Open http://localhost:8789, enter a file ID, and resolve.

curl -s -X POST http://localhost:8789/api/resolve \
  -H 'Content-Type: application/json' \
  -d '{"videoId":"el09xempuzkxz4"}'

Optional: PORT=8789 (default 8789).

Project layout

public/                 Web UI
src/lib/                Shared client helpers (parse-video-id, timers)
src/server/
  index.js              Static files + API router
  http/                 TLS fingerprint + H2 embed / H1 CDN clients
  routes/               resolve and stream handlers
  mixdrop/
    decode-page.js      Unpack eval, extract wurl + title
    resolver.js         Embed fetch → decode → CDN probe

API

POST /api/resolve

{ "videoId": "el09xempuzkxz4" }

200

{
  "videoId": "el09xempuzkxz4",
  "title": "Example Title",
  "directLink": "https://a-delivery46.mxcontent.net/v2/el09xempuzkxz4.mp4?s=…&e=…&_t=…",
  "referer": "https://miixdrop.net/"
}

400 — invalid ID, embed failure, CDN probe failure.

GET /api/stream

Query: url (direct link), referer (from resolve). Supports Range and HEAD. Returns CDN bytes with upstream status 200 (full) or 206 (ranged).

Disclaimer

This project is provided for educational and research purposes only. It documents how a third-party streaming embed exposes CDN URLs through client-side player logic. It is not affiliated with, endorsed by, or sponsored by MixDrop or any related service.

You are responsible for complying with applicable laws, terms of service, and copyright obligations in your jurisdiction. Do not use this software to access, distribute, or reproduce content you do not have the right to use. The authors accept no liability for misuse.

About

Resolve MixDrop file IDs to direct mxcontent.net MP4 URLs. Node.js server fetches the embed page, extracts the signed CDN link from the player script, validates the stream, and exposes a referer-aware proxy for browser playback.

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages