#live #bilibili #stream #danmaku #client

bililive

A simple stream-based bilibili live client library

8 releases

0.2.0-beta.5 Mar 10, 2022
0.2.0-beta.4 Nov 6, 2021
0.2.0-beta.1 Oct 31, 2021
0.1.2 Nov 6, 2021
0.1.0 Sep 25, 2021

#1425 in Asynchronous

MIT license

69KB
1.5K SLoC

bililive-rs

GitHub Workflow Status crates.io Documentation

A simple stream-based bilibili live client library backed by async-tungstenite.

To use with your project, add the following to your Cargo.toml:

bililive = "0.2.0-beta.1"

Minimum supported rust version: 1.56.0

Runtime Support

This crate supports both tokio and async-std runtime.

tokio support is enabled by default. While used on an async-std runtime, change the corresponding dependency in Cargo.toml to

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

See Crates Features section for more.

Features

  • Ergonomic Stream/Sink interface.
  • Easy establishment of connection via given live room id.
  • Handles heartbeat packets automatically.
  • Auto retry when connection fails (optional).
  • Decompresses Zlib payloads automatically.

Example

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 Features

  • tokio-native-tls(default): Enables tokio support with TLS implemented via tokio-native-tls.
  • tokio-rustls-native-certs: Enables tokio support with TLS implemented via tokio-rustls and uses native system certificates found with rustls-native-certs.
  • tokio-rustls-webpki-roots: Enables tokio support with TLS implemented via tokio-rustls and uses the certificates webpki-roots provides.
  • async-native-tls: Enables async_std support with TLS implemented via async-native-tls.

Dependencies

~6–22MB
~354K SLoC