use async_trait::async_trait;
use bytes::Bytes;
use std::net::SocketAddr;
use crate::error::Error;
use crate::Result;
pub mod media_transport;
pub use media_transport::RtpMediaTransport;
#[async_trait]
pub trait MediaTransport: Send + Sync {
async fn local_addr(&self) -> Result<SocketAddr>;
async fn send_media(
&self,
payload_type: u8,
timestamp: u32,
payload: Bytes,
marker: bool,
) -> Result<()>;
async fn close(&self) -> Result<()>;
}
#[derive(Debug, Clone)]
pub enum RtpEvent {
MediaReceived {
payload_type: u8,
sequence_number: u16,
timestamp: u32,
marker: bool,
payload: Bytes,
source: SocketAddr,
ssrc: u32,
},
RtcpReceived {
data: Bytes,
source: SocketAddr,
},
DtmfEvent {
event: u8,
end_of_event: bool,
volume: u8,
duration: u16,
timestamp: u32,
source: SocketAddr,
ssrc: u32,
},
Error(Error),
}
#[async_trait]
pub trait RtpEventConsumer: Send + Sync {
async fn process_event(&self, event: RtpEvent) -> Result<()>;
}