From be055f6dfaf8f7280dc15264117723b1d8c1bd10 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Thu, 7 Mar 2024 10:25:11 +0100 Subject: [PATCH] webrtc: janus: handle 'destroyed' messages from Janus Fix this error when the room is destroyed: ERROR webrtc-janusvr-signaller imp.rs:413:gstrswebrtc::janusvr_signaller::imp::Signaller::handle_msg: Unknown message from server: { "janus": "event", "session_id": 6667171862739941, "sender": 1964690595468240, "plugindata": { "plugin": "janus.plugin.videoroom", "data": { "videoroom": "destroyed", "room": 8320333573294267 } } } Part-of: --- net/webrtc/src/janusvr_signaller/imp.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/net/webrtc/src/janusvr_signaller/imp.rs b/net/webrtc/src/janusvr_signaller/imp.rs index 226ec2ee..a5a3b074 100644 --- a/net/webrtc/src/janusvr_signaller/imp.rs +++ b/net/webrtc/src/janusvr_signaller/imp.rs @@ -51,6 +51,15 @@ enum JanusId { Num(u64), } +impl std::fmt::Display for JanusId { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + JanusId::Str(s) => write!(f, "{s}"), + JanusId::Num(n) => write!(f, "{n}"), + } + } +} + #[derive(Serialize, Deserialize, Debug, PartialEq, Eq)] struct KeepAliveMsg { janus: String, @@ -166,11 +175,18 @@ struct RoomEvent { #[derive(Serialize, Deserialize, Debug)] #[serde(tag = "videoroom")] +struct RoomDestroyed { + room: JanusId, +} + +#[derive(Serialize, Deserialize, Debug)] +#[serde(tag = "videoroom", rename_all = "kebab-case")] enum VideoRoomData { #[serde(rename = "joined")] Joined(RoomJoined), #[serde(rename = "event")] Event(RoomEvent), + Destroyed(RoomDestroyed), } #[derive(Serialize, Deserialize, Debug)] @@ -447,6 +463,14 @@ impl Signaller { } } } + VideoRoomData::Destroyed(room_destroyed) => { + gst::trace!(CAT, imp: self, "Room {} has been destroyed", room_destroyed.room); + + self.raise_error(format!( + "room {} has been destroyed", + room_destroyed.room + )); + } } } }