#live #bilibili #stream #danmaku #client

bililive

一个简单的基于流的bilibili直播客户端库

8个版本

0.2.0-beta.52022年3月10日
0.2.0-beta.42021年11月6日
0.2.0-beta.12021年10月31日
0.1.2 2021年11月6日
0.1.0 2021年9月25日

异步分类中排名1408

每月下载量41

MIT许可证

69KB
1.5K SLoC

bililive-rs

GitHub Workflow Status crates.io Documentation

一个简单的基于流的bilibili直播客户端库,由async-tungstenite支持。

要在项目中使用,请将以下内容添加到您的Cargo.toml中

bililive = "0.2.0-beta.1"

最低支持的Rust版本:1.56.0

运行时支持

此crate支持tokioasync-std运行时。

tokio支持默认启用。当在async-std运行时使用,将Cargo.toml中的相应依赖项更改如下

bililive = { version = "0.2.0-beta.1", default-features = false, features = ["async-native-tls"] }

有关更多信息,请参阅Crates Features部分。

特性

  • 易于使用的Stream/Sink接口。
  • 通过提供的直播房间ID轻松建立连接。
  • 自动处理心跳数据包。
  • 连接失败时自动重试(可选)。
  • 自动解压缩Zlib有效负载。

示例

use bililive::connect::tokio::connect_with_retry;
use bililive::{ConfigBuilder, RetryConfig};

use futures::StreamExt;
use log::info;
use serde_json::Value;

let config = ConfigBuilder::new()
    .by_uid(1602085)
    .await
    .unwrap()
    .fetch_conf()
    .await
    .unwrap()
    .build();

let mut stream = connect_with_retry(config, RetryConfig::default()).await.unwrap();
while let Some(e) = stream.next().await {
    match e {
        Ok(packet) => {
            info!("raw: {:?}", packet);
            if let Ok(json) = packet.json::<Value>() {
                info!("json: {:?}", json);
            }
        }
        Err(e) => {
            info!("err: {:?}", e);
        }
    }
}

crate特性

依赖项

~5–22MB
~369K SLoC