scufflecloud_ingest/services/
rtmp.rs

1use scuffle_rtmp::session::server::{ServerSessionError, SessionData, SessionHandler};
2
3pub(crate) struct Handler;
4
5impl SessionHandler for Handler {
6    async fn on_data(&mut self, stream_id: u32, data: SessionData) -> Result<(), ServerSessionError> {
7        // Handle incoming video/audio/meta data
8        match data {
9            SessionData::Amf0 { timestamp, data } => {
10                tracing::info!(stream_id, timestamp, data_len = data.len(), "received AMF0 metadata");
11            }
12            SessionData::Audio { timestamp, data } => {
13                tracing::info!(stream_id, timestamp, data_len = data.len(), "received audio data");
14            }
15            SessionData::Video { timestamp, data } => {
16                tracing::info!(stream_id, timestamp, data_len = data.len(), "received video data");
17            }
18        }
19
20        Ok(())
21    }
22
23    async fn on_publish(&mut self, stream_id: u32, app_name: &str, stream_name: &str) -> Result<(), ServerSessionError> {
24        // Handle the publish event
25        tracing::info!(stream_id, app_name, stream_name, "stream published");
26        Ok(())
27    }
28
29    async fn on_unpublish(&mut self, stream_id: u32) -> Result<(), ServerSessionError> {
30        // Handle the unpublish event
31        tracing::info!(stream_id, "stream unpublished");
32        Ok(())
33    }
34}