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:
- 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
andsudo make install
, and the compilation was successful without errors.
-
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 }
- I made sure to disable WebSocket-related settings in the Janus WebSocket configuration file located at
-
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?
- When I try to access the demo at
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:
- Why is Janus still trying to load the WebSocket plugin even though I’ve disabled it in the configuration?
- What could be causing the
undefined symbol: lws_validity_confirmed
error, and how can I resolve it? - 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