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 视频
1,990 每月下载量
用于 3 个crate(2 个直接使用)
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