Coder Social home page Coder Social logo

opensight / janus-cloud Goto Github PK

View Code? Open in Web Editor NEW
205.0 14.0 48.0 480 KB

a cluster solution for Janus WebRTC server, by API proxy approach

License: GNU Affero General Public License v3.0

Python 93.55% HTML 1.36% JavaScript 5.09%
webrtc janus webrtc-server clustering webrtc-signalling janus-proxy video-conferencing video-call video

janus-cloud's Introduction

Janus-cloud

Janus-cloud is an Janus API proxy to create the Janus WebRTC server cluster, which is based on Python3 so that it can be deployed on any platform. A Back-to-Back API proxy would be deployed between the client and the original Janus servers. In one hand, the WebRTC client communicates with Janus-cloud proxy through Janus' original API, just like with the real Janus server. In the other hand, Janus-cloud proxy would forwards the requests to the back-end Janus server in the cluster on behave of the client. Janus-cloud proxy is only responsible for the API (signalling) processing, while media streams is still left to Janus server to relay, so that the clients would establish the PeerConnections with the back-end Janus server directly, without Janus-cloud involvement. In this case, Janus-cloud proxy can be considered as a WebRTC signal server, while the original Janus server would be downgraded to work as a WebRTC media server.

1 Why Janus-cloud

Janus is an excellent WebRTC server, simple and well-structured. Its pluggable design and sophisticated API is impressive and amazing. But it also comes with some disadvantage.

First, Janus is design to be a standalone server, which cannot be scale to support the huge RTC workload. But in the cloud-based environment, scalability is essential. With the help of Janus-cloud, engineers can easily build a large and scalable cluster system of WebRTC server.

Second, Janus processes the WebRTC signalling, as well as the media data. But in the real communication world, signalling and media are usually divided into two plane, so that more flexibility can be provided. Janus-cloud fulfills this requirement by handling the signalling only and leaving media to Janus-server. Janus-cloud is developed by Python3 language which is more suitable to deal with the signalling, in the other hand, C language, which is used by Janus server, is more suitable to transmit media data in an efficient way .

2 Features

  • Scalable, Janus media servers can be added/removed to/from the cluster dynamically
  • Support Janus media service self-register, service monitor, circuit breaker
  • Pluggable, support the new features through developing the new plugin
  • Consistent API with the Janus server (since v1.0.2, until v1.1.4 (2023-06-15)), which is compatible with the original client of the Janus server

3 Components

Janus-cloud has two main components, Janus-proxy and Janus-sentinel.

Janus-proxy

Janus-proxy is responsible for signal handling, which communicates with the WebRTC client and relay the signal from client to the backend Janus servers. It conceals the detail of the backend Janus server cluster and output the same interface with the original Janus server. Janus-proxy is usually running on a standalone machine which is between the WebRTC client and the backend Janus servers. The WebRTC client interact with Janus-proxy for signal, but transfer to/from the real Janus Server for media. Janus-proxy has the following features/limitation:

  • Only provide the WebSocket(s) API, not provide RESTful, RabbitMQ, MQTT, Nanomsg and UnixSockets like Janus
  • Communicate with the backend Janus server by WebSocket
  • Pluggable. Its business functionality is implemented by the various plugins
  • Support RESTful admin interface
  • Scalable. The backend Janus server can be added/removed to/from Janus-proxy dynamically
  • Support multi algorithm to choose which backend server to relay signal

Janus-sentinel

Janus-sentinel is responsible to care for the Janus server, normally, it runs at the same (virtual) machine with the Janus server. it has the following capabilities:

  • Supervise the process of the Janus server, and keep it running
  • Monitor the status of the Janus server, and report it to Janus-proxy through HTTP
  • Calculate the workload of the Janus server
  • Support post the status/workload statistic to multi HTTP URL
  • Auto destroy for the idle video room

Note: the process of the Janus server can be started and maintained by the other system tools or system administrator manual, instead of Janus-sentinel. In this case, Janus-sentinel is only responsible for monitoring Janus server's status by its WebSocket API. But this approach is not a good idea.

4 Plugins of Janus-proxy

Janus-proxy is composed of many plugins, and the business logic of Janus-proxy is implemented by these plugins. The following plugins are provided within Janus-proxy by now.

echotest

This is a trivial EchoTest plugin which is only used for test and show plugin interface of Janus-proxy. It provide developers a skeleton for the new plugin development

audiobridge

This is a plugin implementing an audio conference MCU, which mixs all participant's input stream to one ouput stream. It achieves the same function and outputs the same APIs with the audiobridge plugin of Janus server, as well as it can distribute distributing conference rooms to different backend Janus server, so that Janus-proxy can support more concurrent audio conferences than single Janus server. Contrast to the audiobridge plugin of Janus server, there are some limitations below on this plugin to simplify the code.

  • changeroom switch not support
  • string_ids not support

Its APIs is compatible with the audiobridge plugin of Janus-gateway util v1.0.3(2022-06-20).

videocall

This is a simple video call plugin which allow two WebRTC peer communicate with each other through the medium Janus server. It achieves the same function and outputs the same APIs with the videocall plugin of Janus server, as well as it can distribute the workload among the backend Janus servers.

Moreover, Janus-proxy also can be scaled out for videocall plugin to handle much more video calls. Different WebRTC peers may be assigned to different Janus-proxies which is able to communicates with each other through admin interface.

Its APIs is compatible with the videocall plugin of Janus-gateway util v1.0.3(2022-06-20).

p2pcall

This is an other video call plugin, very similar to the videocall plugin, except that two WebRTC peer communicate with each other in p2p mode. It outputs same APIs like the videocall plugin, and also make Janus-proxy be able to scaled out to handle more video call. However no backend Janus servers is need to handle the media stream, because the WebRTC peers transmit the media data with each other directly.

Its APIs is compatible with the videocall plugin of Janus-gateway util v1.0.3(2022-6-20).

videoroom

This is a plugin implementing a videoconferencing SFU, just like videoroom plugin of the Janus server. It tries to keep almost the same API with the videoroom plugin of Janus server, and scale it out by distributing different publishers to different backend Janus server, so that Janus-proxy can support more publishers in one videoconferencing room than single Janus server. Contrast to the videoroom plugin of Janus server, there are some limitations below on this plugin to simplify the code.

  • subscriber switch not support
  • string_ids not support
  • dummy publishers not support
  • remote publisher not support

The videoroom plugin of Janus-gateway has refactored with the new multistream API primitive since v1.0.0, so this plugin also need to refactored to support it. The new APIs of this plugin supports multistream API primitive,and is compatible with the videoroom plugin of Janus-gateway since 1.0.2 util v1.1.4(2023-06-15). If you want to deploy the Janus-proxy with the old Janus-gateway which version is lower than v1.0.0 and make use of the old API (without multistream), please use the 0.x version (from 0.x branch) of Janus-cloud

5 Topology

The structure of Janus-cloud would be similar with the below topology.

                                                                               +-----------------------------+
                                                                               |Virtual Machine 2            |
                                                                               |      +----------+           |
                                                                          +---------->+  Janus   |           |
                                                                          |    |      +-----+----+           |
                                                                          |    |            |                |
                                     +------------------------------+     |    |      +-----+-------------+  |
                                     |Virtual Machine 1             |     |    |      |  Janus-sentinel   |  |
+-----------------------+            |                              |     |    |      +-------------------+  |
| Web Browser           |  WebSocket |      +----------------+      |     |    +-----------------------------+
| (e.g. Chrome/Firefox) +------------------>+  Janus-proxy   +------------+
+-----------------------+            |      +----------------+      |     |
                                     |                              |     |    +-----------------------------+
                                     +------------------------------+     |    |Virtual Machine 3            |
                                                                          |    |     +---------+             |
                                                                          +--------->+ Janus   |             |
                                                                               |     +-----+---+             |
                                                                               |           |                 |
                                                                               |     +-----+------------+    |
                                                                               |     | Janus-sentinel   |    |
                                                                               |     +------------------+    |
                                                                               +-----------------------------+


Janus-proxy is often deployed on a standalone machine between WebRTC client(like Browser) and Janus server. All signal from WebRTC client would be received by Janus-proxy first , then relayed to one of the backend Janus servers.

Janus-sentinel is often deployed along with the Janus server on the same machine. Janus-sentinel keep Janus process running and monitor its status, then report to Janus-proxy at intervals.

6 Installation

Before installation, the following requirements must be satisfied.

  • Python >= 3.5
  • pip
  • setuptools

Janus-cloud supports python 3.5 and up. It's strongly recommended to install Janus-cloud in a python virtual environment, like "venv".

Install from PyPi

To install Janus-cloud from PyPi,

$ pip install janus-cloud

Install from source

To install Janus-cloud from project source

$ pip install <project_root>

Where <project_root> is the root directory of project source, which contains the setup.py file

For developer, who want to debug the Janus-cloud, and install it for develop mode:

$ pip install -e <project_root>

7 Configure and Start

Some resource files, like sample configuration(with explanations), html test scripts, and etc, are shipped within the project source. After installation, these resource would be installed under <sys.prefix>/opt/janus-cloud where <sys.prefix> is the root directory of your filesystem. or the the root directory of virtual environment if install in a virtual environment.

janus-sentinel

Edit the configuration file of Janus-sentinel, then type the following commands to start.

$ janus-sentinel <janus-sentinel config file path>

janus-proxy

Edit the configuration file of Janus-proxy, then type the following commands to start.

$ janus-proxy <janus-proxy config file path>

8 Requirements for the backend Janus server

By now, Janus-proxy / Janus-sentinel only support corresponding with the backend Janus server by WebSocket, not support other transport.

there are the following requirements on the backend Janus server when deploying with Janus-cloud:

  • WebSocket transport must be enabled to correspond with Janus-proxy/Janus-sentinel
  • token_auth must be disabled

9 Directory structure of project source

Keep It Simple, and Stupid

janus-cloud/
    |
    +----conf/            Sample configuration files
    |
    +----html/            Html & js page code for test client
    |
    +----doc/             some extra documents for janus-cloud
    |
    +----januscloud/      Python code package of janus-cloud
    |
    +----CHANGES.md       change log for each release
    |
    +----README.md        This readme
    |
    +----LICENSE          AGPL 3.0 license 
    |
    +----MANIFEST.in      Manifest file describing the static resource file
    |
    +----pyproject.toml   python project building description file (compatible with PEP 518 / PEP 517)
    |
    +----setup.py         Python setup script

10 Contact us

Any thought, feedback or insult is welcome!

Developed by OpenSight([email protected])

janus-cloud's People

Contributors

hyt-hz avatar jamken avatar ketankatore avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

janus-cloud's Issues

janus-proxy run error

When janus-proxy is run, the error "socket operation on non-socket" appears.

sudo janus-proxy

Janus-proxy loads the config file: /opt/janus-cloud/conf/janus-proxy.yml
Traceback (most recent call last):
File "/usr/local/bin/janus-proxy", line 8, in
sys.exit(main())
File "/usr/local/lib/python3.8/dist-packages/januscloud/proxy/main.py", line 16, in main
with DaemonContext(stdin=sys.stdin,
File "/usr/local/lib/python3.8/dist-packages/daemon/daemon.py", line 273, in init
detach_process = is_detach_process_context_required()
File "/usr/local/lib/python3.8/dist-packages/daemon/daemon.py", line 821, in is_detach_process_context_required
if is_process_started_by_init() or is_process_started_by_superserver():
File "/usr/local/lib/python3.8/dist-packages/daemon/daemon.py", line 798, in is_process_started_by_superserver
if is_socket(stdin_fd):
File "/usr/local/lib/python3.8/dist-packages/daemon/daemon.py", line 764, in is_socket
file_socket = socket.fromfd(fd, socket.AF_INET, socket.SOCK_RAW)
File "/usr/local/lib/python3.8/dist-packages/gevent/_socket3.py", line 715, in fromfd
return socket(family, type, proto, nfd)
File "/usr/local/lib/python3.8/dist-packages/gevent/_socket3.py", line 142, in init
self._sock = self._gevent_sock_class(family, type, proto, fileno)
OSError: [Errno 88] Socket operation on non-socket

Question: Do we need to install the janus gateway dependancies on the janus-proxy vm?

I am struggling to make janus-proxy work.

I am getting this error

[Tue Oct 05 2021 11:11:52.613]  LOG      {"async": true, "cache": false, "conten
tType": "application/json", "data": "{\"janus\":\"create\",\"transaction\":\"fKh
cjWeL66Ut\"}", "dataType": "json", "error": [Function error], "success": [Functi
on success], "type": "POST", "url": "https://52.90.187.34:8288"}
[Tue Oct 05 2021 11:11:52.613]  WARN     creating session....
[Tue Oct 05 2021 11:11:52.998]  LOG      *********error***********
[Tue Oct 05 2021 11:11:53.470]  LOG      {"DONE": 4, "HEADERS_RECEIVED": 2, "LOA
DING": 3, "OPENED": 1, "UNSENT": 0, "_aborted": false, "_cachedResponse": undefi
ned, "_hasError": true, "_headers": {"content-type": "application/json"}, "_incr
ementalEvents": false, "_lowerCaseResponseHeaders": {}, "_method": "POST", "_per
fKey": "network_XMLHttpRequest_https://52.90.187.34:8288", "_requestId": null, "
_response": "Handshake failed", "_responseType": "", "_sent": true, "_subscripti
ons": [], "_timedOut": false, "_trackingName": "unknown", "_url": "https://52.90
.187.34:8288", "readyState": 4, "responseHeaders": undefined, "status": "error",
 "timeout": 0, "upload": {}, "withCredentials": true}

Looking at the logs only thing I see is /janus 500 and some unreadable characters

I am not sure how to debug this

websocket server failed with gevent of new version

With gevent==22.10.2 and greenlet==2.0.1, websocket server failed to handle new connection.

2023-06-26 21:45:01,709 [138221] [ws4py] [INFO] - Managing websocket [Local => 127.0.0.1:8288 | Remote => 127.0.0.1:35588]
2023-06-26 21:45:01,710 [138221] [januscloud.transport.ws] [INFO] - Closed websocket server connection with ('127.0.0.1', 35588): Going away
Traceback (most recent call last):
  File "src/gevent/greenlet.py", line 908, in gevent._gevent_cgreenlet.Greenlet.run
  File "/opensight/pyenv/janus_cloud/lib64/python3.9/site-packages/ws4py/websocket.py", line 526, in run
    self.opened()
  File "/root/deploy/janus-cloud-master/januscloud/transport/ws.py", line 72, in opened
    self.sock.sendall = sendall
AttributeError: 'socket' object attribute 'sendall' is read-only
2023-06-26T13:45:01Z <Greenlet at 0x7f6e59f26b80: <bound method WebSocket.run of <januscloud.transport.ws.WSServerConn object at 0x7f6e59decf70>>> failed with AttributeError
 

The offending code is used to prevent sending message from multiple greenlets concurrently.

1.X support error

image
我使用janus cloud 发现在获取会议成员中没有streams信息,我直接去连janus服务,他是有的。使用的是janus cloud 1.x,janus 使用的是Janus (WebRTC Server) v1.1.4
image
是不是janus cloud不支持原因?我使用videoroom.html 在join的时候塞入feed是可以正常通话的,但是mvvideoroomtest不行
image

wiki videoroom

Hello, is there a document for the videoroom plugin to implement a cross-server deployment solution? I don’t know where I want to achieve cross-server audio and video communication

Plugin SIP

Hello!
Tell me, did you not consider support for the sip plugin in janus?
I am very interested in its implementation, but I don’t know python.

Thank!

Is it possible to handle multiple janus-proxy?

janus-cloud brought us scalable media-server.
But is there way to make janus-proxy scalable too?

Generally, websocket can be scaled out with using Redis's pub/sub function.
Is it possible doing like that currently?

Janus videoroom support for the audio and video file using janus-proxy

Unable to get the recorded .mjr file from the provided /opt/janus/share/janus/recordings/ path in janus-proxy.plugin.videoroom.yml and janus.plugin.videoroom.jcfg file on both config file record is set to true and rec_dir.

parameters:

----janus.plugin.videoroom.jcfg----

general :
{
string_ids = "false";
publishers = "8";
bitrate = "128000";
bitrate_cap = "true";
request = "enable_recording";
rec_dir = "/opt/janus/share/janus/recordings/";
record = "true";
};

----------------janus-proxy.plugin.videoroom.yml----

rooms:
room_id: 1234
description: "Demo Room"
secret: "adminpwd"
publishers: 6
bitrate: 128000
fir_freq: 10
#audiocodec: "opus"
#videocodec: "vp8"
record: true
rec_dir: "/opt/janus/share/janus/recordings"

=============Error Receiving while the call connected is given below=====================

[WARN] Unsupported combination of dir and filename /opt/janus/share/janus/recordings/[email protected]
[ERR] [record.c:janus_recorder_create_full:154] mkdir () error: 2 (No such file or directory)
[ERR] [plugins/janus_videoroom.c:janus_videoroom_recorder_create:5731] Couldn't open an audio recording file for this publisher!
[WARN] Unsupported combination of dir and filename /opt/janus/share/janus/recordings/[email protected]
[ERR] [record.c:janus_recorder_create_full:154] mkdir () error: 2 (No such file or directory)
[ERR] [plugins/janus_videoroom.c:janus_videoroom_recorder_create:5760] Couldn't open an video recording file for this publisher!

@jamken kindly assist

Note: This setup is done after janus clustering. with 2 pods. we are able to make calls video and voice. but failed to get the .mjr files. kindly assist

broken pipe issue

Hi
I have setup with 1 yanus proxy and 2 janus servers behind it. It works good for all demos and test calls with 5-10 participants.
Now I'm testing it, trying to get stable 3 rooms with 20 members in each - but this doesn't work for now.
I see such logs in janys-proxy log file:

BrokenPipeError: [Errno 32] Broken pipe
2022-04-21 12:47:50,795 [1690018] [januscloud.proxy.core.frontend_session] [ERROR] - Asynchronous event ({'janus': 'event', 'session_id': 7324896184483668, 'plugindata': {'plugin': 'janus.plugin.videoroom
', 'data': {'videoroom': 'event', 'room': 1743988738, 'leaving': 8968357616118914}}, 'sender': 5720134667431144}) transport failed on session (id:7324896184483668)
Traceback (most recent call last):
  File "/opt/janus-cloud/lib/python3.8/site-packages/januscloud/proxy/core/frontend_session.py", line 36, in notify_event
    self.ts.send_message(event)
  File "/opt/janus-cloud/lib/python3.8/site-packages/januscloud/transport/ws.py", line 132, in send_message
    self.send(self._msg_encoder.encode(message), binary=False)
  File "/opt/janus-cloud/lib/python3.8/site-packages/ws4py/websocket.py", line 303, in send
    self._write(m)
  File "/opt/janus-cloud/lib/python3.8/site-packages/ws4py/websocket.py", line 285, in _write
    self.sock.sendall(b)
  File "/opt/janus-cloud/lib/python3.8/site-packages/januscloud/transport/ws.py", line 67, in sendall
    _sendall(data)
  File "/opt/janus-cloud/lib/python3.8/site-packages/gevent/_socket3.py", line 534, in sendall
    return _socketcommon._sendall(self, data_memory, flags)
  File "/opt/janus-cloud/lib/python3.8/site-packages/gevent/_socketcommon.py", line 392, in _sendall
    timeleft = __send_chunk(socket, chunk, flags, timeleft, end)
  File "/opt/janus-cloud/lib/python3.8/site-packages/gevent/_socketcommon.py", line 321, in __send_chunk
    data_sent += socket.send(chunk, flags)
  File "/opt/janus-cloud/lib/python3.8/site-packages/gevent/_socket3.py", line 515, in send
    return self._sock.send(data, flags)
BrokenPipeError: [Errno 32] Broken pipe

Any idea why this happen and how to fix?

Reconnect janus failed

reconnect janus cloud in 2 seconds

{"janus": "claim", "transaction": "l6u02dI18dT8", "session_id": "3709398412711189"}

received from janus cloud

{
   "janus": "error",
   "session_id": 3709398412711189,
   "transaction": "l6u02dI18dT8",
   "error": {
      "code": 458,
      "reason": "No such session 3709398412711189",
      "traceback": [
         "  File \"/usr/local/lib/python3.6/dist-packages/januscloud/proxy/core/request.py\", line 295, in incoming_request\n    response = handler(request)\n",
         "  File \"/usr/local/lib/python3.6/dist-packages/januscloud/proxy/core/request.py\", line 187, in _handle_claim\n    session = self._get_session(request)\n",
         "  File \"/usr/local/lib/python3.6/dist-packages/januscloud/proxy/core/request.py\", line 120, in _get_session\n    session = self._frontend_session_mgr.find_session(request.session_id)\n",
         "  File \"/usr/local/lib/python3.6/dist-packages/januscloud/proxy/core/frontend_session.py\", line 124, in find_session\n    raise JanusCloudError('No such session {}'.format(session_id), JANUS_ERROR_SESSION_NOT_FOUND)\n"
      ]
   }
}

Is my configuration file wrong?
thank you.

p2pcall

Hey,

please can you guide me to how to use just p2pcall without janus media streaming ?

passphrase for certificate in janus proxy

I added my own cert and key files in janus-proxy.yml to use "wss".
My key file needs passphrase and I added cert_pwd beside cert_pem and cert_key.

But when running janus-proxy, it asks me the passphrase.

JANUS_SERVER_STATUS_HWM status is not supported

JANUS_SERVER_STATUS_HWM status can be set here

if self._hwm_threshold and ping_latency > self._hwm_threshold:
                self.set_status(JANUS_SERVER_STATUS_HWM)
            else:
                self.set_status(JANUS_SERVER_STATUS_NORMAL)

but it is not supported by the schema here

server_update_schema = Schema({
    'name': StrRe('^[\w-]{1,64}$'),
    'url': StrRe('^(ws|wss)://\S+$'),
    'status': IntVal(values=(JANUS_SERVER_STATUS_NORMAL, JANUS_SERVER_STATUS_ABNORMAL, JANUS_SERVER_STATUS_MAINTENANCE)),
    Optional("session_timeout"): IntVal(min=0, max=86400),
    Optional("session_num"): IntVal(min=0, max=10000),
    Optional("handle_num"): IntVal(min=0, max=100000),
    Optional("location"): StrVal(min_len=0, max_len=64),
    Optional("isp"): StrVal(min_len=0, max_len=64),
    Optional("expire"): IntVal(min=0, max=86400),
    Optional("start_time"): FloatVal(),
    AutoDel(str): object  # for all other key we must delete
})

Another proxy in front of Janus Cloud

Hi, thank you for the awesome work!

This is no bug, just a question.
I'm trying to run a typical videoroom, with some extra constraints on aliases, among other things. It seems to me that my options are either to create a second proxy in front of Janus Cloud, or to modify Janus Cloud's code to implement my constraints.
If I create a second proxy, the client acts as a normal Janus client using the standard API, but my proxy chooses to reject certain requests and not pass them on to Janus Cloud if they fall afoul of certain conditions I code.
I find myself preferring the proxy option because I won't have to dive into janus-cloud's code, and the update process for new versions of janus-cloud would be much simpler.

  • Is this insane? is there a better way of doing this?
  • If I do end up doing this, can I use a single websocket between the proxy and janus-cloud for multiple clients?
    It seems to me that if I simply keep track of the transaction ID sent with any client request, I'll be able to send the response back to its intended recipient.

p2p plugin missing SDP error.

in p2p plugin in your demo whenever I hit the the upper buttons(toggle audio/video, change bitrate) I get the error missing sdp:
image

The video stops after that.

docker support

Does it support docker deployment? If so, is there a configuration tutorial?

Coredump when starting it.

I get coredump on python3.7:
janus-proxy /usr/local/opt/janus-cloud/conf/janus-proxy.yml
/usr/lib64/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject
return f(*args, **kwds)
/usr/lib64/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject
return f(*args, **kwds)
/usr/lib64/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject
return f(*args, **kwds)
/usr/lib64/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject
return f(*args, **kwds)
/usr/lib64/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject
return f(*args, **kwds)
/usr/lib64/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject
return f(*args, **kwds)
/usr/lib64/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject
return f(*args, **kwds)
/usr/lib64/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject
return f(*args, **kwds)
/usr/lib64/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject
return f(*args, **kwds)
Janus-proxy loads the config file: /usr/local/opt/janus-cloud/conf/janus-proxy.yml
/usr/lib64/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject
return f(*args, **kwds)
2020-11-21 18:16:25,883 [3096169] [januscloud.proxy.main] [INFO] - Janus Proxy is starting...
2020-11-21 18:16:25,884 [3096169] [januscloud.proxy.core.backend_server] [INFO] - Backend Server server1 (ws://127.0.0.1:8188) is added into proxy
Segmentation fault (core dumped)

VideoRoom plugin issue

VideoRoom plugin: Other people in the room cannot receive the “destroyed” message.

It can be received in Janus gateway.

Janus v1

Hi,

Is Janus v1 supported?

Thank you

how to use janus-sentinel.yml

I have two servers with janus service installed, only server1 is started, server2 is not started, server1 and server2, server1 starts janus-proxy, and janus_server is configured, and I start janus-sentinel service on server2. Then configure post_urls, and fill in the IP address of server1. My front-end connection is the 8288 service of server1. In theory, if configured like this, it should not be forwarded to server2. But the facts will still be forwarded. Is there a problem with the configuration?

我有两台服务器,都安装了janus服务,只有server1启动了,sever2未启动,server1和server2,server1启动了janus-proxy,并且配置了janus_server,我在server2启动了janus-sentinel服务。然后配置了post_urls,里面填了server1的IP地址。我前端连接的是server1的8288服务。理论上这样配置的话,应该不会转发到server2吧。但事实还是会转发,哪里配置有问题吗?

Janus room_id in webhook is not the same

Hello,

When we create a new videoroom

videoRoomHandle.create(videoRoomOptions).then((result) => {
      janusRoomId = result.room;
})

The result.room is different from what we receive from janus.eventhandler.sampleevh.jcfg !

It is usefull the "talking" key from participants list:
https://github.com/OpenSight/janus-cloud/wiki/VideoRoom-plugin-documentation
But in this moment it is not so useful without webhooks, because we cant make requests every second or more then one per second to get the list of participants.

Thanks!

Unable to get the recorded file!

Hi @jamken we have done the janus clustering proxy setup with 2 pods running behind the proxy. when the call in initiated we have received the following error form the pod. kindly assist.

ERROR:

[ERR] [record.c:janus_recorder_create_full:154] mkdir () error: 2 (No such file or directory)
[ERR] [plugins/janus_videoroom.c:janus_videoroom_recorder_create:5782] Couldn't open an audio recording file for this publisher!

Unifiedplan sdp

Are you going to support the unified plan sdp? This is in the multistream branch of janus already.
Vail

plz help jamus-proxy server error

I have 3 janus-gateway-server , 3 janus-sentinel server, 1 janus-proxy-server

I try to join video room with over 20 members for one room.
when I try to join 20 user, I got error like this.

Traceback (most recent call last):
File "/home/ubuntu/.local/lib/python3.8/site-packages/januscloud/proxy/plugin/videoroom.py", line 2481, in _handle_async_message
raise JanusCloudError('No such feed ({})'.format(feed_id),
januscloud.common.error.JanusCloudError: No such feed (397335007101711)
2021-09-23 06:46:20,414 [74514] [januscloud.proxy.core.frontend_session] [DEBUG] - an asynchronous event messge ({'janus': 'event', 'session_id': 4664431968098588, 'transaction': 'MhTSs4JWaQd6', 'plugindata': {'plugin': 'janus.plugin.videoroom', 'data': {'videoroom': 'event', 'error_code': 428, 'error': 'No such feed (397335007101711)', 'traceback': [' File "/home/ubuntu/.local/lib/python3.8/site-packages/januscloud/proxy/plugin/videoroom.py", line 2481, in _handle_async_message\n raise JanusCloudError('No such feed ({})'.format(feed_id),\n']}}, 'sender': 2371321868134035, 'opaque_id': 'videoroomtest-C5iYNyro5sMT'}) is sent back asynchronous for session "4664431968098588"

Can anyone let me know, what the problem is...

How many requests do you handle?

Does this process run multithreaded?

We want to handle more than 5000 users.
Is this a possible process if there are enough servers?

No 'enable_recording' api in function 'handle_message'

No 'enable_recording' api in function 'handle_message'

if request == 'create' or request == 'edit' or request == 'destroy' or request == 'list' \
or request == 'exists' or request == 'allowed' or request == 'kick' \
or request == 'listparticipants' or request == 'listforwarders' or request == 'rtp_forward' \
or request == 'stop_rtp_forward':

Another bug: Replace 'enable_recording' with 'record'

'enable_recording': record

Unable to join a room using janus-proxy - Error Invalid element type (id should be a string)

{"videoroom":"event","error_code":430,"error":"Invalid element type (id should be a string)","traceback":[" File "/usr/local/lib/python3.6/dist-packages/januscloud/proxy/plugin/videoroom.py", line 2391, in _handle_async_message\n new_publisher.connect_backend(backend_server)\n"," File "/usr/local/lib/python3.6/dist-packages/januscloud/proxy/plugin/videoroom.py", line 786, in connect_backend\n _send_backend_message(backend_handle, body)\n"," File "/usr/local/lib/python3.6/dist-packages/januscloud/proxy/plugin/videoroom.py", line 279, in _send_backend_message\n data.get('error_code', JANUS_VIDEOROOM_ERROR_UNKNOWN_ERROR))\n"]} on session 852580733184344

Redis issue

Hi

Currently, when using redis, the message "Failed to delete the empty rooms from DB: wrong number of arguments for 'del' command keeps popping up.
Also videoroom is not created in redis

Just show januscloud:backend_servers:~

Is something wrong?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.