16 releases (7 stable)

1.4.0 Aug 31, 2024
1.3.1 Aug 31, 2024
1.3.0 Jun 24, 2024
1.3.0-a Mar 12, 2024
0.0.5 Feb 19, 2024

#89 in HTTP server

Download history 285/week @ 2024-08-30 8/week @ 2024-09-06 33/week @ 2024-09-13 9/week @ 2024-09-20 26/week @ 2024-09-27 4/week @ 2024-10-04 20/week @ 2024-11-29

2,054 downloads per month

MIT license

200KB
4K 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/ending with _ (underscore) and . (dot) will be ignored

Optional

  • debug: Boolean flag to enable debug level logging. Defaults to false
  • utc_logging: Boolean flag to set timezone to UTC in the output logs. Defaults to true
  • 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
  • max_payload_size: Maximum size of files that can be uploaded from the UI. Defaults to 100 MB

    Input should be in the format, 10 MB, 3 GB - inputs are case insensitive

  • 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

~23–37MB
~674K SLoC