Skip to content

Commit 3b29452

Browse files
addressed the comments
1 parent f41ef29 commit 3b29452

2 files changed

Lines changed: 31 additions & 46 deletions

File tree

livekit-api/src/signal_client/mod.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -286,12 +286,15 @@ impl SignalInner {
286286
return Err(err);
287287
}
288288

289-
// If using v1 path and it failed, always try fallback to v0 path.
290-
// The v1 endpoint might not be available on older servers, and errors
291-
// can manifest as various HTTP status codes (404, 401, 403) or connection errors.
292-
if use_v1_path {
289+
// Only fallback to v0 if the v1 endpoint returned 404 (not found).
290+
// Other errors (401, 403, 500, etc.) indicate real issues that shouldn't
291+
// be masked by falling back to a different signaling mode.
292+
let is_not_found =
293+
matches!(&err, SignalError::WsError(WsError::Http(e)) if e.status() == 404);
294+
295+
if use_v1_path && is_not_found {
293296
let lk_url_v0 = get_livekit_url(url, &options, false, false, None, "")?;
294-
log::warn!("v1 path failed, falling back to v0 path");
297+
log::warn!("v1 path not found (404), falling back to v0 path");
295298
match SignalStream::connect(lk_url_v0.clone(), token).await {
296299
Ok((new_stream, stream_events)) => (new_stream, stream_events, false),
297300
Err(err) => {
@@ -304,7 +307,7 @@ impl SignalInner {
304307
}
305308
}
306309
} else {
307-
// Connection failed on v0 path, try to retrieve more information
310+
// Connection failed, try to retrieve more information
308311
Self::validate(lk_url).await?;
309312
return Err(err);
310313
}

livekit/src/rtc_engine/rtc_session.rs

Lines changed: 22 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -984,51 +984,33 @@ impl SessionInner {
984984
}
985985
}
986986
proto::signal_response::Message::Offer(offer) => {
987-
// Store mid_to_track_id mapping
988-
if !offer.mid_to_track_id.is_empty() {
989-
let mut mapping = self.mid_to_track_id.lock();
990-
for (mid, track_id) in &offer.mid_to_track_id {
991-
mapping.insert(mid.clone(), track_id.clone());
992-
}
987+
// In single PC mode, client always offers and server always answers,
988+
// so we should never receive an offer from the server.
989+
if self.single_pc_mode {
990+
log::warn!("received unexpected offer in single PC mode, ignoring");
991+
return Ok(());
993992
}
994993

994+
// Dual PC mode: handle offer on subscriber PC
995+
log::debug!("received subscriber offer: {:?}", offer);
995996
let offer_sdp =
996997
SessionDescription::parse(&offer.sdp, offer.r#type.parse().unwrap()).unwrap();
997998

998-
if self.single_pc_mode {
999-
// In single PC mode, handle offer on publisher PC
1000-
let answer = self
1001-
.publisher_pc
1002-
.create_anwser(offer_sdp, AnswerOptions::default())
1003-
.await?;
1004-
1005-
self.signal_client
1006-
.send(proto::signal_request::Message::Answer(proto::SessionDescription {
1007-
r#type: "answer".to_string(),
1008-
sdp: answer.to_string(),
1009-
id: offer.id,
1010-
mid_to_track_id: Default::default(),
1011-
}))
1012-
.await;
1013-
} else {
1014-
// Dual PC mode: handle offer on subscriber PC
1015-
log::debug!("received subscriber offer: {:?}", offer);
1016-
let answer = self
1017-
.subscriber_pc
1018-
.as_ref()
1019-
.unwrap()
1020-
.create_anwser(offer_sdp, AnswerOptions::default())
1021-
.await?;
1022-
1023-
self.signal_client
1024-
.send(proto::signal_request::Message::Answer(proto::SessionDescription {
1025-
r#type: "answer".to_string(),
1026-
sdp: answer.to_string(),
1027-
id: 0,
1028-
mid_to_track_id: Default::default(),
1029-
}))
1030-
.await;
1031-
}
999+
let answer = self
1000+
.subscriber_pc
1001+
.as_ref()
1002+
.unwrap()
1003+
.create_anwser(offer_sdp, AnswerOptions::default())
1004+
.await?;
1005+
1006+
self.signal_client
1007+
.send(proto::signal_request::Message::Answer(proto::SessionDescription {
1008+
r#type: "answer".to_string(),
1009+
sdp: answer.to_string(),
1010+
id: 0,
1011+
mid_to_track_id: Default::default(),
1012+
}))
1013+
.await;
10321014
}
10331015
proto::signal_response::Message::Trickle(trickle) => {
10341016
let target = trickle.target();

0 commit comments

Comments
 (0)