8 releases (4 breaking)

0.5.2 Jul 9, 2024
0.5.1 Jul 9, 2024
0.4.2 Jul 9, 2024
0.3.0 Jul 1, 2019
0.1.0 Jan 4, 2019

#55 in Video

Download history 402/week @ 2024-07-23 430/week @ 2024-07-30 515/week @ 2024-08-06 647/week @ 2024-08-13 388/week @ 2024-08-20 401/week @ 2024-08-27 496/week @ 2024-09-03 381/week @ 2024-09-10 332/week @ 2024-09-17 489/week @ 2024-09-24 408/week @ 2024-10-01 346/week @ 2024-10-08 403/week @ 2024-10-15 376/week @ 2024-10-22 351/week @ 2024-10-29 355/week @ 2024-11-05

1,565 downloads per month
Used in 3 crates (2 directly)

ISC license

28KB
640 lines

Stream Lib

This library makes it possible to download various types of video streams. Currently it supports HLS and chunked http streams.

Example

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(())
}

Dependencies

~9–20MB
~269K SLoC