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 formats

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Retry with a US proxy/VPN: --proxy or --geo-verify-proxy.
  2. Update youtube-dl to pick up extractor fixes if the site changed its unavailability signaling.
  3. 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

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


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