ytdl-org/youtube-dl · error · ExtractorError

this video has been %s

Error message

this video has been %s

What it means

Raised by the LINE LIVE extractor when no broadcast formats were found and the broadcast's archiveStatus is anything other than 'ARCHIVED' — the message embeds the lowercased status (e.g. 'this video has been expired' or 'terminated'). It is expected=True, reporting why the archive is unavailable.

Source

Thrown at youtube_dl/extractor/line.py:186

                continue
            if k == 'abr':
                formats.extend(self._extract_m3u8_formats(
                    v, broadcast_id, 'mp4', protocol,
                    m3u8_id='hls', fatal=False))
                continue
            f = {
                'ext': 'mp4',
                'format_id': 'hls-' + k,
                'protocol': protocol,
                'url': v,
            }
            if not k.isdigit():
                f['vcodec'] = 'none'
            formats.append(f)
        if not formats:
            archive_status = item.get('archiveStatus')
            if archive_status != 'ARCHIVED':
                raise ExtractorError('this video has been ' + archive_status.lower(), expected=True)
        self._sort_formats(formats)
        info['formats'] = formats
        return info


class LineLiveChannelIE(LineLiveBaseIE):
    _VALID_URL = r'https?://live\.line\.me/channels/(?P<id>\d+)(?!/broadcast/\d+)(?:[/?&#]|$)'
    _TEST = {
        'url': 'https://live.line.me/channels/5893542',
        'info_dict': {
            'id': '5893542',
            'title': 'いくらちゃん',
            'description': 'md5:c3a4af801f43b2fac0b02294976580be',
        },
        'playlist_mincount': 29
    }

    def _archived_broadcasts_entries(self, archived_broadcasts, channel_id):

View on GitHub (pinned to 956b8c5855)

Solutions

  1. If the archive expired, find a fan re-upload or clip of the broadcast
  2. Record broadcasts while they are live or shortly after, before the archive window closes
  3. Verify the broadcast URL still shows a replay in the LINE LIVE app
  4. Update youtube-dl/yt-dlp in case the status enum grew new values
Defensive patterns

Strategy: try-catch

Try / catch

try:
    ydl.extract_info(url)
except ExtractorError as e:
    if 'this video has been' in str(e):
        status = str(e).split('been ', 1)[1]
        if status == 'expired':
            find_mirror(broadcast_id)  # archive window closed permanently
    else:
        raise

Prevention

When it happens

Trigger: Opening a live.line.me broadcast URL whose protocol URLs (HLS/LLHP) yielded no formats and whose broadcastStatus/archiveStatus JSON field is e.g. 'EXPIRED' or 'TERMINATED' — i.e. the replay window closed or the broadcast was removed.

Common situations: LINE LIVE archives expiring after their retention window; broadcasts terminated by policy; following old broadcast links after expiry; attempting to download live-in-progress broadcasts whose archive is not yet generated.

Related errors


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