scuffle_rtmp/channels/
mod.rs1use 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>;