{"record":{"id":"03f6d1c6cf962413","repo":"ytdl-org/youtube-dl","slug":"uploading-for-replay-please-wait","errorCode":null,"errorMessage":"Uploading for replay. Please wait...","messagePattern":"Uploading for replay\\. Please wait\\.\\.\\.","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"warning","filePath":"youtube_dl/extractor/vlive.py","lineNumber":168,"sourceCode":"                self._extract_video_info(video_id, vod_id, inkey))\n        elif video_type == 'LIVE':\n            status = video.get('status')\n            if status == 'ON_AIR':\n                stream_url = self._call_api(\n                    'old/v3/live/%s/playInfo',\n                    video_id)['result']['adaptiveStreamUrl']\n                formats = self._extract_m3u8_formats(stream_url, video_id, 'mp4')\n                self._sort_formats(formats)\n                info = get_common_fields()\n                info.update({\n                    'title': self._live_title(video['title']),\n                    'id': video_id,\n                    'formats': formats,\n                    'is_live': True,\n                })\n                return info\n            elif status == 'ENDED':\n                raise ExtractorError(\n                    'Uploading for replay. Please wait...', expected=True)\n            elif status == 'RESERVED':\n                raise ExtractorError('Coming soon!', expected=True)\n            elif video.get('exposeStatus') == 'CANCEL':\n                raise ExtractorError(\n                    'We are sorry, but the live broadcast has been canceled.',\n                    expected=True)\n            else:\n                raise ExtractorError('Unknown status ' + status)\n\n\nclass VLivePostIE(VLiveIE):\n    IE_NAME = 'vlive:post'\n    _VALID_URL = r'https?://(?:(?:www|m)\\.)?vlive\\.tv/post/(?P<id>\\d-\\d+)'\n    _TESTS = [{\n        # uploadType = SOS\n        'url': 'https://www.vlive.tv/post/1-20088044',\n        'info_dict': {","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/vlive.py#L150-L186","documentation":"VLive live-stream status error: when the video's status field is 'ENDED', the VOD replay has not been uploaded yet, so the extractor raises 'Uploading for replay. Please wait...' with expected=True. There is nothing to download until the platform finishes processing the replay.","triggerScenarios":"Extracting a VLive video URL whose API-returned status == 'ENDED' (broadcast finished but replay not yet published).","commonSituations":"Polling a finished livestream URL minutes after it ended; scheduled jobs that grab the URL as soon as the stream drops.","solutions":["Wait for the replay upload to finish (typically minutes to hours) and retry the same URL","Schedule a delayed retry instead of hammering the endpoint","If the replay never appears, the broadcaster may have disabled replays"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"from youtube_dl.utils import ExtractorError\nimport time\nfor attempt in range(6):\n    try:\n        ydl.extract_info(url); break\n    except ExtractorError as e:\n        if 'Uploading for replay' not in str(e):\n            raise\n        time.sleep(600)  # exponential backoff in production","preventionTips":["Schedule replay retries with increasing intervals (10min+), not immediate loops","Check the broadcast status endpoint before attempting full extraction","Treat ENDED as 'come back later', not a hard failure"],"tags":["vlive","livestream","replay","retry-later"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}