3 unstable releases

Uses new Rust 2024

new 0.2.0 Apr 27, 2025
0.1.1 Feb 21, 2025
0.1.0 Feb 10, 2025
0.0.1 Feb 9, 2025

#87 in Video

Download history 197/week @ 2025-02-05 49/week @ 2025-02-12 148/week @ 2025-02-19 18/week @ 2025-02-26 4/week @ 2025-03-05 2/week @ 2025-04-09 111/week @ 2025-04-23

113 downloads per month

MIT/Apache

410KB
8K SLoC

scuffle-rtmp

[!WARNING]
This crate is under active development and may not be stable.

crates.io docs.rs


A crate for handling RTMP server connections.

Specifications

Name Version Link Comments
Adobe’s Real Time Messaging Protocol 1.0 https://github.com/veovera/enhanced-rtmp/blob/main/docs/legacy/rtmp-v1-0-spec.pdf Refered to as 'Legacy RTMP spec' in this documentation
Enhancing RTMP, FLV v1-2024-02-29-r1 https://github.com/veovera/enhanced-rtmp/blob/main/docs/enhanced/enhanced-rtmp-v1.pdf
Enhanced RTMP v2-2024-10-22-b1 https://github.com/veovera/enhanced-rtmp/blob/main/docs/enhanced/enhanced-rtmp-v2.pdf Refered to as 'Enhanced RTMP spec' in this documentation

Example

struct Handler;

impl SessionHandler for Handler {
    async fn on_data(&mut self, stream_id: u32, data: SessionData) -> Result<(), ServerSessionError> {
        // Handle incoming video/audio/meta data
        Ok(())
    }

    async fn on_publish(&mut self, stream_id: u32, app_name: &str, stream_name: &str) -> Result<(), ServerSessionError> {
        // Handle the publish event
        Ok(())
    }

    async fn on_unpublish(&mut self, stream_id: u32) -> Result<(), ServerSessionError> {
        // Handle the unpublish event
        Ok(())
    }
}

#[tokio::main]
async fn main() {
    let listener = TcpListener::bind("[::]:1935").await.unwrap();
    // listening on [::]:1935

    while let Ok((stream, addr)) = listener.accept().await {
        let session = ServerSession::new(stream, Handler);

        tokio::spawn(async move {
            if let Err(err) = session.run().await {
                // Handle the session error
            }
        });
    }
}

Status

This crate is currently under development and is not yet stable.

Unit tests are not yet fully implemented. Use at your own risk.

License

This project is licensed under the MIT or Apache-2.0 license. You can choose between one of them if you use this work.

SPDX-License-Identifier: MIT OR Apache-2.0

Dependencies

~5–11MB
~115K SLoC