tonhowtf/omniget · error
Downloaded streams are DRM-protected and cannot be merged…
Error message
Downloaded streams are DRM-protected and cannot be merged. This content is not supported.
What it means
translate_ytdlp_error at ytdlp.rs:4447 maps the stderr pattern 'invalid data found when processing input' to this message. yt-dlp (via ffmpeg) received stream bytes it cannot parse, which in this pipeline indicates DRM-protected media that cannot be decrypted or merged. The library throws it to declare the content unsupported rather than retrying.
Solutions
- Accept that the content is not supported; DRM cannot be circumvented by this tool.
- Check for a non-DRM format/variant of the same media and download that instead.
- If you believe the media is NOT DRM-protected, update yt-dlp and retry — occasional site changes can mislabel formats.
Example fix
// before: request 'best' which may pick a DRM-protected manifest let out = run_ytdlp(&["-f", "best", url])?; // after: restrict to clear (non-DRM) formats let out = run_ytdlp(&["-f", "best[format_note!*=DRM]/best", url])?;
Defensive patterns
Strategy: fallback
Validate before calling
// Inspect the manifest for DRM signals before downloading
const manifest = await probeFormats(url);
const drm = manifest.formats.some(f => /drm|widevine|playready|fairplay/i.test(f.format_note || f.protocol || ''));
if (drm) throw new Error('DRM-protected content — not supported, abort before download.'); Try / catch
try {
await download(url, '-f best');
} catch (e) {
if (isDrmError(e)) reportUnsupported(url); // do not retry DRM content
else throw e;
} Prevention
- Prefer explicit non-DRM format selectors when a site mixes clear and encrypted streams
- Treat DRM errors as terminal — never loop retries on protected media
- Stick to sources known to serve clear streams
When it happens
Trigger: During merge/post-processing, ffmpeg reports 'invalid data found when processing input' — encountered when the downloaded audio/video streams are DRM-protected (e.g. Widevine-protected manifests served instead of clear streams).
Common situations: Attempting to download DRM-protected streaming-service content (Netflix, Disney+, some licensed YouTube movie rentals) where yt-dlp fetches encrypted segments; subscribing to a format that is actually encrypted CENC data.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- ffmpeg falhou
- MB não cabem s de vídeo — aumente o alvo ou encurte o clipe
- a janela de corte ficou vazia — o vídeo tem
- Access denied (403). The video may be private or…
- alvo pequeno demais para
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/39d089b28eaa71ea.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/ytdlp.rs:4447
return anyhow!("Server returned error 429 (too many requests). Try again later.");
}
if lower.contains("http error 403") || lower.contains("forbidden") {
return anyhow!("Access denied (403). The video may be private or region-restricted.");
}
if lower.contains("sign in to confirm")
|| lower.contains("login required")
|| stderr.contains("请先登录")
|| stderr.contains("需要登录")
|| stderr.contains("登录后可")
|| stderr.contains("仅登录用户")
|| lower.contains("this video is only available") && lower.contains("members")
{
return anyhow!(
"This video requires login. Import cookies for this site in Settings → Cookies, then retry."
);
}
if lower.contains("invalid data found when processing input") {
return anyhow!(
"Downloaded streams are DRM-protected and cannot be merged. This content is not supported."
);
}
if lower.contains("nsig extraction failed") || lower.contains("nsig") {
return anyhow!("Video extraction failed. Update yt-dlp or try again.");
}
if lower.contains("cannot parse data")
|| lower.contains("please report this issue")
|| (lower.contains("confirm you are on the latest version") && lower.contains("yt-dlp"))
{
return anyhow!(
"yt-dlp extractor is broken for this site. Update yt-dlp in Settings → Dependencies, then retry."
);
}
if lower.contains("requested format") && lower.contains("not available") {
return anyhow!(
"Requested format is not available. The download will retry with a compatible format."
);View on GitHub (pinned to 8600b91f42)