8个版本 (4个重大更改)

0.5.2 2024年7月9日
0.5.1 2024年7月9日
0.4.2 2024年7月9日
0.3.0 2019年7月1日
0.1.0 2019年1月4日

#51 in 视频

Download history 1/week @ 2024-05-24 1/week @ 2024-06-14 939/week @ 2024-07-05 600/week @ 2024-07-12 387/week @ 2024-07-19 408/week @ 2024-07-26 490/week @ 2024-08-02 649/week @ 2024-08-09

1,990 每月下载量
用于 3 个crate(2 个直接使用)

ISC 许可证

28KB
640 行代码

Stream Lib

此库可以实现下载各种类型的视频流。目前它支持HLS和分块HTTP流。

示例

use futures_util::StreamExt as _;
use reqwest::Client;
use stream_lib::Event;
use tokio::io::AsyncWriteExt;

/// Write buffer
pub const WRITE_SIZE: usize = 131_072;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    tracing_subscriber::fmt::init();
    let args = std::env::args().collect::<Vec<_>>();
    let url = args.get(1).expect("Pass a url as the first argument");

    let http = Client::new();
    let req = http.get(url).build()?;
    let mut dl = stream_lib::download_hls(http, req, None);

    let mut file = tokio::io::BufWriter::with_capacity(
        WRITE_SIZE,
        tokio::fs::File::create("./example.mp4").await?,
    );

    while let Some(event) = dl.next().await {
        match event {
            Event::Bytes { bytes } => {
                file.write_all(&bytes).await?;
            }
            Event::End => break,
            Event::Error { error } => {
                eprintln!("Encounted error: {}", error);
                break;
            }
        }
    }
    Ok(())
}

依赖项

~7–20MB
~303K SLoC