scuffle_rtmp/channels/
mod.rs

1use bytes::Bytes;
2use tokio::sync::{mpsc, oneshot};
3
4pub type UniqueID = uuid::Uuid;
5
6#[derive(Clone, Debug)]
7pub enum ChannelData {
8    Video { timestamp: u32, data: Bytes },
9    Audio { timestamp: u32, data: Bytes },
10    Metadata { timestamp: u32, data: Bytes },
11}
12
13impl ChannelData {
14    pub fn timestamp(&self) -> u32 {
15        match self {
16            ChannelData::Video { timestamp, .. } => *timestamp,
17            ChannelData::Audio { timestamp, .. } => *timestamp,
18            ChannelData::Metadata { timestamp, .. } => *timestamp,
19        }
20    }
21
22    pub fn data(&self) -> &Bytes {
23        match self {
24            ChannelData::Video { data, .. } => data,
25            ChannelData::Audio { data, .. } => data,
26            ChannelData::Metadata { data, .. } => data,
27        }
28    }
29}
30
31#[derive(Debug)]
32pub struct PublishRequest {
33    pub app_name: String,
34    pub stream_name: String,
35    pub response: oneshot::Sender<UniqueID>,
36}
37
38pub type PublishProducer = mpsc::Sender<PublishRequest>;
39pub type PublishConsumer = mpsc::Receiver<PublishRequest>;
40
41pub type DataProducer = mpsc::Sender<ChannelData>;
42pub type DataConsumer = mpsc::Receiver<ChannelData>;