Runtime failure on the janus

Issue with Janus WebSocket Plugin Configuration: Unable to Load WebSocket Plugin

I’ve been following the official GitHub README for compiling Janus, and everything seems to be set up correctly. However, I encountered an issue when trying to run Janus after compiling it. Specifically, when running janus-gateway I get the following error related to the WebSocket plugin:

janus-gateway$ /opt/janus/bin/janus
Janus version: 1301 (1.3.1)
Janus commit: 623e5674bac1b876eac0df74f9a4171ca16998bb
Compiled on:  Wed 27 Nov 2024 09:58:09 PM CST

Logger plugins folder: /opt/janus/lib/janus/loggers
[WARN] 	Couldn't access logger plugins folder...
---------------------------------------------------
  Starting Meetecho Janus (WebRTC Server) v1.3.1
---------------------------------------------------

Checking command line arguments...
Debug/log level is 4
Debug/log timestamps are disabled
Debug/log colors are enabled
Adding 'vmnet' to the ICE ignore list...
Using 172.16.11.21 as local IP...
Token based authentication disabled
Initializing recorder code
Initializing ICE stuff (Full mode, ICE-TCP candidates disabled, half-trickle, IPv6 support disabled)
TURN REST API backend: (disabled)
[WARN] Janus is deployed on a private address (172.16.11.21) but you didn't specify any STUN server! Expect trouble if this is supposed to work over the internet and not just in a LAN...
Crypto: OpenSSL >= 1.1.0
No cert/key specified, autogenerating some...
Fingerprint of our certificate: 02:79:39:EE:D7:B7:DC:67:E0:01:CE:65:5F:C0:D6:BA:F8:81:37:DB:D5:53:08:37:F2:0B:89:09:4A:F5:09:C8
[WARN] Data Channels support not compiled
Event handlers support disabled
Plugins folder: /opt/janus/lib/janus/plugins
Loading plugin 'libjanus_videoroom.so'...
JANUS VideoRoom plugin initialized!
Loading plugin 'libjanus_nosip.so'...
Joining Janus requests handler thread
JANUS NoSIP plugin initialized!
Loading plugin 'libjanus_streaming.so'...
JANUS Streaming plugin initialized!
Loading plugin 'libjanus_videocall.so'...
Sessions watchdog started
JANUS VideoCall plugin initialized!
Loading plugin 'libjanus_echotest.so'...
JANUS EchoTest plugin initialized!
Loading plugin 'libjanus_recordplay.so'...
JANUS Record&Play plugin initialized!
Loading plugin 'libjanus_sip.so'...
JANUS SIP plugin initialized!
Loading plugin 'libjanus_audiobridge.so'...
[WARN] Denoising via RNNoise NOT supported
JANUS AudioBridge plugin initialized!
Loading plugin 'libjanus_textroom.so'...
[WARN] Data channels support not compiled, disabling TextRoom plugin
[WARN] The 'janus.plugin.textroom' plugin could not be initialized
Transport plugins folder: /opt/janus/lib/janus/transports
Loading transport plugin 'libjanus_http.so'...
HTTP transport timer started
HTTP webserver started (port 8088, /janus path listener)...
JANUS REST (HTTP/HTTPS) transport plugin initialized!
Loading transport plugin 'libjanus_nanomsg.so'...
JANUS Nanomsg transport plugin initialized!
Loading transport plugin 'libjanus_mqtt.so'...
Nanomsg thread started
MQTT SSL support disabled
[WARN] MQTT support disabled for both Janus and Admin API, giving up
JANUS MQTT transport plugin destroyed!
[WARN] The 'janus.transport.mqtt' plugin could not be initialized
Loading transport plugin 'libjanus_pfunix.so'...
[WARN] No Unix Sockets server started, giving up...
[WARN] The 'janus.transport.pfunix' plugin could not be initialized
Loading transport plugin 'libjanus_rabbitmq.so'...
RabbitMQ SSL support disabled
[WARN] RabbitMQ support disabled for both Janus and Admin API, giving up
[WARN] The 'janus.transport.rabbitmq' plugin could not be initialized
Loading transport plugin 'libjanus_websockets.so'...
[ERR] [janus.c:main:5837] 	Couldn't load transport plugin 'libjanus_websockets.so': /opt/janus/lib/janus/transports/libjanus_websockets.so: undefined symbol: lws_validity_confirmed

What I’ve tried so far:

  1. Compilation & Configuration:
    • I ran the following configuration command to disable WebSockets:

      ./configure --disable-websockets --disable-data-channels --disable-rabbitmq --disable-mqtt --disable-docs
      

      and got:

  janus-gateway$ ./configure --disable-websockets --disable-data-channels --disable-rabbitmq --disable-mqtt  --disable-docs
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether build environment is sane... yes
    checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
    checking for gawk... no
    checking for mawk... mawk
    checking whether make sets $(MAKE)... yes
    checking whether make supports nested variables... yes
    checking whether make supports nested variables... (cached) yes
    checking whether make supports the include directive... yes (GNU style)
    checking for gcc... gcc
    checking whether the C compiler works... yes
    checking for C compiler default output file name... a.out
    checking for suffix of executables... 
    checking whether we are cross compiling... no
    checking for suffix of object files... o
    checking whether we are using the GNU C compiler... yes
    checking whether gcc accepts -g... yes
    checking for gcc option to accept ISO C89... none needed
    checking whether gcc understands -c and -o together... yes
    checking dependency style of gcc... gcc3
    checking how to run the C preprocessor... gcc -E
    checking for grep that handles long lines and -e... /usr/bin/grep
    checking for egrep... /usr/bin/grep -E
    checking for ANSI C header files... yes
    checking for sys/types.h... yes
    checking for sys/stat.h... yes
    checking for stdlib.h... yes
    checking for string.h... yes
    checking for memory.h... yes
    checking for strings.h... yes
    checking for inttypes.h... yes
    checking for stdint.h... yes
    checking for unistd.h... yes
    checking minix/config.h usability... no
    checking minix/config.h presence... no
    checking for minix/config.h... no
    checking whether it is safe to define __EXTENSIONS__... yes
    checking for gcc... (cached) gcc
    checking whether we are using the GNU C compiler... (cached) yes
    checking whether gcc accepts -g... (cached) yes
    checking for gcc option to accept ISO C89... (cached) none needed
    checking whether gcc understands -c and -o together... (cached) yes
    checking dependency style of gcc... (cached) gcc3
    checking build system type... x86_64-pc-linux-gnu
    checking host system type... x86_64-pc-linux-gnu
    checking how to print strings... printf
    checking for a sed that does not truncate output... /usr/bin/sed
    checking for fgrep... /usr/bin/grep -F
    checking for ld used by gcc... /usr/bin/ld
    checking if the linker (/usr/bin/ld) is GNU ld... yes
    checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
    checking the name lister (/usr/bin/nm -B) interface... BSD nm
    checking whether ln -s works... yes
    checking the maximum length of command line arguments... 1572864
    checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
    checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
    checking for /usr/bin/ld option to reload object files... -r
    checking for objdump... objdump
    checking how to recognize dependent libraries... pass_all
    checking for dlltool... no
    checking how to associate runtime and link libraries... printf %s\n
    checking for ar... ar
    checking for archiver @FILE support... @
    checking for strip... strip
    checking for ranlib... ranlib
    checking command to parse /usr/bin/nm -B output from gcc object... ok
    checking for sysroot... no
    checking for a working dd... /usr/bin/dd
    checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
    checking for mt... mt
    checking if mt is a manifest tool... no
    checking for dlfcn.h... yes
    checking for objdir... .libs
    checking if gcc supports -fno-rtti -fno-exceptions... no
    checking for gcc option to produce PIC... -fPIC -DPIC
    checking if gcc PIC flag -fPIC -DPIC works... yes
    checking if gcc static flag -static works... yes
    checking if gcc supports -c -o file.o... yes
    checking if gcc supports -c -o file.o... (cached) yes
    checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
    checking whether -lc should be explicitly linked in... no
    checking dynamic linker characteristics... GNU/Linux ld.so
    checking how to hardcode library paths into programs... immediate
    checking whether stripping libraries is possible... yes
    checking if libtool supports shared libraries... yes
    checking whether to build shared libraries... yes
    checking whether to build static libraries... no
    checking for pkg-config... /usr/bin/pkg-config
    checking pkg-config is at least version 0.9.0... yes
    checking for JANUS... yes
    checking for library containing tls_config_set_ca_mem... no
    checking for nice_agent_set_port_range in -lnice... yes
    checking for nice_address_equal_no_port in -lnice... yes
    checking for nice_agent_close_async in -lnice... yes
    checking for nice_agent_new_full in -lnice... yes
    checking for nice_agent_consent_lost in -lnice... yes
    checking for dlopen in -ldl... yes
    checking for LIBSRTP... yes
    checking for usrsctp_finish in -lusrsctp... no
    checking for LIBCURL... yes
    checking for doxygen... doxygen
    checking for dot... dot
    checking for TRANSPORTS... yes
    checking for MHD... yes
    checking for lws_create_vhost in -lwebsockets... yes
    checking for amqp_error_string2 in -lrabbitmq... yes
    checking rabbitmq-c/amqp.h usability... yes
    checking rabbitmq-c/amqp.h presence... yes
    checking for rabbitmq-c/amqp.h... yes
    checking for MQTTAsync_create in -lpaho-mqtt3a... yes
    checking for nn_socket in -lnanomsg... yes
    checking for PLUGINS... yes
    checking for SOFIA... yes
    checking for OPUS... yes
    checking for OGG... yes
    checking for RNNOISE... no
    checking for LUA... no
    checking for LUA... yes
    checking for DUKTAPE... no
    checking for EVENTS... yes
    checking for LOGGERS... yes
    checking for npm... /usr/local/node/bin/npm
    checking for PCAP... no
    checking that generated files are newer than configure... done
    configure: creating ./config.status
    config.status: creating Makefile
    config.status: creating src/Makefile
    config.status: creating html/Makefile
    config.status: creating docs/Makefile
    config.status: executing depfiles commands
    config.status: executing libtool commands

    Compiler:                  gcc
    libsrtp version:           2.x
    SSL/crypto library:        OpenSSL
    DTLS set-timeout:          not available
    Mutex implementation:      GMutex (native futex on Linux)
    DataChannels support:      no
    Recordings post-processor: no
    TURN REST API client:      yes
    Doxygen documentation:     no
    Transports:
        REST (HTTP/HTTPS):     yes
        WebSockets:            no
        RabbitMQ:              no
        MQTT:                  no
        Unix Sockets:          yes
        Nanomsg:               yes
    Plugins:
        Echo Test:             yes
        Streaming:             yes
        Video Call:            yes
        SIP Gateway:           yes
        NoSIP (RTP Bridge):    yes
        Audio Bridge:          yes
        Video Room:            yes
        Record&Play:           yes
        Text Room:             yes
        Lua Interpreter:       no
        Duktape Interpreter:   no
    Event handlers:
        Sample event handler:  yes
        WebSocket ev. handler: yes
        RabbitMQ event handler:yes
        MQTT event handler:    yes
        Nanomsg event handler: yes
        GELF event handler:    yes
    External loggers:
        JSON file logger:      no
    JavaScript modules:        no

    If this configuration is ok for you, do a 'make' to start building Janus. A 'make install' will install Janus and its plugins to the specified prefix. Finally, a 'make configs' will install some sample configuration files too (something you'll only want to do the first time, though).
  • After that, I ran make and sudo make install, and the compilation was successful without errors.
  1. WebSocket Configuration:

    • I made sure to disable WebSocket-related settings in the Janus WebSocket configuration file located at /opt/janus/etc/janus/janus.transport.websockets.jcfg. Here’s the modified configuration:
      general: {
        ws = false
        wss = false
      }
      admin: {
        admin_ws = false
        admin_wss = false
      }
      
  2. WebSocket Demo Issue:

    • When I try to access the demo at https://janus.conf.meetecho.com/demos/streaming.html, I get the following error:
      Error connecting to the Janus WebSockets server: Is the server down?
      

Additional Information:

  • I have already tried deleting the /opt/janus directory and recompiling from scratch, but the issue persists.
  • Despite explicitly disabling the WebSocket plugin during configuration, I’m still seeing Janus attempting to load the WebSocket transport plugin (libjanus_websockets.so) during runtime.

Questions:

  1. Why is Janus still trying to load the WebSocket plugin even though I’ve disabled it in the configuration?
  2. What could be causing the undefined symbol: lws_validity_confirmed error, and how can I resolve it?
  3. How can I properly enable WebSockets in Janus?
    • I actually want to use the WebSocket transport, so what steps should I take to ensure WebSocket functionality is correctly configured and functional?

Thank you in advance for any help you can provide. I appreciate your time and assistance!

Best regards,
Addision Harry

Try doing a

ldd /opt/janus/lib/janus/transports/libjanus_websockets.so

That will show the plugin dependencies, and whether it can find the related libraries. Good chances are it can’t find libwebsockets where you installed it.

You’re disabling the backends, not the plugin. The plugin will try to be loaded anyway. If you want the plugin not to be loaded at all you have to do it here.

However, it appears that all the required dynamic libraries are being found correctly:

~$ ldd /opt/janus/lib/janus/transports/libjanus_websockets.so
	linux-vdso.so.1 (0x00007ffed831f000)
	libwebsockets.so.15 => /lib/x86_64-linux-gnu/libwebsockets.so.15 (0x00007f0327f55000)
	libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f0327e2b000)
	libjansson.so.4 => /lib/x86_64-linux-gnu/libjansson.so.4 (0x00007f0327e1c000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0327c2a000)
	libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f0327b97000)
	libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f03278be000)
	libev.so.4 => /lib/x86_64-linux-gnu/libev.so.4 (0x00007f03278ab000)
	libuv.so.1 => /lib/x86_64-linux-gnu/libuv.so.1 (0x00007f032787a000)
	libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007f0327871000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f032784e000)
	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f03277db000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f0327ff6000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f03277d3000)

while disabling the libjanus_websockets.so from loading seems to skip the plugin loading:

janus$ /opt/janus/bin/janus
Janus version: 1301 (1.3.1)
Janus commit: 623e5674bac1b876eac0df74f9a4171ca16998bb
Compiled on:  Wed 27 Nov 2024 09:58:09 PM CST

Logger plugins folder: /opt/janus/lib/janus/loggers
[WARN] 	Couldn't access logger plugins folder...
---------------------------------------------------
  Starting Meetecho Janus (WebRTC Server) v1.3.1
---------------------------------------------------

Checking command line arguments...
Debug/log level is 4
Debug/log timestamps are disabled
Debug/log colors are enabled
Adding 'vmnet' to the ICE ignore list...
Using 172.16.11.21 as local IP...
Token based authentication disabled
Initializing recorder code
Initializing ICE stuff (Full mode, ICE-TCP candidates disabled, half-trickle, IPv6 support disabled)
TURN REST API backend: (disabled)
[WARN] Janus is deployed on a private address (172.16.11.21) but you didn't specify any STUN server! Expect trouble if this is supposed to work over the internet and not just in a LAN...
Crypto: OpenSSL >= 1.1.0
No cert/key specified, autogenerating some...
Fingerprint of our certificate: 62:C0:B0:DC:AB:89:C7:2F:ED:07:EF:7D:A7:75:4E:2E:24:75:48:F2:04:B3:BA:01:66:3A:21:90:3C:BF:4C:23
[WARN] Data Channels support not compiled
Event handlers support disabled
Plugins folder: /opt/janus/lib/janus/plugins
Joining Janus requests handler thread
Sessions watchdog started
Loading plugin 'libjanus_videoroom.so'...
JANUS VideoRoom plugin initialized!
Loading plugin 'libjanus_nosip.so'...
JANUS NoSIP plugin initialized!
Loading plugin 'libjanus_streaming.so'...
JANUS Streaming plugin initialized!
Loading plugin 'libjanus_videocall.so'...
JANUS VideoCall plugin initialized!
Loading plugin 'libjanus_echotest.so'...
JANUS EchoTest plugin initialized!
Loading plugin 'libjanus_recordplay.so'...
JANUS Record&Play plugin initialized!
Loading plugin 'libjanus_sip.so'...
JANUS SIP plugin initialized!
Loading plugin 'libjanus_audiobridge.so'...
[WARN] Denoising via RNNoise NOT supported
JANUS AudioBridge plugin initialized!
Loading plugin 'libjanus_textroom.so'...
[WARN] Data channels support not compiled, disabling TextRoom plugin
[WARN] The 'janus.plugin.textroom' plugin could not be initialized
Transport plugins folder: /opt/janus/lib/janus/transports
Loading transport plugin 'libjanus_http.so'...
HTTP transport timer started
HTTP webserver started (port 8088, /janus path listener)...
JANUS REST (HTTP/HTTPS) transport plugin initialized!
Loading transport plugin 'libjanus_nanomsg.so'...
JANUS Nanomsg transport plugin initialized!
Loading transport plugin 'libjanus_mqtt.so'...
Nanomsg thread started
MQTT SSL support disabled
[WARN] MQTT support disabled for both Janus and Admin API, giving up
JANUS MQTT transport plugin destroyed!
[WARN] The 'janus.transport.mqtt' plugin could not be initialized
Loading transport plugin 'libjanus_pfunix.so'...
[WARN] No Unix Sockets server started, giving up...
[WARN] The 'janus.transport.pfunix' plugin could not be initialized
Loading transport plugin 'libjanus_rabbitmq.so'...
RabbitMQ SSL support disabled
[WARN] RabbitMQ support disabled for both Janus and Admin API, giving up
[WARN] The 'janus.transport.rabbitmq' plugin could not be initialized
[WARN] Transport plugin 'libjanus_websockets.so' has been disabled, skipping...

then I tried again to access the demo at https://janus.conf.meetecho.com/demos/streaming.html , I get the same error:

Error connecting to the Janus WebSockets server: Is the server down?

Finally I checked the installation instructions and found the websocket library version seems too old for the project, the error disappears after I reinstall the library,now I could start the Janus:

janus-gateway$ /opt/janus/bin/janus
Janus version: 1301 (1.3.1)
Janus commit: 623e5674bac1b876eac0df74f9a4171ca16998bb
Compiled on:  Thu 28 Nov 2024 10:27:09 AM CST

Logger plugins folder: /opt/janus/lib/janus/loggers
[WARN] 	Couldn't access logger plugins folder...
---------------------------------------------------
  Starting Meetecho Janus (WebRTC Server) v1.3.1
---------------------------------------------------

Checking command line arguments...
Debug/log level is 4
Debug/log timestamps are disabled
Debug/log colors are enabled
Adding 'vmnet' to the ICE ignore list...
Using 172.16.11.21 as local IP...
Token based authentication disabled
Initializing recorder code
Initializing ICE stuff (Full mode, ICE-TCP candidates disabled, half-trickle, IPv6 support disabled)
TURN REST API backend: (disabled)
[WARN] Janus is deployed on a private address (172.16.11.21) but you didn't specify any STUN server! Expect trouble if this is supposed to work over the internet and not just in a LAN...
Crypto: OpenSSL >= 1.1.0
No cert/key specified, autogenerating some...
Fingerprint of our certificate: 65:53:2C:9F:76:A9:D4:5B:77:D0:BC:21:61:97:EF:26:39:C6:5B:6F:BB:90:21:45:0E:A8:17:C4:0C:5D:48:D9
[WARN] Data Channels support not compiled
Event handlers support disabled
Plugins folder: /opt/janus/lib/janus/plugins
Loading plugin 'libjanus_videoroom.so'...
Joining Janus requests handler thread
Sessions watchdog started
JANUS VideoRoom plugin initialized!
Loading plugin 'libjanus_nosip.so'...
JANUS NoSIP plugin initialized!
Loading plugin 'libjanus_streaming.so'...
JANUS Streaming plugin initialized!
Loading plugin 'libjanus_videocall.so'...
JANUS VideoCall plugin initialized!
Loading plugin 'libjanus_echotest.so'...
JANUS EchoTest plugin initialized!
Loading plugin 'libjanus_recordplay.so'...
JANUS Record&Play plugin initialized!
Loading plugin 'libjanus_sip.so'...
JANUS SIP plugin initialized!
Loading plugin 'libjanus_audiobridge.so'...
[WARN] Denoising via RNNoise NOT supported
JANUS AudioBridge plugin initialized!
Loading plugin 'libjanus_textroom.so'...
[WARN] Data channels support not compiled, disabling TextRoom plugin
[WARN] The 'janus.plugin.textroom' plugin could not be initialized
Transport plugins folder: /opt/janus/lib/janus/transports
Loading transport plugin 'libjanus_http.so'...
HTTP transport timer started
HTTP webserver started (port 8088, /janus path listener)...
JANUS REST (HTTP/HTTPS) transport plugin initialized!
Loading transport plugin 'libjanus_nanomsg.so'...
JANUS Nanomsg transport plugin initialized!
Loading transport plugin 'libjanus_mqtt.so'...
Nanomsg thread started
MQTT SSL support disabled
[WARN] MQTT support disabled for both Janus and Admin API, giving up
JANUS MQTT transport plugin destroyed!
[WARN] The 'janus.transport.mqtt' plugin could not be initialized
Loading transport plugin 'libjanus_pfunix.so'...
[WARN] No Unix Sockets server started, giving up...
[WARN] The 'janus.transport.pfunix' plugin could not be initialized
Loading transport plugin 'libjanus_rabbitmq.so'...
RabbitMQ SSL support disabled
[WARN] RabbitMQ support disabled for both Janus and Admin API, giving up
[WARN] The 'janus.transport.rabbitmq' plugin could not be initialized
Loading transport plugin 'libjanus_websockets.so'...
[WARN] libwebsockets has been built without IPv6 support, will bind to IPv4 only
libwebsockets logging: 0
Websockets server started (port 8188)...
JANUS WebSockets transport plugin initialized!
WebSockets thread started

I hope the above output indicates that Janus has started correctly. And I checked the port usage:

~$ sudo lsof -i:8188
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
janus   135667 leehe   32u  IPv4 959415      0t0  TCP *:8188 (LISTEN)
~$ sudo lsof -i:8088
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
janus   135667 leehe   18u  IPv6 959408      0t0  TCP *:omniorb (LISTEN)

But when I come to the https://janus.conf.meetecho.com/demos/streaming.html and click the Start button would still get the same error:

Is there still an issue with my configuration somewhere?

That’s our demo server. You need to deploy your own copy of the demos and have them point to your own Janus instance.