ytdl-org/youtube-dl · error · ExtractorError

This live stream has already finished.

Error message

This live stream has already finished.

What it means

Raised by the Laola1TvBaseIE._extract_video path when the video page contains the German text 'Dieser Livestream ist bereits beendet.', meaning the live stream is over. It is expected=True, so it reports cleanly that the content is finished rather than failing with a parse error.

Source

Thrown at youtube_dl/extractor/laola1tv.py:130

        return {
            'id': video_id,
            'title': self._live_title(title) if is_live else title,
            'upload_date': unified_strdate(_v('time_date')),
            'uploader': _v('meta_organisation'),
            'categories': categories,
            'is_live': is_live,
            'formats': formats,
        }


class Laola1TvBaseIE(Laola1TvEmbedIE):
    def _extract_video(self, url):
        display_id = self._match_id(url)
        webpage = self._download_webpage(url, display_id)

        if 'Dieser Livestream ist bereits beendet.' in webpage:
            raise ExtractorError('This live stream has already finished.', expected=True)

        conf = self._parse_json(self._search_regex(
            r'(?s)conf\s*=\s*({.+?});', webpage, 'conf'),
            display_id,
            transform_source=lambda s: js_to_json(re.sub(r'shareurl:.+,', '', s)))
        video_id = conf['videoid']

        config = self._download_json(conf['configUrl'], video_id, query={
            'videoid': video_id,
            'partnerid': conf['partnerid'],
            'language': conf.get('language', ''),
            'portal': conf.get('portalid', ''),
        })
        error = config.get('error')
        if error:
            raise ExtractorError('%s said: %s' % (self.IE_NAME, error), expected=True)

        video_data = config['video']

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Wait for the VOD/VOD-URL variant to be published and use that URL instead of the live one
  2. Check the event page for a replay link once processing completes
  3. Record the stream live next time (e.g. with livestream mode) rather than fetching afterwards
  4. Verify in a browser that a replay actually exists before retrying
Defensive patterns

Strategy: try-catch

Try / catch

try:
    ydl.extract_info(url)
except ExtractorError as e:
    if 'already finished' in str(e):
        schedule_vod_check(url, later=True)  # retry once VOD is published
    else:
        raise

Prevention

When it happens

Trigger: Opening any laola1.tv video page after its live stream ended — the site keeps the page up but embeds the German end-of-stream notice; the extractor checks the literal string before parsing the conf JSON.

Common situations: Downloading event VOD URLs while the event is still listed but the stream finished and no VOD was published yet; time-zone confusion about when a broadcast ends; following live links from schedules after the fact.

Related errors


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