Janus 网关视频室在 60 秒后取消连接
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"
有关完整日志,请参阅 pastebin。
我正在尝试加入我的 Janus 服务器上的视频室。所有请求似乎都成功了,并且我的设备显示连接的 WebRTC 状态大约一分钟,然后由于超时而取消连接。
WebRTC 连接中断似乎与 Janus 的 WebSocket 连接中断相匹配API。
我尝试每 10 秒添加一个心跳 WebSocket 消息,但这没有帮助。我
- 加入房间
- 收到我当地的 SDP 和候选人
- 使用上述 SDP 配置房间
- 收到 janus 的回复
- 通过我的 WebRTC 对等连接接受该答案。
不确定这里出了什么问题。
我还尝试在 Janus 配置中设置 STUN 服务器,但无济于事。同样的问题。
也将服务器日志添加到 pastebin。
RTFM:Janus 的 websocket 连接需要每 <60 秒保持活动状态。
要指出的一个重要方面与 WebSockets Janus 通道的保持活动消息有关。只要 60 秒内没有 inactivity,Janus 会话就会保持活动状态:如果在该时间范围内没有收到任何消息,服务器就会关闭该会话。会话中的正常 activity 通常足以防止这种情况发生;对于消息传递方面的 activity 更长时间,在普通 HTTP 上,会话通常通过常规的长轮询请求保持活动状态,只要涉及会话,这些请求就充当 activity 。当使用 WebSockets 时,这种帮助显然是不可能的,其中单个通道用于发送请求以及接收事件和响应。出于这个原因,应该定期触发用于保持 Janus 会话活动的临时消息。 Link.
您需要使用相同的“session_id”发送 'keepalive' 消息以保持会话继续。 Janus 在 60 秒后关闭会话。
寻找实现:https://janus.conf.meetecho.com/docs/rest.html
或者按我的方式做:我在可运行的处理程序中每 30 秒执行一次。
private Handler mHandler;
private Runnable fireKeepAlive = new Runnable() {
@Override
public void run() {
String transactionId = getRandomStringId();
JSONObject request = new JSONObject();
try {
request.put("janus", "keepalive");
request.put("session_id", yourSessionId);
request.put("transaction", transactionId);
} catch (JSONException e) {
e.printStackTrace();
}
myWebSocketConnection.sendTextMessage(request.toString());
mHandler.postDelayed(fireKeepAlive, 30000);
}
};
然后在 OnCreate()
mHandler = new Handler();
然后在 WebSocket 连接打开的地方调用它:
mHandler.post(fireKeepAlive);
一定要删除销毁时的回调
mHandler.removeCallbacks(fireKeepAlive);
"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"
有关完整日志,请参阅 pastebin。
我正在尝试加入我的 Janus 服务器上的视频室。所有请求似乎都成功了,并且我的设备显示连接的 WebRTC 状态大约一分钟,然后由于超时而取消连接。
WebRTC 连接中断似乎与 Janus 的 WebSocket 连接中断相匹配API。
我尝试每 10 秒添加一个心跳 WebSocket 消息,但这没有帮助。我
- 加入房间
- 收到我当地的 SDP 和候选人
- 使用上述 SDP 配置房间
- 收到 janus 的回复
- 通过我的 WebRTC 对等连接接受该答案。
不确定这里出了什么问题。
我还尝试在 Janus 配置中设置 STUN 服务器,但无济于事。同样的问题。
也将服务器日志添加到 pastebin。
RTFM:Janus 的 websocket 连接需要每 <60 秒保持活动状态。
要指出的一个重要方面与 WebSockets Janus 通道的保持活动消息有关。只要 60 秒内没有 inactivity,Janus 会话就会保持活动状态:如果在该时间范围内没有收到任何消息,服务器就会关闭该会话。会话中的正常 activity 通常足以防止这种情况发生;对于消息传递方面的 activity 更长时间,在普通 HTTP 上,会话通常通过常规的长轮询请求保持活动状态,只要涉及会话,这些请求就充当 activity 。当使用 WebSockets 时,这种帮助显然是不可能的,其中单个通道用于发送请求以及接收事件和响应。出于这个原因,应该定期触发用于保持 Janus 会话活动的临时消息。 Link.
您需要使用相同的“session_id”发送 'keepalive' 消息以保持会话继续。 Janus 在 60 秒后关闭会话。
寻找实现:https://janus.conf.meetecho.com/docs/rest.html
或者按我的方式做:我在可运行的处理程序中每 30 秒执行一次。
private Handler mHandler;
private Runnable fireKeepAlive = new Runnable() {
@Override
public void run() {
String transactionId = getRandomStringId();
JSONObject request = new JSONObject();
try {
request.put("janus", "keepalive");
request.put("session_id", yourSessionId);
request.put("transaction", transactionId);
} catch (JSONException e) {
e.printStackTrace();
}
myWebSocketConnection.sendTextMessage(request.toString());
mHandler.postDelayed(fireKeepAlive, 30000);
}
};
然后在 OnCreate()
mHandler = new Handler();
然后在 WebSocket 连接打开的地方调用它:
mHandler.post(fireKeepAlive);
一定要删除销毁时的回调
mHandler.removeCallbacks(fireKeepAlive);