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_urlView on GitHub (pinned to 956b8c5855)
Solutions
- Update to the latest youtube-dl or yt-dlp; Metacafe handling has seen multiple rewrites.
- Run with -v to identify which embedding branch failed last and inspect the downloaded page.
- Check the URL in a browser to confirm the video still plays there at all.
- 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
- Treat Metacafe URLs as best-effort; the legacy site frequently serves unextractable pages.
- For archival needs, fetch the page via web.archive.org and pull the media URL from the snapshot.
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.