#download #youtube-dl #livestream

bin+lib yta-rs

下载 YouTube 直播流的辅助包

1 个不稳定版本

0.0.1 2023 年 6 月 28 日

#4 in #livestream

MIT 许可证

465KB
1K SLoC

yta-rs

Rust 中 Kethsar/ytarchive 的最小实现。

⚠️ 此包非常新。API 尚未最终确定,可能会随时更改。请自行决定使用。

用法

此包旨在作为库使用。目前,可执行文件只有一种模式,即下载最高质量的音频和视频片段,并组成 HLS 播放列表。

# Start downloading
cargo run https://www.youtube.com/watch?v=Io7ucwiaONc

# Run a webserver
cd yta_dl
python3 -m http.server 8080

lib.rs:

yta-rs

此包提供用于下载 YouTube DASH 直播流的库。它基于 Kethsar/ytarchive,但更加精简,更适合作为库使用。

用法

yta-rs 是一个底层库,因此您需要编写自己的逻辑来下载和处理片段。以下示例展示了如何使用 worker 模块获取初始播放器响应并开始下载片段。

use yta_rs::{player_response::InitialPlayerResponse, util, worker};

#[tokio::main]
async fn main() {
    // Create HttpClient, a wrapper around reqwest::Client but includes a
    // middleware for retrying transient errors
    let client = util::HttpClient::new().unwrap();

    // Fetch the video page
    let html = client.fetch_text("https://www.youtube.com/watch?v=...").await.unwrap();

    // Parse the initial player response
    let ipr = InitialPlayerResponse::from_html(html.as_str()).unwrap();

    // Get the status of the stream
    if ipr.is_usable() {
        println!("Video is live");
    } else {
        println!("Video is not live");
        return;
    }

    // Start the worker
    let workdir = std::path::Path::new(".");
    worker::start(&client, &ipr, workdir).await.unwrap();
}

worker 模块提供了一个 start 函数,该函数将下载片段并将它们写入磁盘。它还将写入一个 index.m3u8 文件,该文件可以用于播放流。

依赖项

~13–30MB
~433K SLoC