1
"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 的 API 中断的 WebSocket 连接相匹配。

我尝试每 10 秒添加一个心跳 WebSocket 消息,但这没有帮助。我是

  1. 加入房间
  2. 接收我当地的 SDP plus 候选人
  3. 使用所述 SDP 配置房间
  4. 收到janus的答复
  5. 通过我的 WebRTC 对等连接接受该答案。

不知道这里出了什么问题。

我还尝试在 Janus 配置中设置 STUN 服务器,但无济于事。同样的问题。

也将服务器日志添加到了 pastebin。

4

2 回答 2

2

您需要发送具有相同“session_id”的“keepalive”消息以保持会话继续进行。Janus 在 60 秒后关闭会话。

寻找实现:https ://janus.conf.meeetecho.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);
于 2021-02-05T05:54:09.657 回答
1

RTFM:Janus 的 websocket 连接需要每 <60 秒保持一次连接。

需要指出的一个重要方面与 WebSockets Janus 通道的保持活动消息有关。只要 60 秒内没有不活动,Janus 会话就会保持活动状态:如果在该时间范围内没有收到任何消息,则服务器会断开会话。会话中的正常活动通常足以防止这种情况发生;对于更长时间的消息传递不活动,在纯 HTTP 上,会话通常通过常规的长轮询请求保持活动状态,只要涉及会话,这些请求就充当活动。当使用 WebSockets 时,这种帮助显然是不可能的,其中单个通道既用于发送请求,也用于接收事件和响应。出于这个原因,应该定期触发用于保持 Janus 会话活动的临时消息。链接

于 2020-05-19T22:39:46.560 回答