18e71d710SHarlan use streamhub::define::StreamHubEventSender; 20d3b29c8SHarlanC 30d3b29c8SHarlanC use super::session::server_session; 453a2e033SHarlanC use std::net::SocketAddr; 50d3b29c8SHarlanC use tokio::io::Error; 60d3b29c8SHarlanC use tokio::net::TcpListener; 70d3b29c8SHarlanC 80d3b29c8SHarlanC pub struct RtmpServer { 90d3b29c8SHarlanC address: String, 108e71d710SHarlan event_producer: StreamHubEventSender, 118e71d710SHarlan gop_num: usize, 120d3b29c8SHarlanC } 130d3b29c8SHarlanC 140d3b29c8SHarlanC impl RtmpServer { new(address: String, event_producer: StreamHubEventSender, gop_num: usize) -> Self158e71d710SHarlan pub fn new(address: String, event_producer: StreamHubEventSender, gop_num: usize) -> Self { 160d3b29c8SHarlanC Self { 170d3b29c8SHarlanC address, 180d3b29c8SHarlanC event_producer, 198e71d710SHarlan gop_num, 200d3b29c8SHarlanC } 210d3b29c8SHarlanC } 220d3b29c8SHarlanC run(&mut self) -> Result<(), Error>230d3b29c8SHarlanC pub async fn run(&mut self) -> Result<(), Error> { 240d3b29c8SHarlanC let socket_addr: &SocketAddr = &self.address.parse().unwrap(); 250d3b29c8SHarlanC let listener = TcpListener::bind(socket_addr).await?; 260d3b29c8SHarlanC 2788325f54SHarlanC log::info!("Rtmp server listening on tcp://{}", socket_addr); 280d3b29c8SHarlanC loop { 290d3b29c8SHarlanC let (tcp_stream, _) = listener.accept().await?; 300d3b29c8SHarlanC //tcp_stream.set_keepalive(Some(Duration::from_secs(30)))?; 310d3b29c8SHarlanC 328e71d710SHarlan let mut session = server_session::ServerSession::new( 338e71d710SHarlan tcp_stream, 348e71d710SHarlan self.event_producer.clone(), 358e71d710SHarlan self.gop_num, 368e71d710SHarlan ); 370d3b29c8SHarlanC tokio::spawn(async move { 380d3b29c8SHarlanC if let Err(err) = session.run().await { 39*69de9bbdSHarlanC log::info!( 408baa1d3cSHarlan "session run error: session_type: {}, app_name: {}, stream_name: {}, err: {}", 41740804e8SHarlanC session.common.session_type, 42740804e8SHarlanC session.app_name, 438baa1d3cSHarlan session.stream_name, 448baa1d3cSHarlan err 4553a2e033SHarlanC ); 460d3b29c8SHarlanC } 470d3b29c8SHarlanC }); 480d3b29c8SHarlanC } 490d3b29c8SHarlanC } 500d3b29c8SHarlanC } 51