webrtcsdpjanus-gateway

Janus gateway videoroom cancels connection after 60 seconds


"peerConnection new connection state: connected"
{
   "janus": "webrtcup",
   "session_id": 3414770196795261,
   "sender": 4530256184020316
}
{
   "janus": "media",
   "session_id": 3414770196795261,
   "sender": 4530256184020316,
   "type": "audio",
   "receiving": true
}

... 1 minute passes

"peerConnection new connection state: disconnected"
{
   "janus": "timeout",
   "session_id": 3414770196795261
}
"peerConnection new connection state: failed"

See pastebin for the full logs.

I'm trying to join a videoroom on my Janus server. All requests seem to succeed, and my device shows a connected WebRTC status for around one minute before the connection is canceled because of a timeout.
The WebRTC connection breaking off seems to match up with the WebSocket connection to Janus' API breaking.

I tried adding a heartbeat WebSocket message every 10 seconds, but that didn't help. I'm

  1. joining the room
  2. receiving my local SDP plus candidates
  3. configuring the room with said SDP
  4. receiving an answer from janus
  5. accepting that answer with my WebRTC peer connection.

Not sure what goes wrong here.

I also tried setting a STUN server inside the Janus config, to no avail. Same issue.

Added the server logs to the pastebin too.


Solution

  • RTFM: Janus' websocket connections require a keepalive every <60s.

    An important aspect to point out is related to keep-alive messages for WebSockets Janus channels. A Janus session is kept alive as long as there's no inactivity for 60 seconds: if no messages have been received in that time frame, the session is torn down by the server. A normal activity on a session is usually enough to prevent that; for a more prolonged inactivity with respect to messaging, on plain HTTP the session is usually kept alive through the regular long poll requests, which act as activity as long as the session is concerned. This aid is obviously not possible when using WebSockets, where a single channel is used both for sending requests and receiving events and responses. For this reason, an ad-hoc message for keeping alive a Janus session should to be triggered on a regular basis. Link.