1 个不稳定版本
0.0.1 | 2023 年 6 月 28 日 |
---|
#4 in #livestream
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