Skip to content

resonix-dev/riva

riva

Server-backed Rust client for the Riva media proxy.

By default, this crate targets the riva servers. You can override the server with environment variables.

Features

  • youtube (enabled by default)
  • soundcloud (enabled by default)

Disable defaults if needed:

[dependencies]
riva = { version = "1", default-features = false, features = ["youtube"] }

Environment Variables

Base URL (first non-empty value wins):

  • RIVA_BASE_URL
  • RIVA_SERVER_URL
  • RIVA_URL

Access secret (optional, first non-empty value wins):

  • RIVA_ACCESS_SECRET
  • RIVA_API_KEY
  • RIVA_TOKEN

If an access secret is set, the client sends Authorization: Bearer <secret>.

Quick Start

use riva::RivaClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = RivaClient::from_env()?;

    let health = client.health().await?;
    println!("{} @ {}", health.status, health.time);

    Ok(())
}

YouTube

use riva::{RivaClient, YoutubeClientType};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = RivaClient::from_env()?;

    let info = client
        .youtube_info("rkaiKn5iGzc", Some(YoutubeClientType::Web))
        .await?;
    println!("video info: {info}");

    let response = client
        .youtube_stream("rkaiKn5iGzc", 18, Some(YoutubeClientType::Web))
        .await?;

    let mut stream = response.bytes_stream();
    while let Some(chunk) = stream.next().await {
        let bytes = chunk?;
        println!("received {} bytes", bytes.len());
    }

    Ok(())
}

For bytes_stream() consumption, add:

futures-util = "0.3"

and import:

use futures_util::StreamExt;

SoundCloud

use riva::RivaClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = RivaClient::from_env()?;

    let response = client
        .soundcloud_stream("https://soundcloud.com/kordhell/trageluxe")
        .await?;

    let bytes = response.bytes().await?;
    println!("downloaded {} bytes", bytes.len());

    Ok(())
}

API

  • RivaClient::from_env()
  • RivaClient::new(config)
  • RivaClient::health()
  • RivaClient::youtube_info(...) (feature: youtube)
  • RivaClient::youtube_stream(...) (feature: youtube)
  • RivaClient::soundcloud_stream(...) (feature: soundcloud)

About

Provider-agnostic Rust library for extracting normalized media stream metadata from SoundCloud and YouTube via async helpers.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors

Languages