Expand description
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
Re-exports§
pub use session::server::ServerSession;
Modules§
- chunk
- RTMP chunk protocol.
- command_
messages - Command messages.
- error
- General RTMP error type.
- handshake
- RTMP handshake logic.
- messages
- Message types and definitions.
- protocol_
control_ messages - Protocol control messages as defined in 5.4.
- session
- High-level API to drive RTMP sessions.
- user_
control_ messages - User control messages.