1 use streamhub::define::StreamHubEventSender; 2 3 use super::session::RtspServerSession; 4 use std::net::SocketAddr; 5 use tokio::io::Error; 6 use tokio::net::TcpListener; 7 8 pub struct RtspServer { 9 address: String, 10 event_producer: StreamHubEventSender, 11 } 12 13 impl RtspServer { new(address: String, event_producer: StreamHubEventSender) -> Self14 pub fn new(address: String, event_producer: StreamHubEventSender) -> Self { 15 Self { 16 address, 17 event_producer, 18 } 19 } 20 run(&mut self) -> Result<(), Error>21 pub async fn run(&mut self) -> Result<(), Error> { 22 let socket_addr: &SocketAddr = &self.address.parse().unwrap(); 23 let listener = TcpListener::bind(socket_addr).await?; 24 25 log::info!("Rtsp server listening on tcp://{}", socket_addr); 26 loop { 27 let (tcp_stream, _) = listener.accept().await?; 28 let mut session = RtspServerSession::new(tcp_stream, self.event_producer.clone()); 29 tokio::spawn(async move { 30 if let Err(err) = session.run().await { 31 log::error!("session run error, err: {}", err); 32 } 33 }); 34 } 35 } 36 } 37