tonhowtf/omniget · error
Livestreams not supported
Error message
Livestreams not supported
What it means
Thrown by YouTubeDownloader::parse_video_info when the yt-dlp JSON reports is_live=true. Live streams cannot be downloaded by this downloader, so the operation is explicitly rejected rather than attempted.
Solutions
- Wait until the stream has ended and the VOD is published, then retry.
- Check the URL points to a normal video, not a live stream, before calling download.
- Pre-check metadata (e.g. yt-dlp --dump-json and inspect is_live) in the UI and disable download for live content.
- If live recording is genuinely needed, use a dedicated tool (e.g. streamlink) outside this library.
Example fix
// before
if is_live {
return Err(anyhow!("Livestreams not supported"));
}
// after: give the user actionable context
if is_live {
return Err(anyhow!("Livestreams not supported: '{}' is currently live. Retry after the stream ends.", title));
} Defensive patterns
Strategy: validation
Validate before calling
let json = ytdlp::get_video_info(&ytdlp_path, url, &[]).await?;
if json.get("is_live").and_then(|v| v.as_bool()).unwrap_or(false) {
eprintln!("{} is a live stream — download will be rejected; retry after it ends", url);
} Type guard
fn is_live_stream(info: &serde_json::Value) -> bool {
info.get("is_live").and_then(|v| v.as_bool()).unwrap_or(false)
} Try / catch
match downloader.get_media_info(url).await {
Err(e) if e.to_string().contains("Livestreams not supported") => {
// inform user to retry after the stream ends, or use streamlink for live capture
show_live_unsupported_notice();
}
other => other,
} Prevention
- Check is_live in metadata and disable the download button for live content in the UI.
- Detect /live/ URLs and premieres at input time.
- Schedule a retry after the stream's announced end time.
- Educate users that only ended VODs are downloadable.
- Suggest streamlink as the dedicated tool for live capture.
When it happens
Trigger: Calling get_media_info/download on a YouTube URL pointing to an active live stream (or an upcoming/premiere in live state) whose yt-dlp metadata has is_live set to true.
Common situations: Users pasting youtube.com/live/... or /watch?v=... links while a stream is ongoing; scheduled premieres still marked live; users expecting VOD download before the stream has ended.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Livestreams not supported
- Download cancelled
- Download cancelado
- a Microsoft não publica ONNX Runtime pronto para este…
- nao reconheci um video do YouTube em
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/7553f73a143374ff.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/src/platforms/youtube/mod.rs:162
.or_else(|| json.get("channel"))
.and_then(|v| v.as_str())
.unwrap_or("unknown")
.to_string();
let duration = json.get("duration").and_then(|v| v.as_f64());
let thumbnail = json
.get("thumbnail")
.and_then(|v| v.as_str())
.map(|s| s.to_string());
let is_live = json
.get("is_live")
.and_then(|v| v.as_bool())
.unwrap_or(false);
if is_live {
return Err(anyhow!("Livestreams not supported"));
}
let mut qualities: Vec<MediaVideoQuality> = Vec::new();
let mut seen_heights: HashSet<u32> = HashSet::new();
if let Some(formats) = json.get("formats").and_then(|v| v.as_array()) {
for f in formats {
let height = f.get("height").and_then(|v| v.as_u64()).unwrap_or(0) as u32;
let width = f.get("width").and_then(|v| v.as_u64()).unwrap_or(0) as u32;
let vcodec = f.get("vcodec").and_then(|v| v.as_str()).unwrap_or("none");
let acodec = f.get("acodec").and_then(|v| v.as_str()).unwrap_or("none");
if vcodec == "none" || height == 0 {
continue;
}
let has_audio = acodec != "none";
View on GitHub (pinned to 8600b91f42)