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

  1. Accept that the content is not supported; DRM cannot be circumvented by this tool.
  2. Check for a non-DRM format/variant of the same media and download that instead.
  3. 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

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


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)