slop
This commit is contained in:
+32
-15
@@ -34,12 +34,11 @@ pub struct Rtmp {
|
||||
|
||||
async fn write_outbound(socket: &mut TcpStream, results: Vec<ServerSessionResult>) {
|
||||
for r in results {
|
||||
if let ServerSessionResult::OutboundResponse(p) = r {
|
||||
if let Err(e) = socket.write_all(&p.bytes).await {
|
||||
if let ServerSessionResult::OutboundResponse(p) = r
|
||||
&& let Err(e) = socket.write_all(&p.bytes).await {
|
||||
warn!("RTMP write error: {e}");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,8 +95,8 @@ impl Rtmp {
|
||||
x => return Err(format!("unexpected handshake state: {:?}", x).into()),
|
||||
}
|
||||
|
||||
let (rtmp_session, init_bytes) =
|
||||
ServerSession::new(ServerSessionConfig::new()).map_err(|e| format!("ServerSession::new failed: {e}"))?;
|
||||
let (rtmp_session, init_bytes) = ServerSession::new(ServerSessionConfig::new())
|
||||
.map_err(|e| format!("ServerSession::new failed: {e}"))?;
|
||||
write_outbound(&mut socket, init_bytes).await;
|
||||
|
||||
Ok((rtmp_session, socket))
|
||||
@@ -127,8 +126,8 @@ impl Rtmp {
|
||||
}
|
||||
};
|
||||
info!(%peer_addr, "RTMP handshake complete");
|
||||
let (mut video_tx, mut video_rx) = broadcast::<Arc<VideoFrame>>(32);
|
||||
let (mut audio_tx, mut audio_rx) = broadcast::<Arc<OpusAudioFrame>>(32);
|
||||
let (mut video_tx, video_rx) = broadcast::<Arc<VideoFrame>>(32);
|
||||
let (mut audio_tx, audio_rx) = broadcast::<Arc<OpusAudioFrame>>(32);
|
||||
// video_rx.cycle
|
||||
|
||||
video_tx.set_overflow(true);
|
||||
@@ -215,7 +214,9 @@ impl Rtmp {
|
||||
let reply = match session.accept_request(request_id) {
|
||||
Ok(r) => r,
|
||||
Err(e) => {
|
||||
warn!("Failed to accept connection request {request_id}: {e}");
|
||||
warn!(
|
||||
"Failed to accept connection request {request_id}: {e}"
|
||||
);
|
||||
return;
|
||||
}
|
||||
};
|
||||
@@ -235,7 +236,11 @@ impl Rtmp {
|
||||
key
|
||||
} else {
|
||||
warn!(stream_key = %stream_key, "stream key not found, rejecting");
|
||||
let reply = match session.reject_request(request_id, "", "Stream key invalid") {
|
||||
let reply = match session.reject_request(
|
||||
request_id,
|
||||
"",
|
||||
"Stream key invalid",
|
||||
) {
|
||||
Ok(r) => r,
|
||||
Err(e) => {
|
||||
warn!("Failed to reject stream key request: {e}");
|
||||
@@ -255,10 +260,16 @@ impl Rtmp {
|
||||
Ok(s) => s,
|
||||
Err(e) => {
|
||||
warn!("DB error checking active stream: {e}");
|
||||
let reply = match session.reject_request(request_id, "", "Internal error") {
|
||||
let reply = match session.reject_request(
|
||||
request_id,
|
||||
"",
|
||||
"Internal error",
|
||||
) {
|
||||
Ok(r) => r,
|
||||
Err(e2) => {
|
||||
warn!("Failed to reject request on DB error: {e2}");
|
||||
warn!(
|
||||
"Failed to reject request on DB error: {e2}"
|
||||
);
|
||||
return;
|
||||
}
|
||||
};
|
||||
@@ -294,6 +305,9 @@ impl Rtmp {
|
||||
audio_channel: audio_tx.clone(),
|
||||
codec: None,
|
||||
started_at: Utc::now(),
|
||||
active_clients: 0.into(),
|
||||
video_pt: None,
|
||||
video_profile_level_id: None,
|
||||
},
|
||||
);
|
||||
|
||||
@@ -312,7 +326,11 @@ impl Rtmp {
|
||||
.await
|
||||
{
|
||||
warn!("Failed to create stream session record: {e}");
|
||||
let _ = session.reject_request(request_id, "", "Internal error");
|
||||
let _ = session.reject_request(
|
||||
request_id,
|
||||
"",
|
||||
"Internal error",
|
||||
);
|
||||
return;
|
||||
}
|
||||
stream_id = Some(key.id);
|
||||
@@ -343,13 +361,12 @@ impl Rtmp {
|
||||
} => match Self::parse_video_codec(&data) {
|
||||
Ok(codec) => {
|
||||
if !codec_stamped {
|
||||
if let Some(id) = current_stream_key_id {
|
||||
if let Some(mut session) =
|
||||
if let Some(id) = current_stream_key_id
|
||||
&& let Some(mut session) =
|
||||
stream_sessions.get_mut(&id)
|
||||
{
|
||||
session.codec = Some(codec.clone());
|
||||
}
|
||||
}
|
||||
codec_stamped = true;
|
||||
}
|
||||
match codec {
|
||||
|
||||
Reference in New Issue
Block a user