OverviewFilesCommitsIssuesDocsReleasesPeers

stremio-vsembed commits / 310ac0a

probe: record full media request headers, not just the referer
vidlink's proxy returns 428/429/403 to curl for a URL the browser fetches fine, so the difference is the header set (or the TLS fingerprint). You cannot replay what you did not record, and whether ffmpeg can fetch the URL is the only thing that decides if a source is usable for ingest. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
310ac0a7ba9a2690193e205ec7e319da4017ae60
by plankatron <fleeky@gmail.com> · 2026-08-11T16:28:29.000Z

Changed files (1) +7 -2

node_helper/source_probe.mjs +7 -2
……@@ -55,7 +55,12 @@ ctx.on('page', p => setTimeout(() => {
5555ctx.on('request', r => {
5656 const u = r.url();
5757 if (NOISE.test(u)) return;
58 if (MEDIA.test(u)) media.set(u, (r.headers() || {}).referer || null);
58 // FULL headers, not just the referer. vidlink's proxy returns 428/429/403 to
59 // curl for a URL the browser fetches fine, so the difference IS the header
60 // set (or the TLS fingerprint) -- and you cannot replay what you did not
61 // record. This is the artefact that decides whether a source is usable by
62 // ffmpeg at all, which is the only thing that matters for ingest.
63 if (MEDIA.test(u)) media.set(u, r.headers() || {});
5964});
6065
6166ctx.on('response', async resp => {
……@@ -112,6 +117,6 @@ await ctx.close();
112117fs.rmSync(PROFILE, { recursive: true, force: true });
113118
114119console.log(JSON.stringify({
115 media: [...media.entries()].map(([url, referer]) => ({ url, referer })),
120 media: [...media.entries()].map(([url, headers]) => ({ url, headers })),
116121 api, cookies, title, bodyText,
117122}));