# Changelog This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [1.3.2] - 2022-12-15 ### Added - help-verbose subcommand to print out all flags #1171 #1180 - Support for Redis cluster #1181 - Allow loopback candidates to be used via config option #1185 - Support for high bitrate audio #1188 - Ability to detect publication errors and force reconnect #1214 - API secrets are validated upon startup to ensure sufficient security #1217 ### Fixed - Correctly suppress verbose pion logs #1163 - Fixed memory leak on long running room/participants #1169 - Force full reconnect when there is no previous answer #1168 - Fixed potential SSRC collision between participants #1173 - Prevent RTX buffer and forwarding path colliding #1174 - Do not set forceRelay when unset #1184 - Prevent subscription after participant close #1182 - Fixed lost RTCP packets when incorrect buffer factory was used #1195 - Fixed handling of high bitrate while adding Opus RED #1196 - Fixes a rare timing issue leading to connection failure #1208 - Fixed incorrect handling of | in participant identity #1220 #1223 - Fixed regression causing Firefox to not connect over TURN #1226 ### Changed - CreateRoom API to allocate the room on RTC node #1155 #1157 - Check forwarder started when seeding #1191 - Do not forward media until peer connection is connected #1194 - Log sampler to reduce log spam #1222 ## [1.3.1] - 2022-11-09 ### Fixed - Fixed logging config causes server to fail to start #1154 ## [1.3.0] - 2022-11-08 ### Added - Ingress Service support #1125 - Support for web egress #1126 - Ability to set all configuration params via command line flags #1112 - Server-side RED encoding for supported clients #1137 - Opus RED active loss recovery #1139 - Experimental: fallback to TCP when UDP is unstable #1119 - Populate memory load in node stats #1121 ### Fixed - Fixed dynacast pausing a layer due to clients (FF) not publishing layer 0 #1117 - Room.activeRecording updated correctly after users rejoin #1132 - Don't collect external candidate IP when it's filtered out #1135 - Install script to use uname without assuming /usr/bin #1138 ### Changed - Allocate packetMeta up front to reduce number of allocations #1108 - Do not log duplicate packet error. #1116 - Consolidate getMemoryStats #1122 - Seed snapshots to avoid saving/restoring in downtrack #1128 - Remove Dependency Descriptor extension when AV1 is not preferred #1129 - Always send participant updates prior to negotiation #1147 - Set track level codec settings for all pending tracks #1148 - Use Redis universal client to support clustered redis #1149 ## [1.2.5] - 2022-10-19 ### Added - Ability to filter IP addresses from being used #1052 - Allow TCP fallback on multiple connection failures #1077 - Added support for track level stereo and RED setting #1086 ### Fixed - Fixed stream allocator with SVC codecs #1053 - Fixed UDPMux connectivity issues when machine has multiple interfaces #1081 - Ensure sender reports are in sync after transceiver is re-used #1080 - Fixed simulcast codec blocking track closure #1082 - Prevents multiple transport fallback in the same session #1090 ### Changed - Config validation has been enabled. Server will not start if there are invalid config values #1051 - Improves NACK stats to count as a miss only if i t's not EOF #1061 - Store track MIME type during publishing #1065 - Minor cleanup of media track & friends module #1067 - Split out shared media transport code into livekit/mediatransportutil #1071 - Cleaned up logging, improved consistency of debug vs info #1073 - Reduced memory usage with sequencer #1100 - Improved IP address mapping, handling of multiple IPs #1094 - Service API requests are logged #1091 - Default HTTP handler responds with 404 for unknown paths #1088 ## [1.2.3] - 2022-09-13 ### Added - Supervisor framework to improve edge case & error handling #1005 #1006 #1010 #1017 - Support for stereo Opus tracks #1013 - Allow CORS responses to be cached to allow faster initial connection #1027 ### Fixed - Fixed SSRC mix-up for simulcasted tracks during session resume #1014 - Fixed screen corruption for non-simulcasted tracks, caused by probing packets #1020 - Fixed Handling of Simple NALU keyframes for H.264 #1016 - Fixed TCPMux & UDPMux mixup when multiple host candidates are offered #1036 ### Changed - Webhook requests are now using Content-Type application/webhook+json to avoid eager JSON parsing #1025 - Don't automatically add STUN servers when explicit Node IP has been set #1023 - Automatic TCP and TURN/TLS fallback is now enabled by default #1033 ### Removed - Fully removed references to VP9. LiveKit is focused on AV1. #1004 ## [1.2.1] - 2022-09-13 ### Added - Accepts existing participant ID on reconnection attempts #988 ### Fixed - Fixed ICE restart during candidate gathering #963 - Ensure TrackInfoAvailable is fired after information is known to be ready #967 - Fixed layer handling when publisher pauses layer 0 (FireFox is has a tendency to pause lowest layer) #984 - Fixed inaccurate participant count due to storing stale data #992 ### Changed - Protect against looking up dimensions for invalid spatial layer #977 - Improvements around migration handling #979 #981 #982 #995 - Consistent mapping between VideoQuality, rid, and video layers #986 - Only enable TCP/TURN fallback for supported clients #997 ## [1.2.0] - 2022-08-25 ### Added - Support for NACK with audio tracks (#829) - Allow binding HTTP server to specific address, binds to localhost in dev mode(#831) - Packet stats from TC (#832) - Automatic connectivity fallback to TCP & TURN (#872 #873 #874 #901 #950) - Support for client-side ping/pong messages (#871) - Support for setCodecPreferences for clients that don't implement it (#916) - Opus/RED support: redundant audio transmission is enabled by default (#938 #940) ### Fixed - Fixed timing issue in DownTrack.Bind/Close (#833) - Fixed TCPMux potentially blocking operations (#840) - Fixed ICE restart while still in ICE gathering (#895) - Fixed Websocket connection hanging if node isn't available to accept connection (#923) - Fixed ICE restart/resume in single node mode (#930) - Fixed client disconnected in certain conditions after ICE restart (#932) ### Changed - Move to synchronously handle subscriber dynacast status (#834) - Retransmit DD extension in case packets were missed (#837) - Clean up stats workers (#836) - Use TimedVersion for subscription permission updates (#839) - Cleaned up logging (#843 #865 #910 #921) - track_published event now includes the participant's ID and identity (#846) - Improve synchronization of track publishing/unpublish path (#857) - Don't re-use transceiver when pending negotiation (#862) - Dynacast and media loss proxy refactor (#894 #902) - PCTransport refactor (#907 #944) - Improve accuracy of connection quality score (#912 #913) - Docker image now builds with Go v1.19 ## [1.1.2] - 2022-07-11 ### Added - Returns reason when server disconnects a client (#801 #806) - Allow livekit-server to start without keys configuration (#788) - Added recovery from negotiation failures (#807) ### Fixed - Fixed synchronization issues with Dynacast (#779 #802) - Fixed panic due to timing in Pion's ICE agent (#780) - ICELite is disabled by default, improving connectivity behind NAT (#784) - Fixed EgressService UpdateLayout (#782) - Fixed synchronization bugs with selective subscriptions & permissions (#796 #797 #805 #813 #814 #816) - Correctly recover from ICE Restart during an negotiation attempt (#798) ### Changed - Improved Transceiver re-use to avoid renegotiation (#785) - Close room if recorder is the only participant left (#787) - Improved connection quality score stability & computation (#793 #795) - Set layer state to stopped when paused (#818) ### Removed - Removed deprecated RecordingService - Egress should be used instead (#811) ## [1.1.0] - 2022-06-21 ### Added - Add support for Redis Sentinel (#707) - Track participant join total + rate in node stats (#741) - Protocol 8 - fast connection support (#747) - Simulate switch candidate for network connectivity with poor UDP performance (#754) - Allow server to disable codec for certain devices (#755) - Support for on-demand multi-codec publishing (#762) ### Fixed - Fixed unclean DownTrack close when removed before bound. (#736) - Do not munge VP8 header in place - fixes video corruption (#763) ### Changed - Reintroduce audio-level quantization to dampen small changes (#732) - Allow overshooting maximum when there are no bandwidth constraints. (#739) - Improvements to upcoming multi-codec simulcast (#740) - Send layer dimensions when max subscribed layers change (#746) - Use stable TrackID after unpublishing & republishing (#751) - Update egress RPC handler (#759) - Improved connection quality metrics (#766 #767 #770 #771 #773 #774 #775) ## [1.0.2] - 2022-05-27 ### Changed - Fixed edge cases where streams were not allocated (#701) - Fixed panic caused by concurrent modifications to stats worker map (#702 #704) - Batched subscriber updates to reduce noise in large rooms (#703 #729) - Fixed potential data race conditions (#706 #709 #711 #713 #715 #716 #717 #724 #727 - /debug/pprof endpoint when running in development mode (#708) - When audio tracks are muted, send blank frames to induce silence (#710) - Fixed stream allocator not upgrading streams after downgrading (#719) - Fixed repeated AddSubscriber potentially ignored (#723) - Fixed ListEgress API sometimes returning not found (#722) ## [1.0.1] - 2022-05-19 ### Changed - Update Egress details when changed, fixed Egress APIs (#694) ## [1.0.0] - 2022-05-17 ### Added - Improved stats around NACKs (#664) - Internal structures in preparation for AV1 SVC support (#669) ### Changed - Supports participant identity in permissions API (#633) - Fixed concurrent access of stats worker map (#666 #670) - Do not count padding packets in stream tracker (#667) - Fixed TWCC panic under heavy packet loss (#668) - Change state to JOINED before sending JoinResponse (#674) - Improved frequency of stats update (#673) - Send active speaker update during initial subscription (#676) - Updated DTLS library to incorporate security fixes (#678) - Improved list-nodes command (#681) - Improved screen-share handling in StreamTracker (#683) - Inject slience opus packets when muted (#682)