#self-hosted #media-server #env-var #streaming-engine #symmetric-encryption #asynchronous-server #fernet-cryptography

bin+lib RuStream

Self-hosted Streaming Engine, that can render media files via authenticated sessions

13 releases (4 stable)

1.3.0-a Mar 12, 2024
1.2.0 Feb 29, 2024
0.0.5 Feb 19, 2024

#79 in HTTP server

Download history 30/week @ 2024-02-09 693/week @ 2024-02-16 417/week @ 2024-02-23 210/week @ 2024-03-01 598/week @ 2024-03-08 67/week @ 2024-03-15 1/week @ 2024-03-22 108/week @ 2024-03-29

1,975 downloads per month

MIT license

160KB
3K SLoC

RuStream

made-with-rust

crates.io

build none-shall-pass

Summary

RuStream is a self-hosted streaming engine, that can render media files via authenticated sessions.

Installation

cargo add RuStream

Usage

use rustream;

#[actix_rt::main]
async fn main() {
    match rustream::start().await {
        Ok(_) => {
            println!("RuStream session has ended")
        }
        Err(err) => {
            eprintln!("Error starting RuStream: {}", err)
        }
    }
}
Download OS specific Executable
macOS
curl -o RuStream-Darwin-x86_64.tar.gz -LH "Accept: application/octet-stream" "https://github.com/thevickypedia/RuStream/releases/latest/download/RuStream-Darwin-x86_64.tar.gz"
Linux
curl -o RuStream-Linux-x86_64.tar.gz -LH "Accept: application/octet-stream" "https://github.com/thevickypedia/RuStream/releases/latest/download/RuStream-Linux-x86_64.tar.gz"
RaspberryPi
curl -o RuStream-RaspberryPi.tar.gz -LH "Accept: application/octet-stream" "https://github.com/thevickypedia/RuStream/releases/latest/download/RuStream-RaspberryPi.tar.gz"
Windows
curl -o RuStream-Windows-x86_64.zip -LH "Accept: application/octet-stream" "https://github.com/thevickypedia/RuStream/releases/latest/download/RuStream-Windows-x86_64.zip"

Environment Variables

Mandatory

  • authorization: Dictionary of key-value pairs with username as key and password as value.
  • media_source: Source path for the files to be streamed.

Files starting with _ (underscore) and . (dot) will be ignored

Optional

  • media_host: IP address to host the server. Defaults to 127.0.0.1 / localhost
  • media_port: Port number to host the application. Defaults to 8000
  • session_duration: Time (in seconds) each authenticated session should last. Defaults to 3600
  • file_formats: Vector of supported file formats. Defaults to [mp4, mov, jpg, jpeg]
  • workers: Number of workers to spin up for the server. Defaults to the number of physical cores.
  • max_connections: Maximum number of concurrent connections per worker. Defaults to 3
  • websites: Vector of websites (supports regex) to add to CORS configuration. Required only if tunneled via CDN
  • key_file: Path to the private key file for SSL certificate. Defaults to None
  • cert_file: Path to the full chain file for SSL certificate. Defaults to None
  • secure_session: Boolean flag to secure the cookie session_token. Defaults to false

If SECURE_SESSION is to set to true, the cookie session_token will only be sent via HTTPS
This means that the server can ONLY be hosted via HTTPS or localhost

Checkout GitHub Wiki for more information about environment variables and dotenv usage.

Crate

https://crates.io/crates/RuStream

Cargo Docs - Official Runbook

https://docs.rs/RuStream/latest/rustream/

Generator

cargo doc --document-private-items --no-deps

Linting

Requirement

rustup component add clippy

Usage

cargo clippy --no-deps --fix

GitHub Wiki - Project Insights

https://github.com/thevickypedia/RuStream/wiki

© Vignesh Rao

Licensed under the MIT License

Dependencies

~22–38MB
~691K SLoC