All notable changes to this project will be documented in this file.
- Fixed rare crash when detaching handles [Issue-2464]
- Added option to offer IPv6 link-local candidates as well [PR-2689]
- Added spatial audio support to AudioBridge via stereo mixing [PR-2446]
- Added support for plain RTP participants to AudioBridge [PR-2464]
- Added API to start/stop AudioBridge recordings dynamically (thanks @rajneeshksoni!) [PR-2674]
- Fixed broken mountpoint switching when using different payload types in Streaming plugin [PR-2692]
- Fixed occasional deadlock on Streaming plugin mountpoint destroy during RTSP reconnects (thanks @lionelnicolas!) [PR-2700]
- Added "Expires" support to SUBSCRIBE in SIP plugin (thanks @nicolasduteil!) [PR-2661]
- Added option to specify Call-ID for SUBSCRIBE dialogs in SIP plugin (thanks @nicolasduteil!) [PR-2664]
- Fixed broken simulcast support in VideoCall plugin (thanks @lucily-star!) [PR-2671]
- Implemented RabbitMQ reconnection logic, in both transport and event handler (thanks @chriswiggins!) [PR-2651]
- Added support for renegotiation of external streams in janus.js (thanks @kmeyerhofer!) [PR-2604]
- Added support for HEVC/H.265 aggregation packets (AP) to janus-pp-rec (thanks @nu774!) [PR-2662]
- Refactored janus-pp-rec to cleanup the code, and use libavformat for Opus as well (thanks @lu-zero!) [PR-2665]
- Added additional target formats for some recorded codecs [PR-2680]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added support for relative paths in config files, currently only in MQTT event handler (thanks @RSATom!) [PR-2623]
- Removed support for now deprecated frame-marking RTP extension [PR-2640]
- Fixed rare race condition between VideoRoom publisher leaving and subscriber hanging up [PR-2637]
- Fixed occasional crash when using announcements in AudioBridge
- Fixed rare crash in Streaming plugin when reconnecting RTSP streams (thanks @lucylu-star!) [PR-2542]
- Fixed broken switch in Streaming plugin when using helper threads
- Fixed rare race conditions on socket close in SIP and NoSIP plugins [PR-2599]
- Added support for out-of-dialog SIP MESSAGE requests (thanks @ihusejnovic!) [PR-2616]
- Fixed memory leak when using helper threads in Streaming plugin
- Added support for datachannel label/protocol to Lua and Duktape plugins [PR-2641]
- Added ability to use WebSockets transport over Unix sockets (thanks @mdevaev!) [PR-2620]
- Added janus-pp-rec mechanism to correct wrong RTP timestamps in MJR recordings (thanks @tbence94!) [PR-2573]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Add new option to configure ICE nomination mode, if libnice is recent enough [PR-2541]
- Added support for per-session timeout values (thanks @alg!) [PR-2577]
- Added support for compilation on FreeBSD (thanks @jsm222!) [PR-2508]
- Fixed occasional auth errors when using both API secret and stored tokens (thanks @deep9!) [PR-2581]
- Added support for stdout logging to daemon-mode as well (thanks @mtorromeo!) [PR-2591]
- Fixed odr-violation issue between Lua and Duktape plugins [PR-2540]
- Fixed missing simulcast stats in Admin API and Event Handlers when using rid [Issue-2610]
- Fixed VideoRoom recording not stopped for participants entering after global recording was started [PR-2550]
- Fixed 'audiocodec'/'videocodec' being ignored when joining a VideoRoom via 'joinandconfigure'
- Added content type support to MESSAGE in SIP plugin (thanks @tijmenNL!) [PR-2567]
- Made RTSP timeouts configurable in Streaming plugin (thanks @pontscho!) [PR-2598]
- Fixed incorrect parsing of backend URL in WebSockets event handler [Issue-2603]
- Added support for secure connections and lws debugging to WebSockets event handler
- Fixed occasionally broken AV1 recordings post-processing
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Reduced verbosity of a few LOG_WARN messages at startup
- Close libnice agent resources asynchronously when hanging up PeerConnections (thanks @fbellet!) [PR-2492]
- Fixed broken parsing of SDP when trying to match specific codec profiles [PR-2549]
- Added muting/moderation API to the VideoRoom plugin [PR-2513]
- Fixed a few race conditions in VideoRoom plugin that could lead to crashes [PR-2539]
- Send 480 instead of BYE when hanging up calls in early dialog in the SIP plugin (thanks @zayim!) [PR-2521]
- Added configurable media direction when putting calls on-hold in the SIP plugin [PR-2525]
- Fixed rare race condition in AudioBridge when using "changeroom" (thanks @JeckLabs!) [PR-2535]
- Fixed broken API secret management in HTTP long polls (thanks @remvst!) [PR-2524]
- Report failure if binding to a socket fails in WebSockets transport plugin (thanks @Symbiatch!) [PR-2534]
- Updated RabbitMQ logic in both transport and event handler (thanks @chriswiggins!) [PR-2430]
- Fixed segfault in WebSocket event handler when backend was unreachable
- Added TLS support to MQTT event handler (thanks @RSATom!) [PR-2517]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Replaced Travis CI with GitHub Actions [PR-2486]
- Fixed data channel messages potentially getting stuck in case of burst transfers (thanks @afshin2003!) [PR-2427]
- Fixed simulcast issues when renegotiating PeerConnections [Issue-2466]
- Added configurable TURN REST API timeout (thanks @evorw!) [PR-2470]
- Added support for recording of binary data channels [PR-2481]
- Fixed occasional SRTP errors when pausing and then resuming Streaming plugin handles after a long time
- Fixed occasional SRTP errors when leaving and joining AudioBridge rooms without a new PeerConnection after a long time
- Added support for playout of data channels in Record&Play plugin and demo (thanks @ricardo-salgado-tekever!) [PR-2468]
- Added option to override connections limit in HTTP transport plugin [PR-2489]
- Added options to enable libmicrohttpd debugging in HTTP transport plugin (thanks @evorw!) [PR-2471]
- Fixed a few compile and runtime issues in WebSocket event handler
- Refactored postprocessing management of timestamps to fix some key issues [PR-2345]
- Fixed postprocessing of audio recordings containing RTP silence suppression packets [PR-2467]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added differentiation between IPv4 and IPv6 NAT-1-1 addresses [PR-2423]
- Made NACK buffer cleanup on outgoing keyframe disabled by default but configurable [PR-2402]
- Added support for simulcast and TWCC to Duktape and Lua plugins [PR-2409]
- Fixed rare crash in AudioBridge plugin when leaving a room [Issue-2432]
- Fixed codec names not being updated in the SIP plugin after renegotiations (thanks @ihusejnovic!) [PR-2417]
- Fixed crash in SIP plugin when handling REGISTER challenges without WWW-Authenticate headers [Issue-2419]
- Added option to SIP plugin to let users CANCEL pending transactions without waiting for a 1xx [PR-2434]
- Added option to enforce CORS on the server side in both HTTP and WebSocket transport plugins [PR-2410]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Fixed SDP negotiation when client uses max-bundle [Issue-2390]
- Added optional JSEP flag to invert processing order of simulcast "rid" in SDP [PR-2385]
- Fixed broken rid-based simulcast when using less than 3 substreams
- Fixed occasional misleading "private IP" warning on startup (thanks @npikimasu!) [PR-2386]
- Added "plugin-offer mode" to AudioBridge [PR-2366]
- Fixed occasional deadlock when sending SUBSCRIBE messages via SIP plugin [PR-2387]
- Fixed occasional SIGABRT in RabbitMQ transport (thanks @david-goncalves!) [PR-2380]
- Fixed broken RTP parsing in janus-pp-rec when there were too many extensions (thanks @isnumanagic!) [PR-2411]
- Fixed occasional segfault when post-processing G.722 mjr recordings
- Added configurable simulcast encodings to janus.js (thanks @fippo!) [PR-2393]
- Updated old Insertable Streams APIs in janus.js and e2etest.js
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- New mechanism to tweak/query transport plugins via Admin API [PR-2354]
- Fixed occasional segfault when using event handlers and VideoRoom [Issue-2352]
- Fixed occasional "Unsupported codec 'none'" log errors (thanks @neilyoung!) [PR-2357]
- Fixed broken AudioBridge RTP forwarding when using G711 [Issue-2375]
- Added helper threads support to RTSP mountpoints as well [PR-2361]
- Fixed data channels not working as expected in Streaming plugin when using helper threads
- Fixed simulcast occasionally not working in Streaming plugin until manual PLI trigger
- Added proper fragmentation in WebSockets transport plugin [PR-2355]
- Fixed timing resolution issue in MQTT transport (thanks @feymartynov!)) [PR-2358]
- Fixed MQTT transport issue when trying to shutdown gracefully (thanks @feymartynov!)) [PR-2374]
- Fixed broken configuration of Nanomsg Admin API (thanks @sdamodharan!)) [PR-2372]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Fixed occasional crash in event handlers [Issue-2312]
- Fixed occasional crash in VideoRoom plugin [Issue-2318]
- Fixed missing PLI when switching Streaming mountpoint [Issue-2333]
- Fixed broken recordings in VideoCall plugin (thanks @SamyCookie!) [PR-2325]
- Fixed "kick" not working in TextRoom plugin (thanks @backface!) [PR-2332]
- Fixed occasional post-processing issues with incomplete mjr files (thanks @SamyCookie!) [PR-2356]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Fixed usrsctp vulnerability by using internal hashmap in SCTP code [PR-2302]
- Fixed some issues when using BoringSSL for DTLS (thanks @fancycode!) [PR-2278]
- Added support for multiple nat-1-1 addresses (thanks @fancycode!) [PR-2279]
- Fixed negotiation issue on Firefox when Janus is built without datachannels [PR-2281]
- Fixed small memory leaks when dealing with local candidates (thanks @fancycode!) [PR-2288]
- Fixed occasional segfault in VideoRoom when failing to setup a new subscriber [Issue-2277]
- Fixed potential deadlock in AudioBridge when switching rooms (thanks @JeckLabs!) [PR-2280]
- Fixed small memory leak in AudioBridge (thanks @JeckLabs!) [PR-2298]
- Fixed occasional segfault in VideoCall when hanging up calls [Issue-2300]
- Fixed occasional curl hiccups with RTSP on some cameras
- Added reconnect mechanism to RabbitMQ event handler (thanks @david-goncalves!) [PR-2267]
- Extended MQTT support in transport and event handler to v5 (thanks @feymartynov!) [PR-2273]
- Added settings to configure MQTT buffers in the transport plugin (thanks @feymartynov!) [PR-2286]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Fixed occasional crashes in VideoRoom related to subscribers activity [PR-2236] [PR-2253]
- Fixed AudioBridge compilation issues when libogg is missing (thanks @ffontaine!) [PR-2238]
- Fixed broken SRTP forwarders in AudioBridge [PR-2258]
- Fixed occasional segfaults due to race conditions in SIP plugin [PR-2247]
- Fixed occasional recording issues in Janus and Duktape plugins
- Added timeout (120s) on idle connections in HTTP transport
- Fixed Opus recordings occasionally being way too large than the source file when processed via janus-pp-rec (thanks @neilkinnish!) [PR-2250]
- Added a new web demo to use canvas elements as a media source for PeerConnections [PR-2261]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Fixed sscanf-related security issues [PR-2229]
- Fixed some RTP extensions not working after renegotiations [Issue-2192]
- Fixed occasionally broken simulcast behaviour [PR-2231]
- Fixed "switch" request not taking simulcast/SVC into account in VideoRoom and Streaming plugins [Issue-2219]
- Fixed inability to ask for random ports when creating Streaming plugin mountpoints with simulcast support [PR-2225]
- Fixed occasional crashes in SIP plugin when using helpers [PR-2216]
- Updated Duktape dependencies to v2.5, and fixed Duktape plugin relaying text data as binary [PR-2233]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added initial support for AV1 and H.265 video codecs [PR-2120]
- Added initial support for end-to-end encryption via Insertable Streams [PR-2074]
- Fixed security issues when processing SDPs [PR-2214]
- Fixed occasional codec profile negotiation issues (thanks @groupboard!) [PR-2212]
- Fixed occasional segfaults when hanging up VideoRoom subscribers
- Fixed RTSP issues when fmtp is missing (thanks @lionelnicolas!) [PR-2190]
- Fixed RTSP not following redirects, when used (thanks @lionelnicolas!) [PR-2195]
- Fixed SRTP-SDES and renegotiation issues in NoSIP plugin (thanks @ihusejnovic!) [PR-2196]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added support for negotiation of codec profiles (mainly VP9 and H.264) [PR-2080]
- Added new callback to let plugins know when the datachannel first becomes available, and then any time it's writable (empty buffers) [PR-2060]
- Added support for data channel subprotocols [PR-2157]
- Added new event handler for GrayLog using GELF (thanks @mirkobrankovic!) [PR-1788]
- Added per-user override of global room 'audio_active_packets' and 'audio_level_average' properties to AudioBridge and VideoRoom (thanks @mirkobrankovic!) [PR-2158]
- Notify speaker that started/stopped talking too, when talking events are triggered in VideoRoom and AudioBridge (thanks @maxboehm!) [PR-2172]
- Allow listing of private rooms/mountpoints if an admin_key is used (thanks @robby2016!) [PR-2161]
- Fixed RTCP support not triggering PLIs for new simulcast mountpoint viewers [Issue-2156]
- Fixed occasional issue binding multicast mountpoints (thanks @PaulKerr!) [PR-2167]
- Fixed buffering of keyframes not working in Streaming plugin (thanks @TomFFF!) [PR-2170]
- Added support for buffering of keyframes to RTSP mountpoints too (thanks @lionelnicolas!) [PR-2180]
- Fixed renegotiation support in SIP plugin when audio/video is added (thanks @ihusejnovic!) [PR-2164] [PR-2173]
- Fixed menus in html documentation when using Doxygen >= 1.8.14 (thanks @i8-pi!) [PR-2155]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Fixed sessions not being cleaned up when disabling session timeouts and the transport disconnects (thanks @nicolasduteil!) [PR-2143]
- Added option to keep candidates with private host addresses when using nat-1-1, and advertize them too instead of just replacing them
- Added auth token, if available, to 'attached' event (handlers) and to Admin API (handle_info)
- Added new API to start/stop recording a VideoRoom as a whole, and a new option to prevent participants from starting/stopping their own recording (thanks @wheresjames!) [PR-2137]
- Fixed rare deadlock when wrapping up Streaming plugin mountpoints [PR-2141]
- Fixed rare deadlock when destroying AudioBridge rooms
- Added synchronous request to check if an announcement is playing in the AudioBridge
- Fixed AudioBridge announcement not waking up sleeping forwarder
- Added global room mute/unmute support to AudioBridge
- Added configurable DSCP support for outgoing RTP packets to SIP and NoSIP plugins (thanks @GerardM22!) [PR-2150]
- Added support for RTP extensions (audio-level, video-orientation) to NoSIP plugin [Issue-2152]
- Added option to configure ciphers suite for secure WebSockets (thanks @agclark81!) [PR-2135]
- Added timer to janus.js to avoid spamming onmute/onunmute events and flashing videos [PR-2147]
- Added a new tool to convert .pcap captures to .mjr recordings [PR-2144]
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Updated code not to wait forever for local candidates when half-trickling and sending an SDP out
- Fixed occasional CPU spiking issues when dealing with ICE failures (thanks @sjkummer!)
- Fixed occasional stall when gathering ICE candidates (thanks @wheresjames!)
- Fixed the incorrect value being set via DSCP, when configured
- Fixed occasional race condition when hanging up VideoRoom subscribers
- Fixed Audiobridge and Streaming plugins not playing the last chunk of .opus files (thanks @RSATom!)
- Fixed duplicate subscriptions (and SRTP/SRTCP errors) on multiple watch requests in Streaming plugin
- Updated Streaming and TextRoom plugins to stop using legacy datachannel negotiation
- Fixed occasional crash in HTTP transport when dealing with unknown requests
- Fixed occasional disconnect in WebSockets (thanks @tomnotcat!)
- Made RabbitMQ exchange type configurable in both transport and event handler (thanks @voicenter!)
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Change libsrtp detection in the configure script to use pkg-config
- Fixed compilation error with gcc10
- Fixed RTCP issue that could occasionally lead to broken retransmissions when using rtx
- Added option to specify DSCP Type of Service (ToS) for media streams
- Fixed a couple of race conditions during renegotiations
- Fixed VideoRoom and Streaming "destroy" not working properly when using string IDs
- Fix occasional segfault in VideoRoom (thanks @cb22!)
- Fixed AudioBridge "create" not working properly when using string IDs
- Added support for playing Opus files in AudioBridge rooms
- Added support to Opus files for file-based mountpoints in Streaming plugin
- Added support for generic metadata to Streaming mountpoints
- Streaming plugin now returns mountpoint IP address(es) in "create" and "info", when binding to specific IP/interface
- Fixed occasional segfault when using helper threads in Streaming plugin
- Fixed occasional race conditions in HTTP transport
- Added support for specifying screensharing framerate in janus.js (thanks @agclark81!)
- Cleaned up code in janus.js (thanks @alienpavlov!)
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Converted HTTP transport plugin to single thread (now requires libmicrohttpd >= 0.9.59)
- Fixed .deb file packaging (thanks @FThrum!)
- Added foundation for aiortc-based functional testing (python)
- Fixed occasional audio/video desync
- Added asynchronous resolution of mDNS candidates, and an option to automatically ignore them entirely
- Updated default DTLS ciphers (thanks @fippo!)
- Added option to generate ECDSA certificates at startup, instead of RSA (thanks @Sean-Der!)
- Fixed rare race condition when claiming sessions
- Fixed rare crash in ice.c (thanks @tmatth!)
- Fixed dangerous typo in querylogger_parameters (copy/paste error)
- Fixed occasional deadlocks in VideoRoom (thanks @mivuDing and @agclark81!)
- Added support for RTSP Content-Base header to Streaming plugin
- Fixed double unlock when listing private rooms in AudioBridge
- Made AudioBridge prebuffering property configurable, both per-room and per-participant
- Added G.711 support to AudioBridge (both participants and RTP forwarders)
- Added called URI to 'incomingcall' and 'missed_call' events in SIP plugin (in case the registered user is associated with multiple public URIs)
- Fixed race conditions and leaks in VideoCall and VoiceMail plugins
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added configurable global prefix for log lines
- Implemented better management of remote candidates with invalid addresses
- Added subtype property to differentiate some macro-types in event handlers
- Improved detection of H.264 keyframes (thanks @cameronlucas3!)
- Added configurable support for strings as unique IDs in AudioBridge, VideoRoom, TextRoom and Streaming plugins
- Fixed small memory leak when creating Streaming mountpoints dynamically
- Fixed segfault when trying to start a SIP call with a non-existing refer_id (thanks @tmatth!)
- Fixed errors negotiating video in SIP plugin when multiple video profiles are provided
- Updated SIP plugin transfer code to answer with a 202 right away, instead of sending a 100 first (which won't work with proxies)
- Added several features and fixes several nits in SIP demo UI
- Fixed janus.js error callback not being invoked when an HTTP error happens trying to attach to a plugin (thanks @hxl-dy!)
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Refactored core-plugin callbacks
- Added RTP extensions termination
- Removed requirement to enable ICE Lite to use ICE-TCP, even though it may cause issues (thanks @sjkummer!)
- Added support for transport-wide CC on outgoing streams (feedback still unused, though)
- Dynamically update NACK queue size depending on RTT
- Fixed risk of RTP header memory misalignment when dealing with rtx packets
- Users muted in AudioBridge by an admin are now notified as well (thanks @klanjabrik!)
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added Travis CI integration (thanks @fippo for kickstarting it!)
- New configuration property to add protected folders not to save recordings and pcap captures to
- Fixed rare race condition when joining and destroying a VideoRoom session
- Improved parsing of headers in RTSP messages (thanks @kefir266!)
- Fixed segfault in AudioBridge when leaving a room before PeerConnection is ready
- Fixed '500' errors being sent in response to incoming OPTIONS in the SIP plugin (thanks @ycherniavskyi!)
- Fixed helpers not being able to send SUBSCRIBE requests in SIP plugin
- Added option to fix audio skew compensation, if present, to janus-pp-rec
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added binary data support to data channels
- Fixed segfault at startup if event handlers or loggers directory couldn't be opened (thanks @kazzmir!)
- Fixed potential segfault when closing logging at shutdown
- Allowed RTCP ports to be picked randomly using 0, in Streaming plugin
- Fixed occasional memory leak when destroying mountpoints in Streaming plugin
- Fixed memory leak in SIP plugin
- Updated 'referred_by' field to contain the value of SIP referred-by header, and not just the URI (thanks @pawnnail!)
- Don't keep TextRoom plugin loaded if data channels were not compiled
- Removed SIPre plugin from the repo
- Fixed late initialization of janus.js constructor callbacks
- Changed janus.js to use sendBeacon instead of XHR when closing/refreshing page
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added changelog file to the repo and docs (thanks @oscarvadillog!)
- Added new category of plugins for modular logging (stdout and file still there, and part of the core)
- Removed option to enable rtx (now always supported, when negotiated)
- Added gzip compression helper method to the core utils
- Fixed RTSP SETUP issues when url contains query string parameters
- Added option to gzip events when using the Sample Event Handler
- Streamlined janus.js (thanks @oscarvadillog!)
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Split SDP lines when parsing on line feed only, and trim carriage feed instead (\n instead of \r\n)
- Reduced default twcc_period (how often to send feedback when using Transport Side BWE) from 1s to 200ms
- Added option to skip (and disable) unreachable STUN/TURN server at startup (thanks @sjkummer!)
- Fixed video desynchronization when doing G.722/iSac audio
- Other generic fixes on A/V desync
- Added support for multiple concurrent calls for the same account to the SIP plugin
- Added support for blind and attended transfers to the SIP plugin
- Added way to inject custom Contact params in REGISTER to the SIP plugin
- Added way to intercept non-standard headers in SIP messages to SIP plugin (thanks @ihusejnovic!)
- Fixed missing SIP CANCEL when hanging up outgoing unanswered calls in SIP plugin
- Added support for domain names (and IPv6) to RTP forwarders in AudioBridge and VideoRoom
- Fixed broken b=TIAS SDP attribute support for Firefox in VideoRoom (thanks @MvEerd!)
- Fixed and improved VP9 SVC support in VideoRoom and Streaming plugins
- Added IPv6 support to Streaming plugin
- Fixed potential segfault in Streaming plugin (thanks @garry81!)
- Fixed occasional latching issues for RTSP in Streaming plugin
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added warning at startup if libnice version is outdated (at least 0.1.15 recommended)
- Added option to specify CWD when launching Janus as a daemon (thanks @l7s!)
- Extended the STUN test via Admin API to support binding to a specific port, and return the public one
- Fixed simulcast issue when needing to automatically drop to lower layers
- Fixed potential endless loop when binding ports in the Streaming plugin
- Made creating Streaming mountpoints more asynchronous (especially for RTSP)
- Added support for SIP SUBSCRIBE/NOTIFY to SIP plugin
- Added ability to add custom headers to SIP BYE (thanks @mmujic!)
- Added option to specify IP to bind to for media in SIP plugin (thanks @razvancrainea!)
- Fixed occasional segfault when leaving a VideoRoom
- Added audio level dBov average to talk events in VideoRoom plugin (thanks @aconchillo!)
- Added new synchronous API to mute other participants in the AudioBridge plugin (thanks @klanjabrik!)
- Fixed typo in SDP processing in Duktape/JavaScript plugin, and tied Duktape logging to the one in the Janus core (thanks @l7s!)
- Tied Lua logging to the one in the Janus core
- Added command line option to janus-pp-rec to specify the output format (thanks @rscreene!)
- Added new WebSocket and Nanomsg event handlers
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Fixed duplicate values in config that could result in wrong property being used
- Fixed occasional race condition when processing SDPs (thanks @Bug-Fairy!)
- Fixed broken SDP when rejecting audio/video m-line
- Fixed Admin API not responding after sending messages to unresponsive plugins
- Fixed some issues with RTSP support in Streaming plugin
- Added option to keep recording Streaming mountpoints even when disabled
- Allow SIP plugin to negotiate SRTP separately for audio and video
- Fixed autoaccept_reinvites=FALSE not working when accepting calls in SIP plugin, and improved re-INVITEs support in general (thanks @pawnnail!)
- Added possibility to have different addresses for remote audio and video in SIP, SIPre and NoSIP plugins (thanks @pawnnail!)
- Make sure remote addresses are reset when call ends in SIP, SIPre and NoSIP plugins (thanks @pawnnail!)
- Added SIP Reason Header (RFC3326) info to "hangup" event in SIP plugin, if available (thanks @ihusejnovic!)
- Added method to list participants in a TextRoom (thanks @mtltechtemp!)
- Added method to send a room announcement in TextRoom plugin
- Fixed occasional segfault in TextRoom when using Admin API to send requests (thanks @MvEerd!)
- Added support for MQTT v5, and fixed reconnection issue (thanks @feymartynov!)
- Fixed occasional crashes when using more than one event handler at the same time
- Added configurable bitrate values for rid-based simulcast to janus.js (thanks @vivaldi-va!)
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added Admin API method to make synchronous requests to plugins
- Fixed broken media when removing/adding it again in renegotiations
- Fixed several issues related to datachannels
- Fixed occasional memory leak in the core when ending sessions from plugins (thanks @uxmaster!)
- Changed Janus API 'slowlink' event to use lost packets instead of NACKs, and made it configurable with a dynamic threshold
- Fixed broken SDES length in compound RTCP packets (thanks @glenn-hpcnt!)
- Fixed DTLS window size support in the core (thanks @garry81!)
- Added status messages to MQTT transport (thanks @feymartynov!)
- Changed default for sender-side bandwidth estimation in VideoRoom to TRUE
- Fixed occasional segfaults when using RTP forwarders with RTCP support
- Added VideoRoom RTP forwarder events to event handlers notifications
- Added a configurable RTP range to the Streaming plugin settings
- Fixed broken H.264 simulcast support in Streaming plugin
- Refactored janus-pp-rec to support command line options
- Fixed occasional segfault when post-processing VP8 recordings
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Removed requirement for both sdpMid and sdpMLineIndex to be in trickle messages
- Set ICE remote credentials when receiving remote SDP, instead of later
- Fixed occasional segfaults when using WebSocket as a transport
- Fixed segfault in WebSocket transport when using ACL
- Added new Admin API messages to destroy a session, detach a handle and hangup a PeerConnection (same as Janus API)
- Fixed leak when RTP forwarding with RTCP feedback in the VideoRoom plugin
- Added support for third spatial layer when using VP9 SVC in VideoRoom (assuming EnabledByFlag_3SL3TL is used)
- Fixed segfault when changing rooms in AudioBridge
- Made sure the SIP stack doesn't accept new calls until the previous one has freed all resources
- Fixed occasional segfault when pushing SIP messages to event handlers
- Added option to locally cleanup handles when destroying a session in janus.js
- Fixed exception in janus.js when using datachannels
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added experimental debug mode with disabled WebRTC encryption (to use with the --disable-webrtc-encryption in Chrome unstable)
- Added Janus API ping/pong mechanism to Admin API as well
- Added Admin API methods to check address resolving capabilities and test a provided STUN server
- Added check on ICE gathering process start (fixes issue with exhausted port range)
- Added support for temporal layer in H.264 simulcast via frame marking
- Made sure a PLI is sent on all layers, when simulcast is used
- Fixed a crash when using event handlers in SIP plugin
- Fixed some race conditions on hangups in SIP plugin
- Added option to lock RTP forwarding functionality via an admin key/secret (VideoRoom and AudioBridge)
- Fixed regression in Streaming plugin RTCP support
- Added option to override payload type for RTSP mountpoints in Streaming plugin
- Fixed a few issues saving permanent mountpoints in Streaming plugin
- Separated checks for PeerConnection and getUserMedia support in janus.js (since plain HTTP hides getUserMedia now)
- Added sanity checks on createOffer/createAnswer in janus.js
- Fixed regression in simulcasting when doing SDP munging in janus.js
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added support for multiple datachannel streams in the same PeerConnection
- Forced DTLS 1.2 on older OpenSSL versions
- Added first integration of SDP support in the fuzzers
- Fixed several leaks in SDP utils
- Explicitly disabled support for encrypted RTP extensions (was causing SDP inconsistencies)
- Added count of incoming retransmissions to Admin API and Event Handlers stats
- Improved check for H.264 keyframe (thanks bwerther!)
- Modified "cap REMB" behavior to "replace REMB"
- Fixed missing notification of lurkers when first joining VideoRoom with notify_join=TRUE
- Improved support for incoming re-INVITEs in SIP plugin
- Fixed check in WebSocket transport that could lead to crashes
- Fixed occasional segfaults when postprocessing H.264 recordings
- Added new callback to janus.js to intercept the SDP before it is sent, e.g., for munging purposes (thx @carlcc!)
- Fixed direction property error in janus.js on Safari (thx @alienpavlov!)
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Removed folder with self-signed certificate (unneeded and confusing)
- Added many fixes and improvements to the RTCP code
- Fixed typos that caused issues when sending retransmissions using RFC4588
- Fixed typo when sending empty RR coupled with REMB
- Made sure the CNAME is always the same for all m-lines in an SDP
- Added support for mid RTP extension
- Improved support for rid-based simulcasting
- Fixed publish errors in MQTT transport and event handler
- Fixed issue when switching Streaming mountpoints powered by helper threads
- Added info on whether VideoRoom publisher is simulcasting to join events
- Added option for new VideoRoom subscribers to specify simulcast substream/layer to subscribe to in join request (before it was configure-only)
- Added type definitions for janus.js (thanks Elias!)
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added RTP/RTCP fuzzing targets and tools
- Fixed occasional crash when pushing the local SDP to event handlers, when enabled
- Fixed NACK issue when receiving an out of order keyframe
- Added option to configure the TWCC feedback period
- Added option to include opaqueID in Janus API events
- Added option to negotiate Opus inband FEC in the VideoRoom
- Added option to specify temporary extension when recording AudioBridge rooms, and event handler notification for when recording is over
- Fixed occasional playout issue after recording, using Record&Play demo
- Fixed typo in janus.js that affected replacing audio tracks in renegotiations
- Changed default maxev (number of events in long poll results) to 10 in janus.js
- Updated path of getDisplayMedia in janus.js to reflect current spec (thanks cb22!)
- Fixed ambiguous check in Janus.isWebrtcSupported in janus.js
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added several fixes to RTP/RTCP parsing after fuzzing tests
- Added fixes to keyframe detection after fuzzing tests
- Fixed some demos not working after update to Chrome 72
- Fixed occasional crashes when saving .jfcg files (e.g., saving permanent Streaming mountpoints)
- Added new Admin API command to temporarily stop/resume accepting sessions (e.g., for draining servers)
- Fixed recordings sometimes not closed/destroyed/renamed when hanging up SIP sessions
- Added option to SIP/SIPre/NoSIP plugin to override c= IP in SDP
- Fixed missing RTSP support in Streaming plugin if TURN REST API was disabled in configure
- Fixed Streaming plugin not returning complete information on secret-less mountpoints (thanks @Musashi178!)
- Fixed missing .jfcg support in Duktape plugin (thanks @fbertone!)
- Updated janus.js to use transceivers for Chrome >=72
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Changed default configuration format to libconfig (INI still supported but deprecated)
- Fixed several RTCP parsing issues that could lead to crashes (thanks to Fippo for bringing fuzzying to our attention!)
- Added support to clang compiler (needed for fuzzying)
- Fixed rtx packets ending up in retransmission buffer (thanks glenn-hpcnt!)
- Fixed occasional crash when cleaning NACK buffer (thanks tmatth!)
- Fixed loop termination warning when handling event handlers (thanks tmatth!)
- Fixed occasional invalid rtx payload type
- Fixed local SDP notification to event handlers
- Fixed typo in link quality calculation
- Fixed occasional crash in SIP plugin
- Added option to provide custom headers in SIP 200 OK as well (thanks ihusejnovic!)
- Fixed typo in Range header when sending RTSP PLAY in Streaming plugin (thanks Phil1972!)
- Made MQTT and RabbitMQ configuration files more consistent with other ones (thanks manifest!)
- Added support for Last Will and Testament to MQTT event handler (thanks 0nkery!)
- Fixed broken video when post-processing recordings with high-profile H.264
- Fixed missing success callback in sendDtmf JS method (thanks nevcos!)
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Refactored core to have a persistent GMainLoop/thread per handle
- Added option to share static number of GMainLoop/thread instances for multiple handles
- Better management of incoming RTCP packets before passing them to plugins
- Updated TURN REST API to support both "key" and "api" as parameters
- Added support for dumping directly to .pcap, rather than text first via text2pcap
- Fixed occasional missing notifications of temporal layer changes, when doing simulcast
- Fixed occasional crash in TextRoom plugin
- Fixed crashes in Duktape plugin after some iterations
- Added .mjr metadata to media files when postprocessing the recordings, if supported by the container
- Fixed datachannels not working in Streaming demo, when configured
- Fixed dangling "Publish" button in VideoRoom demo
- Better management of timeout notifications when using websockets in janus.js (thanks @nevcos!)
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Switched to GMutex for locks by default (changeable in configure)
- Fixed missing sdpMid in some trickle candidates, which could break full-trickle support
- Fixed missing TWCC info when handling rtx duplicates (thanks garry81!)
- Fixed H.264 keyframe detection and broken H.264 simulcast code
- Fixed bug in skew compensation code
- Fixed occasional crashes when closing PeerConnections in AudioBridge
- Fixed broken Record-Route usage in SIP plugin (thanks Dan!)
- Removed outdated autoack property from SIP plugin
- Switched from SET_PARAMETER to OPTIONS as an RTSP keep-alive (thanks cnzjy!)
- Fixed missing endianness for RTP packets in postprocessor, which caused problems on MacOS
- Fixed crash in postprocessor when handling high(er) H.264 profiles (e.g., Safari 12)
- Fixed multiple "First keyframe" log lines when postprocessing video
- Added support for parsing a few RTP extensions in the postprocessor
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Added several important fixes to NACK and retransmission code
- Fixed connectivity establishment when only available candidates are prflx
- Fixed some leaks in TWCC code
- Fixed missing information when reporting TWCC reports (thanks Kangsik!)
- Made the timeout for trickle candidates configurable
- Added support for mDNS candidates (see draft-ietf-rtcweb-mdns-ice-candidates)
- Added option to configure the DTLS retransmission timer (BoringSSL only)
- Optimized DTLS writes by removing a copy on each send (thanks Joachim!)
- Added option to override codecs to negotiate in EchoTest
- Added H.264 simulcasting support to plugins that did VP8 simulcast already
- Added VP9/SVC support to the Streaming plugin
- Improved the way simulcast streams can be recorded and forwarded
- Added partial RTCP support to RTP forwarders (thanks Adam!)
- Fixed occasional segfaults in the VideoRoom when forcing private IDs (thanks tugtugtug!)
- Added option to use helper threads for Streaming plugin mountpoints
- Fixed a couple of errors in the RTSP support of the Streaming plugin (thanks nu774!)
- Several fixes in the NoSIP plugin (thanks Dmitry!)
- Fixed broken SIP MESSAGE support in SIP plugin
- Fixed occasional segfaults in SIP and SIPre plugins (thanks mharcar!)
- Fixed broken recording support in the VideoCall plugin (thanks codebot!)
- Fixed potential deadlock in Lua and Duktape plugins (thanks Gabriel!)
- Fixed memory leaks in VideoRoom, AudioBridge and TextRoom
- Added new MQTT event handler (thanks Olle!)
- Made HTTP REST API optionally more consistent with other transports
- Added new flag to postprocessor for just printing the JSON header
- Fixed occasional segfaults when processing recordings
- Added getDisplayMedia() support to janus.js
- Added better support to constraints when screensharing (thanks Sol!)
- Added better iOS devices support to janus.js and the demos
- Other smaller fixes and improvements (thanks to all who contributed pull requests and reported issues!)
- Fixed occasional crash when closing PeerConnections
- Fixed way of negotiating datachannels in Firefox Nightly
- Fixed broken check when enabling TURN REST API
- Fixed occasional crash when post-processing H.264 recordings (thanks Thomas!)
- Fixed occasional issue when creating PID file
- Fixed broken SDES generation (thanks Garry!)
- Added new Duktape plugin to write plugin logic in JavaScript
- Fixed occasional crash in VideoCall plugin when declining calls
- Added basic RTCP support to the Streaming plugin (thanks Adam!)
- Added basic RTCP support to RTP forwarders in the VideoRoom plugin
- Added new Nanomsg transport
- Changed the way libwebsockets logging is configured
- Updated janus.js to use promises for WebRTC APIs (thanks Philipp!)
- Some more bug fixes and improvements
- Fixed ICE loop not terminating at times, and spiking the CPU
- Fixed compilation against older OpenSSL versions (thanks Joachim!)
- Added option to statically enable locking debug via command line or configuration file
- Fixed occasional crash in VideoRoom when destroying rooms
- Fixed VideoRoom not closing subscribers PeerConnections when publisher goes away, if so configured
- Fixed SRTP errors when resuming VideoRoom subscribers that were paused for a long time
- Added new option to really force a cap on the bitrate in VideoRoom rooms
- Fixed recording not being started for VideoRoom publishers media added in a renegotiation
- Fixed occasional crash in AudioBridge when closing PeerConnections under load
- Added Opus FEC support to AudioBridge (thanks Eric!)
- Fixed pipe socket initialization in Streaming plugin (thanks Adam!)
- Added systemd support to Unix Sockets transport plugin (thanks Adam!)
- WebSocket connection is no longer torn down in case of a Janus session timeout
- Added options to configure keep-alive and long-poll timers in janus.js
- Some more bug fixes and improvements
- Single thread per PeerConnection, instead of two
- Fixed issue with API secret, where sessions would be created anyway
- Cleanup of ICE related code (thx Joachim!)
- Removed ad-hoc thread for SCTP code
- Fixed deadlock in VideoRoom plugin
- Fixed segfault in SIPre plugin
- Fixed leaks when using event handlers (thx zgjzzhw!)
- Fixed some missing events when closing PeerConnections
- Fixed broken dependencies mechanism in janus.js (thx Philippe!)
- Some more bug fixes and improvements
- Changed memory management to use reference counters
- New plugin to write application logic in Lua
- Added mechanism to reclaim sessions after a reconnection (thx Geige!)
- Fixed broken renegotiations when upgrading from audio-only to audio-video
- Fixed typo in evaluation of RTT from RTCP packets
- Fixed crash when SRTP profile is missing in DTLS handshake
- Improved and streamlined a few events (event handlers), e.g., selected-pair
- Added new "external" events (event handlers), for events pushed via Admin API
- Fixed deadlock when joining a VideoRoom with notify_join=true
- Fixed some info not saved permanently in some plugins when editing
- Added media latching to RTSP streams setup in the Streaming plugin
- Fixed an issue with simulcast support in the Streaming plugin
- Fixed occasional unexpected WebSockets disconnects when using the Streaming plugin
- Fixed Streaming plugin not returning bound ports when creating mountpoints with random ones (port=0)
- Improved and streamlined documentation for all plugins
- Added option to limit ciphers/protocols in HTTP and WebSockets (thx Alexander!)
- Added transceivers support to janus.js for proper renegotiations in Firefox
- More bug fixing and general cleanup (thx to mtdxc, fancycode and others!)
- Added a way to support other screensharing extensions in janus.js in a programmatic way (thx Sol!)
- Changed threading model for processing requests in the core
- Added support for SRTP AES-GCM to core and SIP/SIPre/NoSIP plugins
- Changed set of ciphers negotiated in DTLS, disabling weaker ones (thanks Chad!)
- Added option to specify passphrase when dealing with certificates/keys
- Added ability for Admin API requests to tweak Event Handlers
- Integrated link quality stats info (thanks Piter!)
- Added support for storage-less authentication via Signed Tokens (thanks Sol!)
- Added option to force TCP for SIP messages in the SIP plugin
- Added option to not fail RTSP mountpoint creation right away if backend is not up
- Added SSL/TLS support to the MQTT transport (thanks Andrei!)
- Added new request to edit some Streaming mountpoint properties (thanks Rob!)
- Fixed management of DTMF in janus.js
- Updated management of constraints in janus.js (thanks Igor!)
- Bug fixing and general improvements
- Implemented renegotiations and ICE restarts
- Bundle and rtcp-mux now are always forced
- Added support to Transport Wide CC sender-side BWE (thanks Sergio!)
- Added SRTP support to Streaming mountpoints
- Implemented a skew compensation algorithm in the Streaming plugin
- Added SRTP support to RTP forwarders
- Implemented support for RFC4588 (rtx/90000 retransmissions)
- Janus can now do full-trickle too
- SIP plugin now supports 407 (proxy authentication)
- Fixed post-processing of G.711 recordings
- Added versioning info to janus-pp-rec
- Several fixes and cleanup
- New SIP plugin based on libre, SIPre (janus.plugin.sipre), and related demo
- New NoSIP plugin, that can be used with legacy applications (like SIP) without doing any signalling itself
- VideoRoom can now support multiple codecs at the same time, instead of being forced to choose just one per media type
- Plugins now record streams specifying the actual codec in use, instead of making assumptions (e.g., like Record&Play did with Opus and VP8)
- Streaming plugin now allows you to temporarily pause audio and/or video delivery via "configure" requests
- Removed RTCP BYE as a trigger to shutdown a PeerConnection (fixes Firefox 52 issues)
- Added RTCP support for simulcast SSRCs
- Fixed parsing of Firefox simulcast offer when order of attributes was different than expected
- Improved RTP headers rewriting in case of SSRC changes (e.g., context switches)
- Improved performance of the ICE send threads/loops and computation of transfer rates, by getting rid of all list traversals
- Added support for MSG_EOR in SCTP datachannels
- Added "exchange" support to RabbitMQ transport
- Added new info to Event Handlers (server info in "started" event, and server name in "emitter")
- Added RabbitMQ Event Handler
- You can now add additional constraints for a PeerConnection when invoking createOffer and createAnswer in janus.js
- Fixed occasional problems when postprocessing .mjr recordings, especially long ones, and Opus recordings
- Several bug and typo fixes, in both core and janus.js
- VP8 simulcasting supported in a few plugins (you may have experimented with it on the online demos already);
- VP9 SVC is also available (VideoRoom only);
- VideoRoom and Streaming plugins allow you to subscribe to a subset of the feed's media (e.g., only get audio even though feed is audio/video);
- automatic fallback in the VideoRoom to subset of the media in case of unsupported codecs (e.g., Safari joining VP8 room falls back to audio only);
- added option to override rtpmap and fmtp SDP attributes for RTSP mountpoints in the Streaming plugin;
- added support for other codecs besides opus and VP8 in Record&Play plugin;
- added option to have a static RTP forwarder for an AudioBridge room in the configuration file;
- added possibility to specify an RTP range to use in the SIP plugin;
- implemented text2pcap support to dump incoming and outgoing unencrypted RTP/RTCP traffic for debugging purposes;
- added support to G.722 in postprocessor;
- made sure that each m-line now has its own a=end-of-candidates attribute;
- fixed crash in websockets transport plugin when SSL was enabled on both APIs;
- added support to ping/pong mechanism in websockets transport plugin;
- switched from addstream to addtrack in janus.js;
- decoupled the dependencies in janus.js to allow for dynamic override of some features;
- added support to build JavaScript modules out of janus.js.
- binding to some or all interfaces/families has been fixed in the HTTP transport;
- the Access-Control-Allow-Origin return value is now configurable in the HTTP transport;
- fixed occasional slow WebSocket request management when DNS was involved;
- there's a new timer before we return an ICE failed (as due to trickling there may be a success shortly after a temporary failure);
- the frequency of media stats notifications (event 32) in event handlers has been made configurable (default is still 1s);
- event handlers now notify about each local and remote candidate as well;
- the admin.html demo page now prompts you with the password (although you can still hardcode it in the page, as before);
- several changes in the SIP plugin: support for offerless INVITEs, early media (183+SDP), outbound proxies, and fixes to some POLLERR messages;
- added support for LibreSSL as an alternative to OpenSSL and BoringSSL;
- added a=end-of-candidates to all m-lines, since we half-trickle (fixes Edge support);
- fixed a race condition in the TextRoom plugin;
- fixed the way janus.js used getStats, in particular for Firefox;
- fixed device selection demo;
- several smaller fixes derived from a static analysis of the code via Coverity.
- A few janus.js fixes (among which a small fix to get it working with Safari, and the possibility to add mic audio when screensharing);
- Several RTCP related enhancements in the Streaming plugin;
- Support for on-hold in SIP plugin;
- Fixed MQTT transport when credentials are needed;
- Improved "kick" in VideoRoom (needs forcing of private_id when creating room);
- Possibility to create Streaming mountpoints with random ports, instead of specifying them via API;
- Optional "talking" events in AudioBridge and VideoRoom;
- Possibility to force BUNDLE/rtcp-mux per handle via API (no need to wait for complete negotiation);
- Several bug fixes, a couple of them to nasty race conditions that finally got solved.
- ACL/Kick support in VideoRoom/AudioBridge/TextRoom
- Man pages for Janus and post-processor
- Opaque identifiers for Event handlers + Transport related events
- Ability to specify SSRC + payload type when using RTP forwarders
- Ability to relay datachannels in Streaming plugin
- Ability to send some TextRoom commands (e.g., create/list/etc.) via Janus API instead of only datachannels
- Configurable session timeouts
- Configurable "no-media" timeouts
- Optional temporary extension for recordings until they're done
- cleanup and bug fixing
- Missing info
- Missing info
- Missing info
- Missing info
- Missing info
- First release