ytdl-org/youtube-dl · error · ExtractorError
%s said: video is not available
Error message
%s said: video is not available
What it means
Raised while iterating mediagen XML renditions when an RTMP rendition's <src> URL contains 'error_not_available.swf'. The CDN is returning a placeholder SWF instead of real media, meaning the specific rendition is unavailable (often region- or session-related). It is expected=True and aborts the whole extraction.
Source
Thrown at youtube_dl/extractor/mtv.py:93
'country, trying with the mobile version')
return self._extract_mobile_video_formats(mtvn_id)
raise ExtractorError('This video is not available from your country.',
expected=True)
formats = []
for rendition in mdoc.findall('.//rendition'):
if rendition.get('method') == 'hls':
hls_url = rendition.find('./src').text
formats.extend(self._extract_m3u8_formats(
hls_url, video_id, ext='mp4', entry_protocol='m3u8_native',
m3u8_id='hls', fatal=False))
else:
# fms
try:
_, _, ext = rendition.attrib['type'].partition('/')
rtmp_video_url = rendition.find('./src').text
if 'error_not_available.swf' in rtmp_video_url:
raise ExtractorError(
'%s said: video is not available' % self.IE_NAME,
expected=True)
if rtmp_video_url.endswith('siteunavail.png'):
continue
formats.extend([{
'ext': 'flv' if rtmp_video_url.startswith('rtmp') else ext,
'url': rtmp_video_url,
'format_id': '-'.join(filter(None, [
'rtmp' if rtmp_video_url.startswith('rtmp') else None,
rendition.get('bitrate')])),
'width': int(rendition.get('width')),
'height': int(rendition.get('height')),
}])
except (KeyError, TypeError):
raise ExtractorError('Invalid rendition field.')
if formats:
self._sort_formats(formats)
return formatsView on GitHub (pinned to 956b8c5855)
Solutions
- Retry with a US proxy/VPN: --proxy or --geo-verify-proxy.
- Update youtube-dl to pick up extractor fixes if the site changed its unavailability signaling.
- Try the video page on the network's own site to confirm it is actually playable for your session.
Example fix
youtube-dl --geo-verify-proxy '<mtv-family url>'
Defensive patterns
Strategy: retry
Try / catch
except ExtractorError as e:
if 'video is not available' in str(e):
result = retry(url, proxy=next_proxy()) # usually region/session related
if not result:
mark_permanently_unavailable(url)
else:
raise Prevention
- Prefer HLS renditions when available — the m3u8 path bypasses this RTMP-specific check.
- Use a US proxy for MTV-family content by default.
- Update the extractor so changed unavailability markers are handled.
When it happens
Trigger: Any MTV-family _extract_video_formats call where a non-HLS rendition's rtmp_video_url contains the substring 'error_not_available.swf'.
Common situations: MTV-family videos unavailable in the requesting region or for anonymous sessions; CDN edge issues; site-side changes to how unavailable renditions are signaled — update youtube-dl if it happens for clearly available videos.
Related errors
- This video is not available from your country.
- %s returned error: %s - %s
- %s: No songs found, try using proxy
- %s (site code %d)
- %s returned error: %s
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/b7dd0cee1976a99c.
Report an issue: GitHub.