ytdl-org/youtube-dl · error · ExtractorError

Unsupported video type

Error message

Unsupported video type

What it means

Final fallback in the Metacafe extractor: after the flashvars branch, it tries the swfobject config XML and collects <source> entries into video_url; if video_url is still None at the end of _real_extract, 'Unsupported video type' is raised. It means every known embedding strategy for this page produced nothing usable. Not expected=True.

Source

Thrown at youtube_dl/extractor/metacafe.py:251

            if flashvars:
                video_url = []
                for source in flashvars.get('sources'):
                    source_url = source.get('src')
                    if not source_url:
                        continue
                    ext = mimetype2ext(source.get('type')) or determine_ext(source_url)
                    if ext == 'm3u8':
                        video_url.extend(self._extract_m3u8_formats(
                            source_url, video_id, 'mp4',
                            'm3u8_native', m3u8_id='hls', fatal=False))
                    else:
                        video_url.append({
                            'url': source_url,
                            'ext': ext,
                        })

        if video_url is None:
            raise ExtractorError('Unsupported video type')

        description = self._html_search_meta(
            ['og:description', 'twitter:description', 'description'],
            webpage, 'title', fatal=False)
        thumbnail = self._html_search_meta(
            ['og:image', 'twitter:image'], webpage, 'title', fatal=False)
        video_uploader = self._html_search_regex(
            r'submitter=(.*?);|googletag\.pubads\(\)\.setTargeting\("(?:channel|submiter)","([^"]+)"\);',
            webpage, 'uploader nickname', fatal=False)
        duration = int_or_none(
            self._html_search_meta('video:duration', webpage, default=None))
        age_limit = (
            18
            if re.search(r'(?:"contentRating":|"rating",)"restricted"', webpage)
            else 0)

        if isinstance(video_url, list):
            formats = video_url

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Update to the latest youtube-dl or yt-dlp; Metacafe handling has seen multiple rewrites.
  2. Run with -v to identify which embedding branch failed last and inspect the downloaded page.
  3. Check the URL in a browser to confirm the video still plays there at all.
  4. If the site is dead or fully redesigned, use an archived page (web.archive.org) to locate the original media URL and download it directly.
Defensive patterns

Strategy: fallback

Try / catch

try:
    info = ydl.extract_info(url, download=False)
except ExtractorError as e:
    if 'Unsupported video type' in str(e):
        try_webarchive_or_browser_devtools(url)  # last resort: recover media URL manually
    else:
        raise

Prevention

When it happens

Trigger: None of the probes matched: no mediaURL/videoURL param, no <video src>, no usable flashvars mediaData, and either no swfobject embedSWF config URL or a config XML with no playable <source> elements (all branches left video_url None).

Common situations: Metacafe page fully redesigned so all legacy markers are gone; video served only via a DRM/preview mechanism the extractor never supported; geo-blocked page serving an empty shell; the site (now largely defunct) serving error pages with 200 status.

Related errors


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/c2b624b595ca4e90. Report an issue: GitHub.