{"record":{"id":"b9a9d34d3f0bbb40","repo":"tonhowtf/omniget","slug":"livestreams-not-supported","errorCode":null,"errorMessage":"Livestreams not supported","messagePattern":"Livestreams not supported","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-tauri/omniget-core/src/platforms/youtube.rs","lineNumber":162,"sourceCode":"            .or_else(|| json.get(\"channel\"))\n            .and_then(|v| v.as_str())\n            .unwrap_or(\"unknown\")\n            .to_string();\n\n        let duration = json.get(\"duration\").and_then(|v| v.as_f64());\n\n        let thumbnail = json\n            .get(\"thumbnail\")\n            .and_then(|v| v.as_str())\n            .map(|s| s.to_string());\n\n        let is_live = json\n            .get(\"is_live\")\n            .and_then(|v| v.as_bool())\n            .unwrap_or(false);\n\n        if is_live {\n            return Err(anyhow!(\"Livestreams not supported\"));\n        }\n\n        let mut qualities: Vec<MediaVideoQuality> = Vec::new();\n        let mut seen_heights: HashSet<u32> = HashSet::new();\n\n        if let Some(formats) = json.get(\"formats\").and_then(|v| v.as_array()) {\n            for f in formats {\n                let height = f.get(\"height\").and_then(|v| v.as_u64()).unwrap_or(0) as u32;\n                let width = f.get(\"width\").and_then(|v| v.as_u64()).unwrap_or(0) as u32;\n                let vcodec = f.get(\"vcodec\").and_then(|v| v.as_str()).unwrap_or(\"none\");\n                let acodec = f.get(\"acodec\").and_then(|v| v.as_str()).unwrap_or(\"none\");\n\n                if vcodec == \"none\" || height == 0 {\n                    continue;\n                }\n\n                let has_audio = acodec != \"none\";\n","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/omniget-core/src/platforms/youtube.rs#L144-L180","documentation":"parse_video_info inspects the yt-dlp JSON's is_live field; when it is true the media is a live broadcast (or an in-progress livestream), which this library deliberately does not support, so it fails fast instead of producing an unusable MediaInfo.","triggerScenarios":"Calling get_media_info/fetch_with_ytdlp on a URL that points to a YouTube livestream currently in progress, or a completed stream yt-dlp still marks as live; also pasting /live/<id> URLs that resolve to a live stream.","commonSituations":"Users paste a link to a stream that is airing right now; yt-dlp reports is_live true for premieres or upcoming-but-started broadcasts; automated pipelines process channel feeds that mix VODs and live streams.","solutions":["Wait until the livestream has ended and YouTube has published the VOD, then retry.","Detect live URLs (or pre-check is_live) and surface a friendly 'livestream not supported' message to the user before download.","For live capture, use yt-dlp directly with --live-from-start or a dedicated recording tool; this library will not handle it.","Filter channel/playlist entries so live items are skipped rather than failing the whole batch."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"match platform.get_media_info(url).await {\n    Ok(info) => handle(info),\n    Err(e) if e.to_string().contains(\"Livestreams not supported\") => {\n        notify_user(\"This is a livestream; try again after it ends.\");\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Pre-check is_live via yt-dlp --dump-json before batch processing","Filter live/premiere items out of channel or playlist queues","Show a clear UI message distinguishing live streams from downloadable VODs","Retry ended streams later once the VOD is published"],"tags":["youtube","livestream","unsupported-operation","yt-dlp"],"backgroundTag":"unsupported-operation","analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}