Files
comrelay/CHANGELOG.md
T
ttipo 6bd7fac875 Squashed 'livekit-server/' changes from 154b4d26..46c43095
46c43095 fix goreleaser workflow, version 1.13.1 (#4577)
e0815be2 chore: improve docker test shutdown reliability (#4576)
bfd9deff expose TCPFallbackRTTThreshold and AllowUDPUnstableFallback via config (#4556)
b93c1e16 Release v1.13.0. (#4573)
fd452212 Update mediatransportutil to get ICE candidate timeout config (#4572)
8be8c74a Update github workflows (#4463)
c4e41872 Update go deps to v1.17.2 (#4462)
dc8e0310 Update go deps to v4 (#4482)
20fd1ad2 turn: allow for providing secret via file (#4564)
6590570d Pin pion/dtls to v3.1.2 (#4570)
cdbbee1f deps: bump protocol + psrpc to latest tips (#4565)
d290de81 Correct config comment (#4563)
77ecf920 rtc: report participant session end time on room move (#4561)
63be96f6 Prevent panic from nil(illegal) syncState.Subscriptions message (#4560)
835ef1b3 Metrics for participant active, i. e. fully established. (#4557)
5bd42534 Document of advertise_internal_ip and external_ip_only (#4554)
356ae211 Config documentation for advertise_internal_ip and skip_external_ip_validation (#4552)
7c319a67 rtc: prevent duration reporting for inactive participants (#4550)
2dd5e632 telemetry: split webhook-processed hook out of NewTelemetryService (#4548)
222177a9 service: prevent nil deref in validate with wrapped join request (#4547)
dd7580b4 Protect against nil clientInfo (#4546)
145689e6 Start tracking Twirp method request latency in prometheus too, not just in logs (#4545)
cde89627 rtc: emit per-data-track bytes via BytesTrackStats (#4540)
2e22911d Remove backwards compatibility support for TURN auth. (#4539)
062d1219 Use NACKQuueInterface type. (#4538)
7f08b04c Add IsIntentionalDisconnect helper (#4537)
1ab2bf04 Clean up packet size logging (#4536)
8ab92a80 Don't require media sections when joining (#4535)
019a6640 rtc: report participant kind code and details (#4534)
77595d38 TEL-336: fix sip error categorization (#4528)
f303f499 Always enable rtx codec (#4533)
e4a8a55c Check Less and LessEq in version compare. (#4532)
37eb7a32 Release v1.12.0 (#4529)
4a7b1e85 Create NACK tracker only once. (#4527)
89faaeba Apply ttl check only when authenticate allocation creating (#4526)
b32933b0 Log details of RTCP packets. (#4525)
8b79ec9e Support SIP auth realm for inbound. (#4522)
4b8db3cf Add integration test for TURN auth failures (#4524)
ef2e5efe Log large packets receive/send. (#4521)
d1236750 feat: auto create rooms for tokens with the RoomCreate grant (#4320)
7a3e595b apply room tags from JWT grant room configuration (#4518)
ab7fdeab add AssignmentHook to AssignJob; propagate websocket write errors (#4516)
cf20c9cd Add expiry to TURN password. (#4515)
20d4a3a1 Populate data track loggers with context (#4514)
12fff29a allow setting agent job assignment url (#4512)
ba366fc7 Fix SIP media config upgrade. (#4511)
8fbc5adf update protocol for protojson (#4510)
3de6f517 Add TURN permission handler. (#4505)
8ffcef93 Update protocol to support SIP media config. (#4509)
1ab1e072 test: verify upstream and downstream connection stats end-to-end (#4508)
c4fd71a5 Fix sense check in DeltaInfo gathering (#4507)
803999ef rename agent environment to deployment (#4506)
bacc21e6 add helper to check for agent worker endpoint (#4503)
253f977d add duration seconds reporting (#4500)
ffab3bd3 add agent environment (#4498)
ccdf23c8 Use mediatransportutil/codec package, no functional change (#4497)
680703f2 Include reception reoprts in receiver report callback. (#4496)
f51798bc Fix publish-only limitations being incorrectly applied to receivers (#4495)
a002337d Legacy TrackInfo.Simulcast flag. (#4493)
af1dcc88 Add CloseWithReason to agent SignalConn interface (#4492)
d7c2daf1 report all simulcast layers (#4491)
c1ad2b22 Misc optimisations. (#4490)
19b9e8c0 Additional data tracks logging (#4489)
743d9c8b add support for client capabilities (#4461)
fc47e478 Close peer connection unconditionally to unblock set local/remote (#4485)
639406eb Update module github.com/pion/ice/v4 to v4.2.3 (#4481)
dc6b7505 reduce some heap use in packet path (#4478)
f3b80b28 fix: wrap IPv6 addresses in brackets in UDP TURN URLs (RFC 3986) (#4476)
3a7f2628 Turn off transceiver re-use on Safari. (#4474)
d84f3d7a add more types to signum (#4473)
701a37c2 Convert sort.Slice -> slices.SortFunc (#4472)
85be9d70 Avoid stream allocator event data cast to interface and back. (#4471)
b43685e8 Keep a shadow copy of tracks for use by different stream allocator state (#4470)
27c2b149 Consolidate RTCP packets and do RTCP callback outside lock. (#4469)
31083307 do not log data track stats if not started (#4468)
9ee06635 feat(pion/ice): replace deprecated NAT1To1 with SetAddressRewriteRules (#4466)
8ccad68d Release v1.11.0 (#4459)
dbf5cf61 Store concrete ICE candidate for remote candidates. (#4458)
2a04bc3c fix publisher frame count reporting for simulcast streams (#4457)
1d804737 fix: limit join request and WHIP request body to http.DefaultMaxHeaderBytes (#4450)
3cfb71e7 Use Muted in TrackInfo to propagated published track muted. (#4453)
69aa9479 Some drive-by clean up (#4452)
6c81f678 Add subscriber stream start event notification (#4449)
ce1bf47b Revert "fix: ensure num_participants is accurate in webhook events (#4265) (#…" (#4448)
cdb0769c fix: ensure num_participants is accurate in webhook events (#4265) (#4422)
c91e79af Switch to stdlib maps, slices (#4445)
ea7b9c6f Update module github.com/livekit/protocol to v1.45.3 (#4435)
97378368 Update go deps (major) (#3179)
d6aef547 Update go deps (#3862)
afc9feae Update github workflows (#4331)
4b385612 chore: pin GH commits and switch to golangci-lint (#4444)
2974ba87 Unsubscribe from data track on close (#4443)
5dc4e90d Apply IPFilter when get local ip (#4440)
88c77dc6 compute agent dispatch affinity from target load (#4442)
8fe99377 Log join duration. (#4433)
0a503a57 Add `Close` method for UpDataTrackManager and call it on participant (#4432)
55912dff Add some simple data track stats (#4431)
050909e6 Enable data tracks by default. (#4429)
72c7e65c chore: log API key during worker registration (#4428)
8a67dd1b Do not close publisher peer connection to aid migration. (#4427)
91e90c10 Add some more logging around migration. (#4426)
c6ddc879 isExpectedToResume is based on whether flushing or not. (#4425)
7d06cfca Keep subscription synchronous when publisher is expected to resume. (#4424)
934f8598 Clean up data track observers on unsubscribe. (#4421)
9674ac48 Cleaning up some logs and standardising log frequency. (#4420)
7b925304 Drop time inverted packets in RED -> Opus conversion. (#4418)
4d8d232a ensure participant init is correctly serialized for logging (#4417)
4fe80877 Log time inversion between incoming packets (#4415)
248d7394 Guard against timestamp inversion in RED -> Opus conversion. (#4414)
9ab8c1d5 clear track notifier observers on subscription teardown (#4413)
397cd09a Embedded turn test (#4412)
56326654 Prepare release v1.10.1 (#4408)
e9b113c8 Make the TURN bind address configurable and allow for multiple addresses. (#4315)
4bc5e6bb Address malformed H264/H265 parsing issues. (#4407)
77a0a4fc AV1 parser overflow fix. (#4405)
ff7fd7ed feat(agent-dispatch): add job restart policy (#4401)
34bd1e08 do not log roll over for padding only packets (#4396)
13d02ee9 add deadline to dtls connect context (#4395)
9055a349 Path check helpers (#4392)
1f1eeb68 Fallback to servicestore if rpc is unavailable (#4391)
59e9bb41 Fix TURN server URL (#4389)
9e0a7e54 Close both peer connections to aid migration. (#4382)
9474c807 route participant reads through PSRPC instead of Redis (#4387)
a5333a86 add packet trailer stripping support (#4361)
0e3d765d Release v1.10.0 (#4380)
bc3aeaf3 Update grpc to address CVE-2026-33186 (#4381)
8cdd6f4c Replace deprecated io/ioutil with io in whipservice (#4375)
89410df7 handle AGENT_ERROR disconnect reason (#4339)
8f984c77 Fix repair stream ID reporting for RTX pairing. (#4369)
cdfaacfc Restart nacker on OOB sequence number restart. (#4368)
4a9e0045 Update protocol. (#4367)
750d5904 Add API to restart lite stats. (#4366)
c8bb2578 Rename log field "pID" to "participantID" for consistency (#4365)
77fc74a7 Do not block all ext ID determination on stream allocator listener (#4364)
90a46fab Do not kick off migration of closed participant (#4363)
5dc2e7b1 Switch data track extension to 1-byte ID/length. (#4362)
7323ad02 Sample data send error logging. (#4358)
0d34e455 Add option to not re-use transceiver in e2ee. (#4356)
95225ff2 don't require media section for dual peerconnection mode (#4354)
e9639538 Refine ipv6 support (#4352)
b34b0472 Add StopEgress function to the EgressLauncher interface (#4353)
69235ed2 update readme (#4340)
db1a8046 defensive check for peer connection instance (#4350)
cb7dc2d0 TEL-405: support originating calls from custom domains (#4349)
7eaaaada Mark last run of grow bucket outside goroutine. (#4348)
caa47522 Add option to require media sections when participant joining (#4347)
087050d1 Release v1.9.12 (#4346)
493e87df Fix SIP client timeout. (#4345)
52c28a93 Log a bit more details of out-of-order TWCC feedback report. (#4343)
516aeabf Use ParticipantTelemetryListener of LocalParticipant. (#4342)
b3510565 Exclude ice restart case from offer answer id mismatch warning (#4341)
303657bc feat: make INSTALL_PATH overridable in install script (#3954)
9d418689 Send participant left event after track unpublished for moved (#4334)
bab91868 do not discount packets lost on duplicate packets (#4333)
939794cf mark + restart (#4329)
75f9c462 Add debug for receiver restart. (#4328)
74891f30 Protect against incorrect temporal layer. (#4327)
f51b2732 Update pion/webrtc and deps to update dtls (#4326)
b81bac0e Key telemetry stats worker using combination of roomID, participantID  (#4323)
2d40449f Update self-hosting deployment documentation link (#4312)
03e90dd7 Fix for some CodeQL reported issues (#4314)
77c858f0 Log stats worker when it not closable. (#4313)
a6035212 ESP32 client info (#4267)
478e486a Copilot suggested improvement to Github Actions permissions (#4310)
cbd2f82d Copilot suggested improvement to Github Actions permissions (#4311)
a9b8d40d Publish is always on publisher peer connection. (#4307)
8ae56406 generate & log egressID for start egress request (#4303)
35d7ef88 Avoid alloc in RTPStatsReceiver.Update (#4302)
bb744916 More optimisation in RTPStats module. (#4298)
cefd5da9 Optimise some bits in rtpstats_receiver (#4297)
52a4b848 Read client protocol from query param (#4294)
195b17f6 Populate client_protocol field in ParticipantInfo (#4293)
370e0a4d Set up audio config in audio level module when config is updated. (#4290)
f3e9b688 Do not increase max expected layer on track info update. (#4285)
a9849340 Avoid logger data race. (#4284)
97016627 Do not hold lock when creating buffer (#4283)
6b68e3d5 Create buffer if needed when a PLI is requested. (#4282)
3cca7180 use separate allocation for signal stats telemetry guard (#4281)
d2bae34d refresh telemetry guard on participant move (#4280)
333f0349 clear reference guard when resetting signal stats (#4279)
d1bab17b Add session duration and participant kind to closing log. (#4277)
1e689e1a Reducing some info level logs. (#4274)
88facc02 adds a test to ensure agent worker errors cause disconnection (#4273)
76a41a7a Generate config flags (#4268)
700e1788 require participant broadcast when metadata/attributes are set in token (#4266)
b61799ec Ignore parse addr error when add remote candidate (#4264)
01bd966f Add silent frame for pcmu/a (#4258)
0c33b8c6 chore: move codecs/mime stuff to protocol (#4255)
165c1735 Update livekit protocol to v1.44.0 (#4254)
343f12b8 Wrapping SIP errors for invalid argument and not found (#4253)
aea044c5 Defer setting clock rate in RTPStats module till codec is bound. (#4250)
d9f716c1 FIx receiver restart race (#4248)
0508ee9f remove copy/paste left over line (#4246)
40408407 Release v1.9.11 (#4245)
f8675507 Do not remove participant from cache on disconnect. (#4241)
a35a6ae7 Add participant option for data track auto-subscribe. (#4240)
07572511 Wrapping the invalid request errors for CreateSipParticipant (#4239)
843d8c3e Update Pion transport package. (#4237)
a05690d2 Changing field naming of data track packet (#4235)
c4015008 Clear participant version cache on disconnect (#4234)
18db4ec1 Log modified timeout of API context. (#4232)
ac20ccda Log timeout in API. (#4231)
541a7d6c Change some logs to debugw (#4229)
52ab3374 Return on SDP fragment read error. (#4228)
7fae5ac9 Do not restart receiver on codec change mid-session. (#4225)
dafdc36e Add option to force simuclast codec. (#4226)
0a7dd40b Use only layer 0 for SVC codecs. (#4224)
4ec0f8f4 Support OpenTelemetry tracing. Add Jaeger support. (#4222)
80ba93fa Do NACK updates as soon as flow state is processed. (#4221)
4405afe2 Use atomic pointer and return interface from RED transformer constructors (#4220)
b649c2fe Remove method not needed from REDTransformer. (#4219)
f0080f35 Remove enable arrival time forwarding method. (#4217)
335f4c33 Swap result sink atomically rather than closing and setting. (#4216)
46651c19 Release v1.9.10 (#4214)
08ac4ecd Support preserving external supplied time. (#4212)
f6efccce report video size from media data for whip (#4211)
d92f6a79 return iceservers for whip (#4210)
1a4758ed Skip restart callback if external. (#4208)
dde4fb49 configurable dependency descriptor restart (#4207)
08793bea Use active at time to check for track not bound timeout. (#4206)
3606ce54 Do not warn about track not bound if participant is not ready. (#4205)
b8ddd0f9 Taking interface{} -> any modernize bits (#4204)
b91cd2e4 Rework receiver restart. (#4202)
bb00c864 Restart API on receiver. (#4200)
25ece1e9 Minor refactor in buffer base and audio level (#4198)
599002f8 ignore PLI requests for non-video (#4196)
2510b946 Taking a bunch of go modernize suggestions. (#4194)
ed8e6afc Handle repair SSRC of simulcast tracks during migration. (#4193)
c6bf7a27 Fix logging key and other clean up around stream restart. (#4192)
3cb9abb6 Update pion/webrtc to v4.2.1 (#4191)
8b0efb8c Resolve RTX pair via OnTrack also. (#4190)
381bce03 Return extended sequence number only and not packet. (#4189)
6bcbf54e Always instantiate nacker when using out-of-band sequence numbers. (#4187)
e71184de Store buffer after creating it.  (#4186)
7c8ea115 Refactor receiver and buffer into Base and higher layer.  (#4185)
4104b827 update protocol (#4183)
cd99fec2 Make new path for signalling v1.5 support. (#4180)
32cd0370 Flush the ext packets on restart/close and release packets. (#4179)
1df1316b Move OnDataTrackMessage to participant listener to support replay. (#4178)
e7601251 Make data message naming a bit more consistent. (#4177)
a04e566d Use published track for model access in data down track. (#4176)
47c86be1 Add support for TURN static auth secret credentials (#3796)
24559a28 chore(deps): update github workflows to v6 (#3866)
0a824386 add explicit room exists servicestore op (#4175)
39bd077d Release v1.9.9 (#4174)
cbb2c617 Publish/Unpublish counter match. (#4173)
fb849edc Minor clean up (#4172)
c28e5e45 fix(kindToProto): update protocol (#4171)
47324abd Drop run away receiver reports. (#4170)
462ec324 prevent uint overflow setting packet not found count (#4169)
5c841b8e Some logging changes. (#4168)
2f2d0a57 skip lost sequence number ranges in getIntervalStats (#4166)
898ebe05 clean up manual roomservice log redaction (#4165)
3e417253 move delete to oss service store (#4164)
5964efbb Ensure subscribe data track handles are unique (#4162)
a26c4830 Add support for RTP stream restart. (#4161)
386f0b38 fix typo in clearing index when removing track from room track manager (#4158)
0abfb251 deregister observability function when participant is closed (#4157)
97aba5e7 Consistently undo update to sequence number and timestamp when the (#4156)
2317c295 Fix panic while removing track from room track manager. (#4153)
a0a28ac5 Avoid duplicate track add to room track manager.  (#4152)
f01008f8 Revert telemetry stats worker wait configuration. (#4151)
ca4b56d2 Handle case of sequence number jump just after start. (#4150)
97099cae Configurable telemetry stats worker clean up wait. (#4148)
d7db7cb3 chore: fix a large number of spelling issues (#4147)
cadf2ad9 Release v1.9.8 (#4145)
498304cd defensive nil check (#4144)
20f6a497 Store ddParser in atomic.Pointer (#4143)
037cb906 release ext packet if patching fails (#4142)
dd598ef2 Release ExtPacket if dependency descriptor or other parsing fails (#4141)
35b0e2bc update webrtc to 4.1.8 to pick up DTLS fingerprint check during handshake (#4140)
1c1a836c Mark RTCP buffer Write as noinline. (#4138)
ea9b2177 protocol deps to get inactive file adjusted memory usage. (#4137)
64f3d1e9 switch participant callbacks to room to listener interface (#4136)
c6e6c021 add debug metric for tracking references (#4134)
a30c79fa Use isEnding to indicate if down track could be resumed. (#4132)
8c241ecf Fix RTCP reader leak in DownTrack. (#4131)
3eef869a Do not pause rid in SDP (#4129)
8e01e595 Release 1.9.7 (#4128)
7c1a0fab Fix concurrent map access. (#4127)
14446b1c Let participant close remove the published tracks. (#4125)
fa0633aa move utils.WrapAround to mediatransportutil (#4124)
f8706cd4 Update pion/ice to stop gather first on close (#4123)
7954748d Data tracks (#4089)
7158d983 log bucket growth (#4122)
04b35eb6 Release v1.9.6 (#4121)
ebdcead5 Update mediatransportutil to get bucket packet size limit. (#4120)
411b09f6 Release v1.9.5 (#4119)
8dcf235a Update pion/ice - attempt to address tcp packet conn close hang (#4116)
64c65143 Update mediatransportutil (#4115)
0a2943bb Clean up bits added to debug peer connection close hang. (#4114)
9c483a69 Use released version v1.8.41 of pion/sctp (#4113)
35c79a57 Update SCTP hash, had the wrong one in previous PR (#4111)
e0fbbef1 Update pion/sctp with RFC9260 revert (#4110)
f3c80917 Try SCTP with read deadline to unblock abort. (#4109)
bd5382da Splitting transport close timeout logs. (#4108)
6d4154b8 Update pion/ice. (#4107)
a6418ae2 Log more peer conenction state on close timeout. (#4105)
06d99974 Check for cancel on unsubscription/source track going away. (#4104)
7f10e18b Record join/publish/subscribe cancellations. (#4102)
40293632 Clear stereo=1 if stereo is not enabled. (#4101)
70f6def3 Add checks for participant and sub-components close. (#4100)
ffbabcc7 Switch forwarding latency log to Debugw (#4098)
27d82a72 Fix "address" typo in transport logs (addddress → address) (#4097)
37a06821 logger proto redaction. (#4090)
54cf7d46 Control latency of lossy data channel (#4088)
5175c1af Lock x/tools at 0.37.0 (#4085)
d510fff1 Downgrade x/tools to be able to make a release (#4084)
c3ea5890 Prepare release v1.9.4. (#4083)
3a128e61 protocol bump for SIP error mapping and validation (#4081)
c3964ba2 Use sync.Pool for objects in packet path. (#4066)
f8b994d4 Forwarding latency measurement tweaks. (#4080)
f4929f09 Revert "Revert pion/transpor to v3.0.8 (#4073)" (#4074)
a04d9c48 Revert pion/transpor to v3.0.8 (#4073)
2d5054ad kind details for connector (#4072)
a272e28a Log raeson for subscriber not being to determine codec. (#4071)
b9b4eec9 Update pion/transport to v3.1.1 (#4070)
b23d093c update protocol (#4069)
4ce07bed Higher resolution forwarding latency histogram. (#4067)
858db7ab fix(deps): update module github.com/livekit/protocol to v1.43.0 (#4015)
1dc9b8fc Use buffered indicator to exclude from forwarding latency.  (#4062)
f117ee51 Track start up delay.  (#4061)
4872f205 Return write count from WriteRTP. (#4059)
d0ba46b4 Log write count atomic. (#4057)
ae5fb7e8 Add packet to forwarding stats only if packet is forwarded. (#4056)
f6909192 Update PsRPC to get redis pipeliner implementation. (#4055)
ca3c507b Prevent invalid track access while peer connection is shutting down. (#4054)
9ca6ee00 Use replace so that x/tools does not get overridden (#4048)
b9323eab chore(deps): downgrade x/tools for counterfeiter (#4047)
2f1e6c36 Prep release v1.9.3 (#4046)
9d5c351d Fix prom units for forwarding latency/jitter. (#4045)
e183657c Add prom histogram for forwarding latency and jitter. (#4044)
1eefeb30 Enable AbsCaptureTimeURI in RTC configuration (#4043)
075a7576 Use simulcast codec as default policy for audio track (#4040)
c264b504 Don't warn 0 payload type for PCMU (#4039)
32fc3525 Broadcast cond var on RTX write. (#4038)
061eb8b4 AddDownTrack to regressed codec after restarting forwarder. (#4037)
c87eb8ed fix: add missing Unlock() in AddReceiver (#4036)
70444924 if RingingTimeout is provided, deadline should be set to that timeout. (#4018)
ab906d71 Prevent leakage of previous codec after codec regression. (#4035)
79b03f97 Log queueing latency when encountering high forwarding latency (#4034)
29117b14 set max layer in allocation (#4033)
15b19ccd Remove ~ from rid which indicates disabled layer to get the actual rid (#4032)
34e16a87 Check more conditions for opportunistic alloc. (#4031)
81fbd355 Use the optimal allocation function for opportunistic allocation. (#4030)
a2ce73e0 Do not bind buffer if codec is invalid. (#4028)
cef6fdb7 Correct direction for request/response for prom counters. (#4027)
5042c06c Use rtp converter from protocol/utils/rtputil (#4020)
5a426d15 Use rtp converter from protocol/utils (#4019)
35fb8877 feat: use env var for GOARCH (#4012)
c0397696 Issue #1 only: Fix spatial layer initialization in Forwarder (#4003)
2afbf0e8 Some golang modernisation bits. (#4016)
484f784a Prepare release v1.9.2 (#4011)
ad074ed2 counterfeiter needs an older version of x/tools (#4009)
e63e8b6f Include mid -> trackID in both SDP offer and answer. (#4007)
781dfede Do not call receiver methods under settings lock. (#4006)
69ff25a0 Use answer with mid -> trackID mapping when in single peer connection (#4005)
fe912acf Update pion/webrtc to prevent GetStats panic. (#4004)
7930dcde Do not try to read stats from peer connection after close. (#4002)
ca0d5ee9 Count request/response packets on both client and server side. (#4001)
dd62eb00 Resort to full search for requested quality is not available. (#4000)
f6ca82d1 Revert to using silence packets for audio dummy start. (#3999)
0e2c59c8 Sort codec layers when adding track (#3998)
100bb46a Adding ProviderInfo to GetSIPTrunkAuthenticationResponse (#3993)
a8d4df66 "Power of Two Random Choices" option for node selection  (#3785)
a20bbe34 Log RPC details. (#3991)
158496bc Increment RTP timestamp on padding when using dummy start. (#3989)
4f6ed65d Limit check to red + opus when looking for primary codec match. (#3988)
a87f6c4b Allow passing inline trunk for outbound calls. (#3987)
bf06596f Support Opus mixed with RED when encrypted. (#3986)
ea208a1c Add encryption datapacket type (#3869)
2a6adbe8 Use padding only packets for dummy start of audio. (#3984)
be018f97 Provide the InputVideo/AudioState to Ingress in WHIPRTCConnectionNotify (#3982)
146bd969 Do not panic of redis is not configured (#3981)
01337ba7 Do not start forawarding on out-of-order packet. (#3985)
c7f625d6 Do not force codec regression between opus and red. (#3980)
3bd20ddb Revert unintentional change to not handle transport fallback on (#3970)
89a2f46c Update deps to fix redis issue when 1 cluster address is provided (#3969)
060719d1 add config for user data recording (#3966)
b3ee219c fix stats worker closed condition (#3965)
3d737031 add idempotent reference count to telemetry stats worker (#3964)
735c663a Update protocol for EventKey helper. (#3963)
646b9de8 Add node_ip to config-sample.yaml (#3960)
0bf7b178 avoid logging on small values (#3958)
00ff2ab9 Adjust for hold time when fowarding RTCP report. (#3956)
e180be06 short circuit participant broadcast filter in livestream mode (#3955)
bfba6fee Adjust stream allocator ping interval based on state. (#3951)
3837006b Revert "Switch ops queue a singly linked list. (#3949)" (#3950)
990c5faf feat: server rpc apis (#3904)
80b11662 Switch ops queue a singly linked list. (#3949)
56ee2328 handle terminated job requests (#3948)
49f9b9c8 Flush stats when there are no packets. (#3947)
e6a3df1e ForwarStats.GetStats needs to be public (#3946)
824d116b Tweaks tresholds for logging high forwarding latency/jitter. (#3945)
408492e0 Log some information around high forwarding latency. (#3944)
6a41fae5 Use microseconds for forwarding stats. (#3943)
856e0871 mediatransportutil to log local address when validating external IP (#3942)
40101cf7 Update protocol for SipCreateParticipant (#3939)
b07e7a38 Use difference in key frame counter to stop seeder. (#3936)
d7f92878 Avoid matching on empty track id. (#3937)
56fb2885 Do DD restart only if DD structure is present. (#3935)
86facce9 More debugging of DD jump (#3934)
6058a3f6 Add debugging from DD frame number wrap around. (#3933)
dc6825c0 mediatransportutil crash fix for logging local address (#3930)
d6f0588f Update mediatransportutil to log external IP found via STUN. (#3929)
2c30a064 Fix dynacast subscriber node clearing on move participant. (#3926)
6489237e Simulcast audio fixes (#3925)
9f0ab870 Wait for `SetRemoteDescription` before configuring senders. (#3924)
df6c26db Subscrbed audio codecs - update from remote nodes. (#3921)
798fa761 Support simulcasting of audio (#3920)
f4a06cf0 Clean code as there is no oss sweeper for ingress (#3918)
5f561b4f Include agent_name as a participant attribute (#3914)
782a35e8 update protocol for psrpc (#3915)
eee2001a Set publisher codec preferences after setting remote description (#3913)
fc995533 add incoming request id to request response message (#3912)
76645fad Rpcs for ingress proxy WHIP (#3911)
991a4a4f Refactor subscribedTrack + mediaTrackSubscriptions. (#3908)
e16b3ba9 Use gzip reader pool (#3903)
17c34921 update protocol for sip api change (#3902)
2f43a575 Release candidate for v1.9.1 (#3899)
07c40cf3 Use `RequestResponse` to report protocol handling errors (#3895)
98352fd0 Prevent race in determining BWE type. (#3891)
f7291fda Do not send both asb-send-time and twcc. (#3890)
21b42fa6 Do not advertise NACK for RED. (#3889)
6633bf93 Use departure timeout from room preset. (#3888)
38f7906e Handle migration better in single peer connection case. (#3886)
5026de2b handle frame number wrap back in svc (#3885)
091e3c13 Revert to using answer for migration case. (#3884)
2aeadf14 init ua parser once (#3883)
998a9f94 Switch known rids from 012 -> 210, used by OBS. (#3882)
890fd942 Single peer connection mode (#3873)
bfe98eaa fix: ensure the participant kind is set on refresh tokens (#3881)
8d270e2a chunk room updates (#3880)
b4e146c5 update mediatransport util for ice port 3478 (#3877)
dc3a7753 Fix timeout handing in StopEgress (#3876)
d62336e1 Remove unnecessary check (#3870)
c58e5d23 Update golang Docker tag to v1.25 (#3864)
98d577ee Update module github.com/livekit/protocol to v1.40.0 (#3865)
afbf541e Update pion deps (#3863)
b660c3b5 Extract video size from media stream (#3856)
456b8709 Fix missed unlock (#3861)
d500806e Handle no codecs in track info. (#3859)
11b240d6 Log track settings more. (#3853)
1aa0f963 Log signal messages on media node. (#3852)
b182d07b Log signal messages as debug. (#3851)
a370bb20 Support G.711 A-law and U-law (#3849)
fa5f4ef3 Populate SDP cid in track info when available. (#3845)
eed27885 Send `participant_connection_aborted` when participant session is closed (#3848)
61e59346 Update go deps (#3439)
1b228913 Support video layer mode from client and make most of the code mime aware (#3843)
f2da4444 Support per simulcast codec layers. (#3840)
f275f592 handle SyncState in join request (#3839)
5d44cf6d Use wrapped join request to be able to support compressed and uncompressed. (#3838)
5ca16264 Support join request as proto + base64 encoded query param (#3836)
7dea1012 Clean up missed v2 pieces (#3837)
34a49130 Delete v2 signalling (#3835)
1fe33716 Fix: RingingTimeout was being skipped for transferParticipant (#3831)
5751692a deps (#3829)
db4bc127 Get to the point of connecting publisher PC and using it for async signalling (#3822)
5e483e75 update readme (#3809)
e3155b14 Get to the point of establishing subscriber peer connection. (#3821)
a7ce1382 HTTP DELETE of participant session (#3819)
01de0e36 Do not send leave if nil (to older clients) (#3817)
10103449 Add country label to edge prom stats. (#3816)
68387b41 Minor tweak to keep RPC type at service level. (#3815)
a75295fc More v2 signalling changes (#3814)
b20db94d Validation end point for v2 signalling. (#3811)
f2f595f4 update readme (#3808)
fffc2ac0 Use signalling utils from protocol (#3807)
f5fc82d3 Filling out messages unlikely to change in v2. (#3806)
1c99b9ad Split signal segmenter and reassembler. (#3805)
0a1bfd30 Signal handling interfaces and participant specific HTTP PATCH. (#3804)
7837c8e5 starting signaller interface (#3802)
18ce5244 Handle Metadata field from RoomConfig (#3798)
2a6a9b8a Grouping all signal messages into participant_signal. (#3801)
078c01fa Signal v2: envelope and fragments as wire message format. (#3800)
b9a44c3f Signalling V2 protocol implementation start (#3794)
ba702a53 forward agent id to job state (#3786)
1f31d430 Map ErrNoResponse to ErrRequestTimedOut in StopEgress to avoid returning 503 (#3788)
51bbe8c5 Set participant active when peerconnection connected (#3790)
40028dc3 Normalize known rids. (#3779)
ddd92329 Return default layer for invalid rid + track info combination. (#3778)
8c033ce9 Enable H265 by default (#3773)
7678e087 Set rids for all codecs. (#3772)
5d636acf Limit taking rids from SDP only in WHIP path. (#3771)
4d09e5b5 Log SDP rids to understand the mapping better. (#3770)
c69f1aae Revert "Temporary change: use pre-defined rids" (#3769)
8197438e bounds check layer index (#3768)
d11da5f5 Temporary change: use pre-defined rids (#3767)
cb4da533 fix(deps): update module github.com/livekit/protocol to v1.39.3 (#3733)
d6d2b6d8 feat(cli-flags): add option for cpu profiling (#3765)
9fc4ddbe ClearAllReceivers interface is used to pause relay tracks. (#3761)
1216113b Do not need to just clean up receivers. Remove that interface. (#3760)
ef6c38ce Log previous allocation to see changes. (#3759)
01bf9685 SVC with RID -> spatial layer mapping (#3754)
c481396f offer could be nil when migrating. (#3752)
8c2fc0bc Fix svc encoding for chrome mobile on iOS (#3751)
e467daa0 move egress roomID load to launcher (#3748)
3783ebb3 feat(cli): update to urfave/cli/v3 (#3745)
03d3fcab Fix data packet ParticipantIdentity override logic in participant.go (#3735)
068b4366 reuse compiled client config scripts (#3743)
e754a860 return error when moving egree/agent participant (#3741)
7542cf07 remove unused code (#3740)
9d569e2f Take ClientInfo from request. (#3738)
80774263 chore: set workerid on job creation (#3737)
5549ab55 Revert clearing RIDs. (#3732)
ae967313 Clear rids if not present in SDP. (#3731)
0e033907 Return highest available layer if requested quality is higher than (#3729)
9ce737db Add log for dropping out of order reliable message (#3728)
1b95e818 Don't check bindState on downtrack.Bind (#3726)
670f927f Set and use rid/spatial layer in TrackInfo. (#3724)
a9e29116 Add Id to SDP signalling messages. (#3722)
4ec828ce Fix bug with SDP rid, clear only overflow. (#3723)
8f6c3a9b Clear rids from default for layers not published. (#3721)
ce07740e Add simulcast support for WHIP. (#3719)
e98fb94f Create client config manager in room manager constructor. (#3718)
fdf9b852 e2e reliability for data channel (#3716)
35dda8ea swap pub/sub track metrics (#3717)
1d9a4366 Do not require create permission for WHIP participant. (#3715)
e0aea17a Flush stats on close (#3713)
630aa7d9 implement observability for room metrics (#3712)
e7f0294e remove unused ws signal read loop (#3709)
77f70b18 for real, pick up protocol change for webhooks queue length bucnkets (#3707)
7b180646 protocol dep for webhook stats buckets (#3706)
b0ab95ba warn about credentials when used in tokens (#3705)
a72ce30f Small changes to add/use helper functions for length checks. (#3704)
425f6bb3 Allow passing extra attributes to RTC endpoint. (#3693)
758e1762 Add a trend check before declaring joint queuing region. (#3701)
fe81e411 Adds Devin to readme so it auto updates DeepWiki weekly (#3699)
09dede35 version bump v1.9.0 (#3698)
fc867c5b Webhook prom stats (#3697)
0e17916f Do not use Redis pipeline for SIP delete. Fixes Redis clustering support. (#3694)
1b760393 WHIP support. (#3692)
e4f7d81b add client ip to agent worker registration (#3675)
6b849a87 update mediatransportutil for sctp congestion control (#3673)
83b189b0 Add ServerInfo to ReconnectResponse (#3671)
5f87a35b Prevent operating on swapped out map. (#3670)
13b55a80 move agent token (#3669)
c9385edd handle agent worker jwt (#3668)
3b359d8b Use logger resolver reset to reset contexts. (#3665)
dbb70e0f Fix dynacast quality for moving out tracks (#3664)
0a5f3c2a resolve new room name logger earlier when moving participant (#3662)
2df05517 Revert unbound transceiver stop. (#3661)
5172af15 ~Send initial participant update only after a participant becomes active.~ - General clean up (#3655)
5d4d86f8 protocol to pick resolver values replace (#3659)
7f8e6323 Send self participant update immediately. (#3656)
11630878 Use unordered for lossy data channel. (#3653)
aee34ffe log request for agent dispatch api (#3650)
793b383a Add Moving participant to another room (#3648)
2fff36cb Stub MoveParticipant so that cloud can include the latest protocol. (#3646)
d4ab1142 Redact address (#3643)
b83190a3 protocol update to fix memory stats path (#3642)
a1f4e88e Update protocol to latest, got bit by tag (#3641)
8d3902af Protocol to pick up cgroups v2 memory path fix (#3640)
2f002388 Use participant close reason in remove. (#3639)
58822c26 Include clientInfo in connectivity logs. (#3638)
6d6393a6 Take AudioFeatures from AddTrack. (#3635)
08670412 Limit buffer queue before Bind. (#3634)
9f5bc9b9 Avoid synthesising duplicate feature. (#3632)
847239c3 Disable vp9 for safari 18.4 (#3631)
f69ab680 Populate the sender identity when translating to user packet. (#3628)
e1490558 Forward data between WHIP client and non-WHIP client (#3627)
6739e7bc Broadcast inside lock (#3626)
f24152b4 Call Broadcast in lock scope. (#3625)
b760918a Use logger from request context. (#3623)
34a2e2c1 Check for multiple layers for managed track. (#3622)
4955ebe4 Forward transfer headers to internal request (#3615)
d9ee9214 Set up RTX for WHIP publish (#3619)
d8cf5439 Determine TURN connection type and no fallback for TURN/TLS. (#3612)
d0d212fd Fix WHIP ICE restart. (#3616)
5e7f8a12 Update mediatransportutil for max sctp message (65K) (#3611)
28dfac14 Use exported GetEgressNotifyOptions (#3604)
75236bef protocol update to fix IPv6 SDP fragment parsing (#3603)
2130980d Add basic video support to WHIP. (#3602)
e5cbb227 Allow specifying extra webhooks with egress requests (#3597)
7e16106a Add OnSubscirberReady callback on LocalParticipant. (#3600)
5c2d96b9 Check DestinationRoom of VideoGrant for participant forwarding (#3599)
2e236a19 Revert participant state ACTIVE change. (#3598)
35ac5f56 Add support for WHIP ICE Trickle/Restart. (#3596)
ec2dff96 Fix SIP updates when replacing slices. (#3592)
e24fe77b map PEER_CONNECTION_DISCONNECTED -> CONNECTION_TIMEOUT (#3591)
6ee6eb43 Do not drop audio codecs (#3590)
68357ba6 List audio codecs after video codecs. (#3589)
05a891ff Fix rule (had an extra bracket) (#3588)
d7c41091 Exclude RED from enabled codecs for Flutter + 2.4.2 + Android. (#3587)
ee08aede skip out of order participant state updates (#3583)
15a8d9a2 Break track published fuse when there are no tracks (#3581)
35f83c51 Replace Promise with Fuse. (#3580)
07fe9b72 Prevent migration race. (#3579)
ac8082ff Use older SDP module to accommodate bad SDP. (#3578)
1c8307c7 Use cgroup for memstats. (#3573)
e9be0fca log SDP offer on error (#3577)
3238ab8d Calculate rates for memory used and total. (#3570)
d08487bf Unlabeled (pass through) data channels. (#3567)
52ce18d5 fix: revert recent changes to determine simulcast from sdp (#3565)
cdfbb106 Audio uses signal SignalCid and SdpCid. (#3564)
ed5e2f16 Keep simulcast information tied to receiver. (#3563)
ad010cfc chore(logs): log VLS type for VP9/AV1 (#3561)
8cc17f8f Rework node stats a bit. (#3555)
15f56551 fix(video): determine svc/simulcast from SDP for advanced codecs (#3549)
2b6a46f4 Handle `prefer_regression` for backup codec (#3554)
b0abb0ae Add option to use different pacer with send side bwe. (#3552)
26822b6b ParseUsername utility for TURN user name. (#3547)
55909ed7 log the initial join response (#3546)
97fcb82a Fix: Return NotFoundErr instead of Unavailable when the participant does not exist in UpdateParticipant. (#3543)
75d0e18e Implement SIP update API. (#3141)
e118aff1 Fire track subscribed when the subscriber connected (#3540)
13417c01 Send mute event only on change (#3537)
7f4c4597 Stubs for SIP update API. (#3533)
fe673bb2 Send regressed codec upstream stats to analytics. (#3532)
8eb81388 Use a generation to counter to stop key frame seeder on codec change (#3531)
188470a2 Do not accept unsupported track type in AddTrack (#3530)
507fc9cf Do not instantiate 0 sized sequencer. (#3529)
20bddfea Clean up published track on participant removal. (#3527)
65d8aa28 Handle subscribe race with track close better. (#3526)
a6cb00b3 Reduce seeder duration to 30s and also do not force send PLI. (#3525)
c8233205 Add a key frame seeder in up track. (#3524)
0f61ff3a Remove redundant log (#3523)
7685cd25 Log ParticipantInit on signal start to get a picture of join params (#3522)
ac9e62ef add server agent load threshold config (#3520)
cd5d32f0 Add pID and connID to log context to make it easier to search using pID. (#3518)
2d9aa6dd Update api call info method (#3515)
b3779a90 WebHookConfig (#3517)
6121b9af Check ForwardParticipant room name (#3514)
9a7c9442 mediatransportutil update (#3511)
50ab47c1 Log packet drops/forward. (#3510)
139d1b13 Add ForwardParticipant method to room service (#3507)
6c04909f Use atomic to store codec. (#3505)
7f6afe05 Prevent bind lock deadlock on muted. (#3504)
48063df5 load mime type before calling writeBlankFrameRTP (#3502)
d2e6cd15 Do not bind lock across flush which could take time (#3501)
47896f50 Update protocol and IO service. (#3499)
1dc42eef Bump github.com/go-jose/go-jose/v3 from 3.0.3 to 3.0.4 (#3497)
3a35cbc4 Log migration complete only when coming from sync (#3496)
c2f17a10 refactor: using slices.Contains to simplify the code (#3495)
01e51dbd fix: fix the wrong error return value (#3493)
ff9115b2 Disable dd parser for vp8 if extension is not found (#3492)
c3e06f05 Do not attempt to create objects for URL ingresses as the ingress service will do so (#3491)
f0edfbba Fix receiver rtt/jitter. (#3487)
05dfd30d Take RTT and jitter from receiver view while reporting track stats for (#3483)
04ed5683 Don't issue TrackPublished/Unpublished event on migrated track (#3482)
1cffe30c Use a RED transformer to consolidate both RED -> Opus OR Opus -> RED (#3481)
591888f7 Fix missing RTCP sender report when forwarding RED as Opus. (#3480)

git-subtree-dir: livekit-server
git-subtree-split: 46c4309554d37d23ee8da88a8a7e02a68fba09c1
2026-06-25 23:54:33 +09:00

1788 lines
73 KiB
Markdown

# Changelog
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.13.1] - 2026-06-08
### Fixed
- ci: disable goreleaser gomod proxy, incompatible with go.mod replace directive
## [1.13.0] - 2026-06-08
## ATTENTION: This release removes backwards compatibility for TURN authentication without TTL. Please refer to change log of [1.12.0](https://github.com/livekit/livekit/releases/tag/v1.12.0) for details on changes to TURN authentication and permissions handling. It was removed in https://github.com/livekit/livekit/pull/4539.
### Added
- rtc: report participant kind code and details (#4534)
- Add IsIntentionalDisconnect (#4537)
- rtc: emit per-data-track bytes via BytesTrackStats (#4540)
- Start tracking Twirp method request latency in prometheus too, not just in logs (#4545)
- Config documentation for advertise_internal_ip and skip_external_ip_validation (#4552, #4554, #4563)
- Metrics for participant active, i. e. fully established. (#4557)
- turn: allow for providing secret via file (#4564)
### Changed
- Always enable rtx codec (#4533)
- Don't require media sections when joining (#4535)
- Use NACKQuueInterface type. (#4538)
- Remove backwards compatibility support for TURN auth. (#4539)
- telemetry: split webhook-processed hook out of NewTelemetryService (#4548)
- rtc: prevent duration reporting for inactive participants (#4550)
- rtc: report participant session end time on room move (#4561)
- Update mediatransportutil to get ICE candidate timeout config (#4572)
### Fixed
- Check Less and LessEq in version compare. (#4532)
- fix sip error categorization (#4528)
- handle nil clientInfo (#4546, #4547)
- Prevent panic from nil(illegal) syncState.Subscriptions message (#4560)
## [1.12.0] - 2026-05-16
## ATTENTION: This release introduces important changes to how TURN authentication and permissions are handled. These changes make the system more secure. This release maintains backwards compatibility. However, backwards compatibility will be removed in the next release. So, please plan accordingly.
### TURN permission handling changes
By default, TURN will not relay traffic to private IPs. If you need to relay traffic to private IPs, please use `allow_restricted_peer_cidrs` which is explained in config-sample.yaml and replicated below.
```
# # list of restricted peer CIDRs (loopback, link-local (unicast, multicast), multicast, private, unspecified) to allow access to.
# # By default (i. e. empty list), all restricted peer CIDRs are denied access.
# # When not empty, only the specified CIDRs are allowed access.
# # Note that this check is applied to restricted peer CIDRs only.
# allow_restricted_peer_cidrs:
# - 10.0.0.0/8
# - 192.168.0.0/16
```
That list can be paired with a deny list which takes precedence if there is an overlap.
```
# # list of peer CIDRs to deny access to.
# # This applies to all peer CIDRs, including restricted ones.
# # Deny list takes precedence over allow list.
# deny_peer_cidrs:
# - 10.0.0.0/8
# - 192.168.0.0/16
```
Relevant PRs: #4505
### TURN authentication handling changes
TURN credentials now have a TTL (Time-To-Live) beyond which they are not valid to join a room. We recommend rotating your TURN authentication secrets to ensure older credentials are rendered stale and not usable.
```
# # TTL of the TURN credentials in seconds - defaults to 300
# ttl_seconds: 300
```
Please note that the TTL is always used in constructing the credentials. So, a value of 0 will create credentials that expire immediately.
Relevant PRs: #4505, #4515, #4524, #4526
### Added
- add support for client capabilities (#4461)
- Additional data tracks logging (#4489)
- Add CloseWithReason to agent SignalConn interface (#4492)
- add agent environment (#4498)
- add duration seconds reporting (#4500)
- add helper to check for agent worker endpoint (#4503)
- test: verify upstream and downstream connection stats end-to-end (#4508)
- Add TURN permission handler. (#4505)
- allow setting agent job assignment url (#4512)
- Add expiry to TURN password. (#4505, #4515)
- add AssignmentHook to AssignJob; propagate websocket write errors (#4516)
- Apply room tags from JWT grant room configuration (#4518)
- feat: auto create rooms for tokens with the RoomCreate grant (#4320)
- Add integration test for TURN auth failures (#4524)
- Support SIP auth realm for inbound. (#4522)
- Apply ttl check only when authenticate allocation creating (#4526)
### Changed
- feat(pion/ice): replace deprecated NAT1To1 with SetAddressRewriteRules (#4466)
- do not log data track stats if not started (#4468)
- Consolidate RTCP packets and do RTCP callback outside lock. (#4469)
- Keep a shadow copy of tracks for use by different stream allocator state (#4470)
- Avoid stream allocator event data cast to interface and back. (#4471)
- Convert sort.Slice -> slices.SortFunc (#4472)
- Turn off transceiver re-use on Safari. (#4474)
- reduce some heap use in packet path by (#4478)
- Close peer connection unconditionally to unblock set local/remote (#4485)
- Misc optimisations. (#4490)
- report all simulcast layers (#4491)
- Use mediatransportutil/codec package, no functional change (#4497)
- rename agent environment to deployment (#4506)
- Update protocol to support SIP media config. (#4509)
- update protocol for protojson (#4510)
- Populate data track loggers with context (#4514)
- Log large packets receive/send. (#4521)
- Log details of RTCP packets. (#4525)
- Create NACK tracker only once. (#4527)
### Fixed
- fix: wrap IPv6 addresses in brackets in UDP TURN URLs (RFC 3986) (#4476)
- Legacy TrackInfo.Simulcast flag. (#4493)
- Fix publish-only limitations being incorrectly applied to receivers (#4495)
- Include reception reoprts in receiver report callback. (#4496)
- Fix sense check in DeltaInfo gathering (#4507)
- Fix SIP media config upgrade. (#4511)
## [1.11.0] - 2026-04-17
NOTE: Minor version bump that enables data tracks (https://docs.livekit.io/transport/data/data-tracks/) by default.
### Added
- Embedded turn test (#4412)
- chore: log API key during worker registration (#4428)
- Add some simple data track stats (#4431)
- Add `Close` method for UpDataTrackManager and call it on participant (#4432)
- Log join duration. (#4433)
- Add subscriber stream start event notification (#4449)
### Changed
- Cleaning up some logs and standardising log frequency. (#4420)
- Keep subscription synchronous when publisher is expected to resume. (#4424, #4425)
- Do not close publisher peer connection to aid migration. (#4426, #4427)
- Enable data tracks by default. (#4429)
- chore: pin GH commits and switch to golangci-lint (#4444)
- Switch to stdlib maps, slices (#4445)
- Store concrete ICE candidate for remote candidates. (#4458)
### Fixed
- clear track notifier observers on subscription teardown (#4413)
- Guard against timestamp inversion in RED -> Opus conversion. (#4414, #4415, #4418)
- ensure participant init is correctly serialized for logging (#4417)
- Clean up data track observers on unsubscribe. (#4421)
- compute agent dispatch affinity from target load (#4442)
- Apply IPFilter when get local ip (#4440)
- Unsubscribe from data track on close (#4443)
- Use Muted in TrackInfo to propagated published track muted. (#4453)
- fix: limit join request and WHIP request body to http.DefaultMaxHeaderBytes (#4450)
- fix publisher frame count reporting for simulcast streams (#4457)
## [1.10.1] - 2026-03-30
### Added
- add packet trailer stripping support (#4361)
- Path check helpers (#4392)
- add deadline to dtls connect context (#4395)
- feat(agent-dispatch): add job restart policy (#4401)
### Changed
- Close both peer connections to aid migration. (#4382)
### Fixed
- Fix TURN server URL (#4389)
- AV1 parser overflow fix. (#4405)
- Address malformed H264/H265 parsing issues (#4407)
## [1.10.0] - 2026-03-23
## PLEASE NOTE: The logging key for participant session ID (a.k.a participant SID) has been changed from `pID` to `participantID` in this release for the sake of clarity. Hence the minor version bump.
### Added
- Add option to require media sections when participant joining (#4347, #4354)
- Support originating calls from custom domains (#4349)
- Add StopEgress function to the EgressLauncher interface (#4353)
- Add option to not re-use transceiver in e2ee. (#4356)
- Add API to restart lite stats. (#4366, #4368)
* handle AGENT_ERROR disconnect reason (#4339)
### Changed
- Mark last run of grow bucket outside goroutine. (#4348)
- Refine ipv6 support (#4352)
- Sample data send error logging. (#4358)
- Switch data track extension to 1-byte ID/length. (#4362)
- Do not kick off migration of closed participant (#4363)
- Do not block all ext ID determination on stream allocator listener (#4364)
- Rename log field pID to participantID (#4365)
- Replace deprecated io/ioutil with io in whipservice (#4375)
- Update grpc to address CVE-2026-33186 (#4381)
### Fixed
- Fix repair stream ID reporting for RTX pairing. (#4369)
## [1.9.12] - 2026-03-05
### Added
- Add silent frame for pcmu/a (#4258)
- adds a test to ensure agent worker errors cause disconnection (#4273)
- Populate client_protocol field in ParticipantInfo (#4293)
- Read client protocol from query param (#4294)
- generate & log egressID for start egress request (#4303)
- ESP32 Client Info (#4267)
- feat: make INSTALL_PATH overridable in install script (#3954)
### Changed
- Defer setting clock rate in RTPStats module till codec is bound. (#4250)
- Wrapping SIP errors for invalid argument and not found (#4253)
- Ignore parse addr error when add remote candidate (#4264)
- Generate config flags (#4268)
- clear reference guard when resetting signal stats (#4279)
- refresh telemetry guard on participant move (#4280)
- use separate allocation for signal stats telemetry guard (#4281)
- Set up audio config in audio level module when config is updated. (#4290)
- Update self-hosting deployment documentation link (#4312)
- Key telemetry stats worker using combination of roomID, participantID (#4323)
- Two phase restart when doing external restart of receiver. (#4329)
- Send participant left event after track unpublished for moved (#4334)
### Fixed
- Fix receiver restart race (#4248)
- require participant broadcast when metadata/attributes are set in token (#4266)
- Create buffer if needed when a PLI is requested. (#4282)
- Do not increase max expected layer on track info update. (#4285)
- Publish is always on publisher peer connection.(#4307)
- Potential fix for code scanning alert no. 35: Workflow does not contain permissions (#4311)
- Potential fix for code scanning alert no. 36: Workflow does not contain permissions (#4310)
- Fix for some CodeQL reported issues (#4314)
- Protect against incorrect temporal layer. (#4327)
- do not discount packets lost on duplicate packets (#4333)
- Use ParticipantTelemetryListener of LocalParticipant. (#4342)
- Fix SIP client timeout. (#4345)
## [1.9.11] - 2026-01-15
## PLEASE NOTE: The previous release tag v1.9.10 hit a panic under some conditions. Sincerely regret the inconvenience caused. Although we do test rigorously, it is not guaranteed to cover all scenarios. We request you to report any issues you encounter. Thank you.
### Added
- Support OpenTelemetry tracing. Add Jaeger support. (#4222)
- Add option to force simuclast codec. (#4226)
- Log timeout in API (#4231, #4232)
- Add participant option for data track auto-subscribe. (#4240)
### Changed
- Remove enable arrival time forwarding method. (#4217)
- sfu/receiver and sfu/buffer refactor (#4221, #4224, #4225)
- Change some logs to debugw (#4229)
- Changing field naming of data track packet (#4235)
- Update Pion transport package. (#4237)
- Wrapping the invalid request errors for CreateSipParticipant (#4239)
### Fixed
- Swap result sink atomically rather than closing and setting (#4216)
- Address crash in v1.9.10 (#4219, #4220)
- Return on SDP fragment read error. (#4228)
## [1.9.10] - 2026-01-01
## WARNING: Please do not use this release. There is a run time issue which causes the server to panic. The issue has been addressed in #4219 and #4220.
### Added
- add explicit room exists servicestore op (#4175)
- Add support for TURN static auth secret credentials (#3796)
- Make new path for signalling v1.5 support. (#4180)
- report video size from media data for whip (#4211)
- Support preserving external supplied time. (#4212)
### Changed
- Use published track for model access in data down track. (#4176)
- Refactor receiver and buffer into Base and higher layer. (#4185, #4186, #4187, #4189, #4196, #4198, #4207)
- Update pion/webrtc to v4.2.1 (#4191)
- Receiver restart related changes. (#4192, #4200, #4202, #4208)
- Do not warn about track not bound if participant is not ready. (#4205, #4206)
### Fixed
- Flush ext packets on restart/close and release packets. (#4179)
- Resolve RTX pair via OnTrack also. (#4190)
- Handle repair SSRC of simulcast tracks during migration. (#4193)
- return iceservers for whip (#4210)
## [1.9.9] - 2025-12-18
### Added
- Add support for RTP stream restart. (#4161)
### Changed
- Avoid duplicate track add to room track manager. (#4152, #4153)
- Consistently undo update to sequence number and timestamp when the incoming packet cannot be sequenced. (#4156)
- deregister observability function when participant is closed (#4157)
- Ensure subscribe data track handles are unique (#4162)
- move delete to oss service store (#4164)
- clean up manual roomservice log redaction (#4165)
- skip lost sequence number ranges in getIntervalStats (#4166, #4169)
### Fixed
- chore: fix a large number of spelling issues (#4147)
- Handle case of sequence number jump just after start. (#4150)
- Drop run away receiver reports. (#4170)
- Publish/Unpublish counter match. (#4173)
## [1.9.8] - 2025-12-10
### Added
- Mark RTCP buffer Write as noinline. (for better heap attribution) (#4138)
- add debug metric for tracking references (#4134)
### Changed
- Use isEnding to indicate if down track could be resumed. (#4132)
- switch participant callbacks to room to listener interface (#4136)
- protocol deps to get inactive file adjusted memory usage. (#4137)
- update webrtc to 4.1.8 to pick up DTLS fingerprint check during handshake (#4140)
### Fixed
- Do not pause rid in SDP to prevent race with adaptive streaming (#4129)
- leak fixes (#4131, #4141, #4142, #4143, #4144)
## [1.9.7] - 2025-12-05
### Added
- Data tracks (experimental and not ready for use) (#4089)
### Changed
- log bucket growth (#4122)
- Update pion/ice to stop gather first on close (#4123)
- move utils.WrapAround to mediatransportutil (#4124)
- Let participant close remove the published tracks. (#4125)
### Fixed
- Fix concurrent map access for https://github.com/livekit/livekit/issues/4126. (#4127)
## [1.9.6] - 2025-12-01
### Added
- Control latency of lossy data channel (#4088)
- logger proto redaction. (#4090)
- Record join/publish/subscribe cancellations (#4102, #4104)
### Fixed
- Fix "address" typo in transport logs (addddress → address) (#4097)
- Clear stereo=1 if stereo is not enabled. (#4101)
- Participant session close deadlock fixes (#4107, #4113, #4116)
### Changed
- Switch forwarding latency log to Debugw (#4098)
- Update mediatransportutil to get OWD estimator relocation (#4115)
## [1.9.5] - 2025-12-01 - scratched
## [1.9.4] - 2025-11-15
### Added
- Log reason for subscriber not being able to determine codec. (#4071)
- Kind details for connector (#4072)
### Fixed
- Prevent invalid track access while peer connection is shutting down. (#4054)
### Changed
- Update PsRPC to get redis pipeliner implementation (#4055)
- Forwarding latency measurement. (#4056. #4057, #4059, #4061, #4062, #4067, #4080)
- Update pion/transport to v3.1.1 (to get batch I/O ping-pong buffer) (#4070)
- Use sync.Pool for objects in packet path. (#4066)
- Bump protocol to pull sip validation changes and error mapping (#4081)
## [1.9.3] - 2025-11-02
### Added
- Opportunistic video layer allocation on setting max spatial layer. (#4003, #4030, #4031, #4033)
- use env var for GOARCH. (#4012)
- Use simulcast codec as default policy for audio track. (#4040)
- Enable AbsCaptureTimeURI in RTC configuration. (#4043)
- Add prom histogram for forwarding latency and jitter. (#4044, #4045)
### Fixed
- Correct direction for request/response for prom counters. (#4027)
- Do not bind buffer if codec is invalid. (#4028)
- Remove ~ from rid which indicates disabled layer to get the actual rid. (#4032)
- Prevent leakage of previous codec after codec regression. (#4035, #4037)
- fix: add missing Unlock() in AddReceiver. (#4036)
### Changed
- Some golang modernisation bits. (#4106)
- Use rtp converter from protocol/utils. (#4019, #4020)
- High forwarding latency. (#4034, #4038)
- if RingingTimeout is provided, deadline should be set to that timeout. (#4018)
- Don't warn 0 payload type for PCMU. (#4039)
## [1.9.2] - 2025-10-17
### Added
- Use gzip reader pool (#3903)
- Rpcs for ingress proxy WHIP (#3911)
- Include agent_name as a participant attribute (#3914)
- Clean code as there is no oss sweeper for ingress (#3918)
- Support simulcasting of audio (#3920)
- Subscrbed audio codecs - update from remote nodes. (#3921)
- Log some information around high forwarding latency. (#3944)
- feat: server rpc apis (#3904)
- short circuit participant broadcast filter in livestream mode (#3955)
- Adjust for hold time when fowarding RTCP report. (#3956)
- Add node_ip to config-sample.yaml (#3960)
- add idempotent reference count to telemetry stats worker (#3964)
- add config for user data recording (#3966)
- Provide the InputVideo/AudioState to Ingress in WHIPRTCConnectionNotify (#3982)
- Add encryption datapacket type (#3869)
- Allow passing inline trunk for outbound calls. (#3987)
- Log RPC details. (#3991)
- "Power of Two Random Choices" option for node selection (#3785)
- Adding ProviderInfo to GetSIPTrunkAuthenticationResponse (#3993)
- Use answer with mid -> trackID mapping when in single peer connection (#4005)
- Include mid -> trackID in both SDP offer and answer. (#4007)
### Fixed
- add incoming request id to request response message (#3912)
- Simulcast audio fixes (#3925)
- Fix dynacast subscriber node clearing on move participant. (#3926)
- mediatransportutil crash fix for logging local address (#3930)
- Do DD restart only if DD structure is present. (#3935)
- Avoid matching on empty track id. (#3937)
- fix stats worker closed condition (#3965)
- Update deps to fix redis issue when 1 cluster address is provided (#3969)
- Revert unintentional change to not handle transport fallback (#3970)
- Do not panic of redis is not configured (#3981)
- Sort codec layers when adding track (#3998)
- Resort to full search for requested quality is not available. (#4000)
- Do not try to read stats from peer connection after close. (#4002)
- Update pion/webrtc to prevent GetStats panic. (#4004)
### Changed
- update protocol for sip api change (#3902)
- Refactor subscribedTrack + mediaTrackSubscriptions. (#3908)
- Set publisher codec preferences after setting remote description (#3913)
- update protocol for psrpc (#3915)
- Wait for `SetRemoteDescription` before configuring senders. (#3924)
- Update mediatransportutil to log external IP found via STUN. (#3929)
- Add debugging from DD frame number wrap around. (#3933)
- More debugging of DD jump (#3934)
- Use difference in key frame counter to stop seeder. (#3936)
- Update protocol for SipCreateParticipant (#3939)
- mediatransportutil to log local address when validating external IP (#3942)
- Use microseconds for forwarding stats. (#3943)
- Tweaks tresholds for logging high forwarding latency/jitter. (#3945)
- Flush stats when there are no packets. (#3947)
- handle terminated job requests (#3948)
- Switch ops queue a singly linked list. (#3949)
- Revert "Switch ops queue a singly linked list." (#3950)
- Adjust stream allocator ping interval based on state. (#3951)
- avoid logging on small values (#3958)
- Update protocol for EventKey helper. (#3963)
- Do not force codec regression between opus and red. (#3980)
- Do not start forawarding on out-of-order packet. (#3985)
- Use padding only packets for dummy start of audio. (#3984)
- Support Opus mixed with RED when encrypted. (#3986)
- Limit check to red + opus when looking for primary codec match. (#3988)
- Increment RTP timestamp on padding when using dummy start. (#3989)
- Revert to using silence packets for audio dummy start. (#3999)
- Count request/response packets on both client and server side. (#4001)
- Do not call receiver methods under settings lock. (#4006)
- counterfeiter needs an older version of x/tools (#4009)
## [1.9.1] - 2025-09-05
### Fixed
- swap pub/sub track metrics (#3717)
- Fix bug with SDP rid, clear only overflow. (#3723)
- Don't check bindState on downtrack.Bind (#3726)
- Return highest available layer if requested quality is higher than max (#3729)
- Fix data packet ParticipantIdentity override logic in participant.go (#3735)
- Fix svc encoding for chrome mobile on iOS (#3751)
- offer could be nil when migrating. (#3752)
- fix(deps): update module github.com/livekit/protocol to v1.39.3 (#3733)
- bounds check layer index (#3768)
- Do not send leave if nil (to older clients) (#3817)
- Fix: RingingTimeout was being skipped for transferParticipant (#3831)
- Handle no codecs in track info (#3859)
- Fix missed unlock (#3861)
- Fix timeout handing in StopEgress (#3876)
- fix: ensure the participant kind is set on refresh tokens (#3881)
- Do not advertise NACK for RED. (#3889)
- Do not send both asb-send-time and twcc. (#3890)
- Prevent race in determining BWE type. (#3891)
### Added
- Adds Devin to readme so it auto updates DeepWiki weekly (#3699)
- Allow passing extra attributes to RTC endpoint. (#3693)
- warn about credentials when used in tokens (#3705)
- protocol dep for webhook stats buckets (#3706)
- for real, pick up protocol change for webhooks queue length buckets (#3707)
- implement observability for room metrics (#3712)
- e2e reliability for data channel (#3716)
- Add simulcast support for WHIP. (#3719)
- Add Id to SDP signalling messages. (#3722)
- Set and use rid/spatial layer in TrackInfo. (#3724)
- Add log for dropping out of order reliable message (#3728)
- chore: set workerid on job creation (#3737)
- return error when moving egress/agent participant (#3741)
- SVC with RID -> spatial layer mapping (#3754)
- feat(cli-flags): add option for cpu profiling (#3765)
- Enable H265 by default (#3773)
- Signalling V2 protocol implementation start (#3794)
- Signal v2: envelope and fragments as wire message format. (#3800)
- Grouping all signal messages into participant_signal. (#3801)
- starting signaller interface (#3802)
- Signal handling interfaces and participant specific HTTP PATCH. (#3804)
- Split signal segmenter and reassembler. (#3805)
- Filling out messages unlikely to change in v2. (#3806)
- Use signalling utils from protocol (#3807)
- Validation end point for v2 signalling. (#3811)
- More v2 signalling changes (#3814)
- Minor tweak to keep RPC type at service level. (#3815)
- Add country label to edge prom stats. (#3816)
- HTTP DELETE of participant session (#3819)
- Get to the point of establishing subscriber peer connection. (#3821)
- Get to the point of connecting publisher PC and using it for async signalling (#3822)
- Support join request as proto + base64 encoded query param (#3836)
- Use wrapped join request to be able to support compressed and uncompressed. (#3838)
- handle SyncState in join request (#3839)
- Support per simulcast codec layers. (#3840)
- Support video layer mode from client and make most of the code mime aware (#3843)
- Send `participant_connection_aborted` when participant session is closed (#3848)
- Support G.711 A-law and U-law (#3849)
- Extract video size from media stream (#3856)
- update mediatransport util for ice port 3478 (#3877)
- Single peer connection mode (#3873)
- handle frame number wrap back in svc (#3885)
- Use departure timeout from room preset. (#3888)
- Use `RequestResponse` to report protocol handling errors (#3895)
### Changed
- Add a trend check before declaring joint queuing region. (#3701)
- Small changes to add/use helper functions for length checks. (#3704)
- remove unused ws signal read loop (#3709)
- Flush stats on close (#3713)
- Do not require create permission for WHIP participant. (#3715)
- Create client config manager in room manager constructor. (#3718)
- Clear rids from default for layers not published. (#3721)
- Clear rids if not present in SDP. (#3731)
- Revert clearing RIDs. (#3732)
- Take ClientInfo from request. (#3738)
- remove unused code (#3740)
- reuse compiled client config scripts (#3743)
- feat(cli): update to urfave/cli/v3 (#3745)
- move egress roomID load to launcher (#3748)
- Log previous allocation to see changes. (#3759)
- Do not need to just clean up receivers. Remove that interface. (#3760)
- ClearAllReceivers interface is used to pause relay tracks. (#3761)
- Temporary change: use pre-defined rids (#3767)
- Revert "Temporary change: use pre-defined rids" (#3769)
- Log SDP rids to understand the mapping better. (#3770)
- Limit taking rids from SDP only in WHIP path. (#3771)
- Set rids for all codecs. (#3772)
- Return default layer for invalid rid + track info combination. (#3778)
- Normalize known rids. (#3779)
- forward agent id to job state (3786)
- Map ErrNoResponse to ErrRequestTimedOut in StopEgress to avoid returning 503 (#3788)
- Set participant active when peerconnection connected (#3790)
- Handle Metadata field from RoomConfig (#3798)
- [🤖 readme-manager] Update README (#3808)
- [🤖 readme-manager] Update README (#3809)
- Rename RTCRest -> WHIP (#3829)
- Delete v2 signalling (#3835)
- Clean up missed v2 pieces (#3837)
- Update go deps (#3849)
- Populate SDP cid in track info when available. (#3845)
- Log signal messages as debug. (#3851)
- Log signal messages on media node. (#3852)
- Log track settings more. (#3853)
- Update pion deps (#3863)
- Update golang Docker tag to v1.25 (#3864)
- Update module github.com/livekit/protocol to v1.40.0 (#3865)
- Remove unnecessary check (#3870)
- chunk room updates (#3880)
- Switch known rids from 012 -> 210, used by OBS. (#3882)
- init ua parser once (#3883)
- Revert to using answer for migration case. (#3884)
- Handle migration better in single peer connection case. (#3886)
## [1.9.0] - 2025-06-02
### Added
- Add pID and connID to log context to make it easier to search using pID. (#3518)
- add server agent load threshold config (#3520)
- Add a key frame seeder in up track. (#3524)
- Implement SIP update API. (#3141)
- Add option to use different pacer with send side bwe. (#3552)
- Allow specifying extra webhooks with egress requests (#3597)
### Fixed
- Fix missing RTCP sender report when forwarding RED as Opus. (#3480)
- Take RTT and jitter from receiver view while reporting track stats for (#3483)
- Fix receiver rtt/jitter. (#3487)
- fix: fix the wrong error return value (#3493)
- load mime type before calling writeBlankFrameRTP (#3502)
- Prevent bind lock deadlock on muted. (#3504)
- Handle subscribe race with track close better. (#3526)
- Do not instantiate 0 sized sequencer. (#3529)
- Fix: Return NotFoundErr instead of Unavailable when the participant does not exist in UpdateParticipant. (#3543)
- skip out of order participant state updates (#3583)
- Exclude RED from enabled codecs for Flutter + 2.4.2 + Android. (#3587)
- protocol update to fix IPv6 SDP fragment parsing (#3603)
- Forward transfer headers to internal request (#3615)
- Do not use Redis pipeline for SIP delete. Fixes Redis clustering support. (#3694)
### Changed
- Use a RED transformer to consolidate both RED -> Opus OR Opus -> RED (#3481)
- refactor: using slices.Contains to simplify the code (#3495)
- Do not bind lock across flush which could take time (#3501)
- Log packet drops/forward. (#3510)
- Clean up published track on participant removal. (#3527)
- Do not accept unsupported track type in AddTrack (#3530)
- Use cgroup for memstats. (#3573)
- Replace Promise with Fuse. (#3580)
- Do not drop audio codecs (#3590)
- map PEER_CONNECTION_DISCONNECTED -> CONNECTION_TIMEOUT (#3591)
- Update mediatransportutil for max sctp message (65K) (#3611)
- Disable vp9 for safari 18.4 due to compatibility (#3631)
- Avoid synthesising duplicate feature. (#3632)
- Take AudioFeatures from AddTrack. (#3635)
- Use unordered for lossy data channel. (#3653)
- Send self participant update immediately. (#3656)
- update mediatransportutil for sctp congestion control (#3673)
## [1.8.4] - 2025-03-01
### Added
- Add support for datastream trailer (#3329)
- Reject ingress if Enabled flag is false (#3293)
- Use nonce in data messages to de-dupe SendData API. (#3366)
- H265 supoort and codec regression (#3358)
- Pass error details and timeouts. (#3402)
- Webhook analytics event. (#3423)
- add participant job type (#3443)
- add datapacket stream metrics (#3450)
- Implement SIP iterators. (#3332)
- Add ice candidates logs for failed peerconnection (#3473)
### Fixed
- Disable SCTP zero checksum for old go client (#3319)
- disable sctp zero checksum for unknown sdk (#3321)
- remove code that deletes state from the store for rooms older than 24 hours (#3320)
- Correct off-by-one lost count on a restart. (#3337)
- Do not send DD extension if ID is 0. (#3339)
- allocate node for autocreated room in agent dispatch (#3344)
- Do not seed if stream is already writable. (#3347)
- Clone pending tracks to prevent concurrent update. (#3359)
- Resolve newer participant using higher precision join time. (#3360)
- Resolve FromAsCasing warning in Dockerfile (#3356)
- pass RoomConfig along when creating a new dispatch rule (#3367)
- Reduce chances of metadata cache overflow. (#3369, #3370)
- ReconnectResponse getting mutated due to mutation of client conf. (#3379)
- fire TrackSubscribed event only when subscriber is visible (#3378)
- fix internal signal protocol backward compatibility with 1.7.x (#3384)
- Correct reason for poor/lost score. (#3397)
- Do not skip due to large RR interval. (#3398)
- Update config.go to properly process bool env vars (#3382)
- consolidated mime type checks (#3407, #3418)
- Ignore unknown mime in dynacast manager. (#3419)
- Fix timing issue between track republish (#3428)
- Catch up if the diff is exactly (1 << 16) also. (#3433)
- Don't drop message if calculate duration is too small (#3442)
- Dependent participants should not trigger count towards FirstJoinedAt (#3448)
- Fix codec regression failed after migration (#3455)
- Do not revoke track subscription on permission update for exempt participants. (#3458)
### Changed
- Remove duplicate SSRC get. (#3318)
- Exempt egress participant from track permissions. (#3322)
- Use nano time for easier (and hopefully) faster checks/calculations. (#3323)
- move unrolled mime type check for broader use (#3326)
- Request key frame if subscribed is higher than max seen and not congested. (#3348)
- Request key frame on subscription change. (#3349)
- Room creation time with ms resolution (#3362)
- close signal session is request messages are undeliverable (#3364)
- Declare congestion none only if both methods are in DQR. (#3372)
- Clone TrackInfo to TrackPublishRequested event. (#3377)
- Run bandwidth estimation when congestion is relieved also (#3380)
- move ConnectedAt to Participant interface (#3383)
- Starting on padding for RTX stream is accepted. (#3390)
- Adjust receiver report sequence number to be within range of highest. (#3396)
- Split down stream snapshot into sender view and receiver view. (#3422)
- Seed on receiving forwarder state. (#3435)
- Give more cache for RTX. (#3438)
- Properly initialise DD layer selector. (#3467)
## [1.8.3] - 2025-01-07
### Added
- Allow requesting a dialtone during call transfer (#3122)
- Handle room configuration that's set in the grant itself (#3120)
- Update ICE to pick up accepting use-candidate unconditionally for ICE lite agents (#3150)
- auto create rooms during create agent dispatch api request (#3158)
- Annotate SIP errors with Twirp codes. (#3161)
- TWCC based congestion control (#3165 #3234 #3235 #3244 #3245 #3250 #3251 #3253 #3254 #3256 #3262 #3282)
- Loss based congestion signal detector. (#3168 #3169)
- Fix header size calculation in stats. (#3171)
- add per message deflate to signal ws (#3174)
- Add ResyncDownTracks API that can be used to resync all down tracks on (#3185)
- One shot signalling mode (#3188 #3192 #3194 #3223)
- Server side metrics (#3198)
- Add datastream packet type handling (#3210)
- Support SIP list filters. (#3240)
- Add RTX to downstream (#3247)
- Handle REMB on RTX RTCP (#3257)
- Thottle the publisher data channel sending when subscriber is slow (#3255 #3265 #3281)
### Fixed
- avoids NaN (#3119)
- reduce retransmit by seeding duplicate packets and bytes. (#3124)
- don't return video/rtx to client (#3142)
- ignore unexported fields in yaml lint (#3145)
- Fix incorrect computation of SecondsSinceNodeStatsUpdate (#3172)
- Attempt to fix missing participant left webhook. (#3173)
- Set down track connected flag in one-shot-signalling mode. (#3191)
- Don't SetCodecPreferences for video transceiver (#3249)
- Disable av1 for safari (#3284)
- fix completed job status updates causing workers to reconnect (#3294)
### Changed
- Display both pairs on selected candidate pair change (#3133)
- Maintain RTT marker for calculations. (#3139)
- Consolidate operations on LocalNode. (#3140)
- Use int64 nanoseconds and reduce conversion in a few places (#3159)
- De-centralize some configs to where they are used. (#3162)
- Split out audio level config. (#3163)
- Use int64 nanoseconds and reduce conversion in a few places (#3159)
- Reduce lock scope. (#3167)
- Clean up forwardRTP function a bit. (#3177)
- StreamAllocator (congestion controller) refactor (#3180)
- convert psprc error to http code in rtc service failure response (#3187)
- skip http request logging when the client aborts the request (#3195)
- Do not treat data publisher as publisher. (#3204)
- Publish data and signal bytes once every 30 seconds. (#3212)
- upgrade to pion/webrtc v4 (#3213)
- Don't wait rtp packet to fire track (#3246)
- Keep negotiated codec parameters in Downtrack.Bind (#3271)
- Structured logging of ParticipantInit (#3279)
- Start stream allocator after creating peer connection. (#3283)
- Reduce memory allocation in WritePaddingRTP / WriteProbePackets (#3288)
- add room/participant to logger context for SIP APIs (#3290)
- vp8 temporal layer selection with dependency descriptor (#3302)
- Use contiguous groups to determine queuing region. (#3308)
## [1.8.0] - 2024-10-18
### Added
- Support protocol 15 - send signal response for success responses (#2926)
- Add `DisconnectReason` to `ParticipantInfo`. (#2930)
- add roommanager service (#2931)
- Add tracksubscribed event on downtrack added (#2934)
- Speed up track publication (#2952)
- Add FastPublish in JoinResponse (#2964)
- Update protocol. Support SIP Callee dispatch rule type. (#2969)
- Record out-of-packet count/rate in prom. (#2980)
- Support passing SIP headers. (#2993)
- Update ICE via webrtc to get candidate pair stats RTT (#3009)
- Initial plumbing for metrics. (#2950)
- Allow agents to override sender identities on ChatMessage (#3022)
- Implement SIP TransferParticipant API (#3026)
- api for agent worker job count (#3068)
- Add counter for pub&sub time metrics (#3084)
- Support for attributes in initial agent token (#3097)
### Fixed
- Handle another old packet condition. (#2947)
- Properly exclude mDNS when not trickling also. (#2956)
- Panic fix for nil candidate check. (#2957)
- Skip ICE restart on unestablished peer connection. (#2967)
- Recreate stats worker on resume if needed. (#2982)
- Handle trailing slashes in URL (#2988)
- Do not take padding packets into account in max pps calculation (#2990)
- compute agent service affinity from available capacity (#2995)
- Do not remove from subscription map on unsubscribe. (#3002)
- Fix forwarder panic defer of nil senderReport (#3011)
- avoid race condition on downtrack.Codec (#3032)
- fix: copy attributes to refresh token (#3036)
- Set mime_type for tracks don't have simulcast_codecs (#3040)
- check data messages for nil payloads (#3062)
- Fix codec name normalisation. (#3081 #3103 #3104 #3106 #3113)
- Set FEC enabled properly in connection stats module. (#3098)
- Type safe IP checks for SIP Trunks. (#3108)
- Parse python, cpp, unity-web, node sdks in clientinfo (#3110)
### Changed
- Use monotonic clock in packet path. (#2940)
- Refactor propagation delay estimator. (#2941)
- Propagate SIP attributes from a Dispatch Rule. (#2943)
- Refactor sip create participant (#2949)
- Reduce threshold of out-of-order very old packet detection. (#2951)
- Standardize twirp hooks during server init (#2959)
- Don't remove DD extesion for simucalst codecs (#2960)
- Negotiate downttrack for subscriber before receiver is ready (#2970)
- Allow start streaming on an out-of-order packet. (#2971)
- exponential backoff when calling CreateRoom (#2977)
- Start negotiate immediately if last one is before debouce interval (#2979)
- Seed down track state on re-use. (#2985)
- Cache RTCP sender report in forwarder state. (#2994)
- Set SenderReport to nil on seeding if empty. (#3008)
- Use new track id for republishing (#3020)
- simplify agent registration (#3018)
- enable room creator service by default (#3043)
- Fix clock rate skew calculation. (#3055)
- Forward new disconnect reasons for SIP. (#3056)
- Use difference debounce interval in negotiation (#3078)
- Use lower case mime type in dynacast. (#3080)
- Drop quality a bit faster on score trending lower to be more responsive. (#3093)
- Protocol update to get more precise protoproxy timing (#3107)
## [1.7.2] - 2024-08-10
### Added
- Feat add prometheus auth (#2252)
- Support for Agent protocol v2 (#2786 #2837 #2872 #2886, #2919)
- Add track subscribed notification to publisher (#2834)
- Always forward DTMF data messages. (#2848)
- Send error response when update metadata fails. (#2849)
- Allow specifying room configuration in token (#2853)
- Make sender report pass through an option. (#2861)
- Add option to disable ice lite (#2862)
- mark final ice candidate (#2871)
- Send the correct room closed reason to clients (#2901)
- distribute load to agents probabilistically, inversely proportionate to load (#2902)
### Fixed
- Fixed participant attributes not broadcasted correctly (#2825)
- Handle cases of long mute/rollover of time stamp. (#2842)
- use correct payload type for red primary encoding (#2845)
- Forward correct payload type for mixed up red/primary payload (#2847)
- Check size limits on metadata and name set from client. (#2850)
- Fallback to primary encoding if redundant block overflow (#2858)
- Support updating local track features when pending. (#2863)
- don't send unknown signal message to rust sdk with protocol 9 (#2860)
- Fixed handling of different extensions across multiple media sections (#2878)
- Fix forced rollover of RTP time stamp. (#2896)
- Do not start forwarding on an out-of-order packet. (#2917)
- Reset DD tracker layers when muted. (#2920)
### Changed
- add handler interface to receive agent worker updates (#2830)
- log non-trickle candidate in details (#2832)
- RTP packet validity check. (#2833)
- Do not warn on padding (#2839)
- Check sender report against media path. (#2843)
- Do not create room in UpdateRoomMetadata (#2854)
- use atomic pointer for MediaTrackReceiver TrackInfo (#2870)
- Don't create DDParser for non-svc codec (#2883)
## [1.7.0] - 2024-06-23
This version includes a breaking change for SIP service. SIP service now requires `sip.admin` in the token's permission grant
to interact with trunks and dispatch rules; and `sip.call` to dial out to phone numbers.
The latest versions of server SDKs will include the permission grants automatically.
### Added
- Support new SIP Trunk API. (#2799)
- Add participant session duration metric (#2801)
- Support for key/value attributes on Participants (#2806)
- Breaking: SIP service requires sip.admin or sip.call grants. (#2808)
### Fixed
- Fixed agent jobs not launching when using the CreateRoom API (#2796)
### Changed
- Indicate if track is expected to be resumed in `onClose` callback. (#2800)
## [1.6.2] - 2024-06-15
### Added
- Support for optional publisher datachannel (#2693)
- add room/participant name limit (#2704)
- Pass through timestamp in abs capture time (#2715)
- Support SIP transports. (#2724)
### Fixed
- add missing strings.EqualFold for some mimeType comparisons (#2701)
- connection reset without any closing handshake on clientside (#2709)
- Do not propagate RTCP if report is not processed. (#2739)
- Fix DD tracker addition. (#2751)
- Reset tracker on expected layer increase. (#2753)
- Do not add tracker for invalid layers. (#2759)
- Do not compare payload type before bind (#2775)
- fix agent jobs not launching when using the CreateRoom API (#2784)
### Changed
- Performance improvements to forwarding by using condition var. (#2691 #2699)
- Simplify time stamp calculation on switches. (#2688)
- Simplify layer roll back. (#2702)
- ensure room is running before attempting to delete (#2705)
- Redact egress object in CreateRoom request (#2710)
- reduce participant lock scope (#2732)
- Demote some less useful/noisy logs. (#2743)
- Stop probe on probe controller reset (#2744)
- initialize bucket size by publish bitrates (#2763)
- Validate RTP packets. (#2778)
## [1.6.1] - 2024-04-26
This release changes the default behavior when creating or updating WHIP
ingress. WHIP ingress will now default to disabling transcoding and
forwarding media unchanged to the LiveKit subscribers. This behavior can
be changed by using the new `enable_transcoding` available in updated
SDKs. The behavior of existing ingresses is unchanged.
### Added
- Add support for "abs-capture-time" extension. (#2640)
- Add PropagationDelay API to sender report data (#2646)
- Add support for EnableTranscoding ingress option (#2681)
- Pass new SIP metadata. Update protocol. (#2683)
- Handle UpdateLocalAudioTrack and UpdateLocalVideoTrack. (#2684)
- Forward transcription data packets to the room (#2687)
### Fixed
- backwards compatability for IsRecorder (#2647)
- Reduce RED weight in half. (#2648)
- add disconnected chan to participant (#2650)
- add typed ops queue (#2655)
- ICE config cache module. (#2654)
- use typed ops queue in pctransport (#2656)
- Use the ingress state updated_at field to ensure that out of order RPC do not overwrite state (#2657)
- Log ICE candidates to debug TCP connection issues. (#2658)
- Debug logging addition of ICE candidate (#2659)
- fix participant, ensure room name matches (#2660)
- replace keyframe ticker with timer (#2661)
- fix key frame timer (#2662)
- Disable dynamic playout delay for screenshare track (#2663)
- Don't log dd invalid template index (#2664)
- Do codec munging when munging RTP header. (#2665)
- Connection quality LOST only if RTCP is also not available. (#2670)
- Handle large jumps in RTCP sender report timestamp. (#2674)
- Bump golang.org/x/net from 0.22.0 to 0.23.0 (#2673)
- do not capture pointers in ops queue closures (#2675)
- Fix SubParticipant twice when paticipant left (#2672)
- use ttlcache (#2677)
- Detach subscriber datachannel to save memory (#2680)
- Clean up UpdateVideoLayers (#2685)
## [1.6.0] - 2024-04-10
### Added
- Support for Participant.Kind. (#2505 #2626)
- Support XR request/response for rtt calculation (#2536)
- Added support for departureTimeout to keep the room open after participant depart (#2549)
- Added support for Egress Proxy (#2570)
- Added support for SIP DTMF data messages. (#2559)
- Add option to enable bitrate based scoring (#2600)
- Agent service: support for orchestration v2 & namespaces (#2545 #2641)
- Ability to disable audio loss proxying. (#2629)
### Fixed
- Prevent multiple debounce of quality downgrade. (#2499)
- fix pli throttle locking (#2521)
- Use the correct snapshot id for PPS. (#2528)
- Validate SIP trunks and rules when creating new ones. (#2535)
- Remove subscriber if track closed while adding subscriber. (#2537)
- fix #2539, do not kill the keepaliveWorker task when the ping timeout occurs (#2555)
- Improved A/V sync, proper RTCP report past mute. (#2588)
- Protect duplicate subscription. (#2596)
- Fix twcc has chance to miss for firefox simulcast rtx (#2601)
- Limit playout delay change for high jitter (#2635)
### Changed
- Replace reflect.Equal with generic sliceEqual (#2494)
- Some optimisations in the forwarding path. (#2035)
- Reduce heap for dependency descriptor in forwarding path. (#2496)
- Separate buffer size config for video and audio. (#2498)
- update pion/ice for tcpmux memory improvement (#2500)
- Close published track always. (#2508)
- use dynamic bucket size (#2524)
- Refactoring channel handling (#2532)
- Forward publisher sender report instead of generating. (#2572)
- Notify initial permissions (#2595)
- Replace sleep with sync.Cond to reduce jitter (#2603)
- Prevent large spikes in propagation delay (#2615)
- reduce gc from stream allocator rate monitor (#2638)
## [1.5.3] - 2024-02-17
### Added
- Added dynamic playout delay if PlayoutDelay enabled in the room (#2403)
- Allow creating SRT URL pull ingress (requires Ingress service release) (#2416)
- Use default max playout delay as chrome (#2411)
- RTX support on publisher transport (#2452)
- Add exponential backoff to room service check retries (#2462)
- Add support for ingress ParticipantMetadata (#2461)
### Fixed
- Prevent race of new track and new receiver. (#2345)
- Fixed race condition when applying metadata update. (#2363 #2478)
- Fixed race condition in DownTrack.Bind. (#2388)
- Improved PSRPC over redis reliability with keepalive (#2398)
- Fix race condition on Participant.updateState (#2401)
- Replace /bin/bash with env call for FreeBSD compatibility (#2409)
- Fix startup with -dev and -config (#2442)
- Fix published track leaks: close published tracks on participant close (#2446)
- Enforce empty SID for UserPacket from hidden participants (#2469)
- Ignore duplicate RID. (Fix for spec breakage by Firefox on Windows 10) (#2471)
### Changed
- Logging improvements (various PRs)
- Server shuts down after a second SIGINT to simplify development lifecycle (#2364)
- A/V sync improvements (#2369 #2437 #2472)
- Prometheus: larger max session start time bin size (#2380)
- Updated SIP protocol for creating participants. (requires latest SIP release) (#2404 #2474)
- Improved reliability of signal stream starts with retries (#2414)
- Use Deque instead of channels in internal communications to reduce memory usage. (#2418 #2419)
- Do not synthesise DISCONNECT on session change. (#2412)
- Prometheus: larger buckets for jitter histogram (#2468)
- Support for improved Ingress internal RPC (#2485)
- Let track events go through after participant close. (#2487)
### Removed
- Removed code related to legacy (pre 1.5.x) RPC protocol (#2384 #2385)
## [1.5.2] - 2023-12-21
Support for LiveKit SIP Bridge
### Added
- Add SIP Support (#2240 #2241 #2244 #2250 #2263 #2291 #2293)
- Introduce `LOST` connection quality. (#2265 #2276)
- Expose detailed connection info with ICEConnectionDetails (#2287)
- Add Version to TrackInfo. (#2324 #2325)
### Fixed
- Guard against bad quality in trackInfo (#2271)
- Group SDES items for one SSRC in the same chunk. (#2280)
- Avoid dropping data packets on local router (#2270)
- Fix signal response delivery after session start failure (#2294)
- Populate disconnect updates with participant identity (#2310)
- Fix mid info lost when migrating multi-codec simulcast track (#2315)
- Store identity in participant update cache. (#2320)
- Fix panic occurs when starting livekit-server with key-file option (#2312) (#2313)
### Changed
- INFO logging reduction (#2243 #2273 #2275 #2281 #2283 #2285 #2322)
- Clean up restart a bit. (#2247)
- Use a worker to report signal/data stats. (#2260)
- Consolidate TrackInfo. (#2331)
## [1.5.1] - 2023-11-09
Support for the Agent framework.
### Added
- PSRPC based room and participant service. disabled by default (#2171 #2205)
- Add configuration to limit MaxBufferedAmount for data channel (#2170)
- Agent framework worker support (#2203 #2227 #2230 #2231 #2232)
### Fixed
- Fixed panic in StreamTracker when SVC is used (#2147)
- fix CreateEgress not completing (#2156)
- Do not update highest time on padding packet. (#2157)
- Clear flags in packet metadata cache before setting them. (#2160)
- Drop not relevant packet only if contiguous. (#2167)
- Fixed edge cases in SVC codec support (#2176 #2185 #2191 #2196 #2197 #2214 #2215 #2216 #2218 #2219)
- Do not post to closed channels. (#2179)
- Only launch room egress once (#2175)
- Remove un-preferred codecs for android firefox (#2183)
- Fix pre-extended value on wrap back restart. (#2202)
- Declare audio inactive if stale. (#2229)
### Changed
- Defer close of source and sink to prevent error logs. (#2149)
- Continued AV Sync improvements (#2150 #2153)
- Egress store/IO cleanup (required for Egress 1.8.0) (#2152)
- More fine grained filtering NACKs after a key frame. (#2159)
- Don't filter out ipv6 address for client don't support prflx over relay (#2193)
- Disable h264 for android firefox (#2190)
- Do not block on down track close with flush. (#2201)
- Separate publish and subscribe enabled codecs for finer grained control. (#2217)
- improve participant hidden (#2220)
- Reject migration if codec mismatch with published tracks (#2225)
## [1.5.0] - 2023-10-15
### Added
- Add option to issue full reconnect on data channel error. (#2026)
- Support non-SVC AV1 track publishing (#2030)
- Add batch i/o to improve throughput (#2033)
- Integrate updated TWCC responder (#2038)
- Allow RoomService.SendData to use participant identities (#2051 #2058)
- Support for Participant Egress (#2070)
- Add max playout delay config (#2089)
- Enable SVC codecs by default (#2109)
- Add SyncStreams flag to Room, protocol 10 (#2110)
### Fixed
- Unlock pendingTracksLock when mid is empty (#1994)
- Do not offer H.264 high profile in subscriber offer, fixes negotiation failures (#1997)
- Prevent erroneous stream pause. (#2008)
- Handle duplicate padding packet in the up stream. (#2012)
- Do not process packets not processed by RTPStats. (#2015)
- Adjust extended sequence number to account for dropped packets (#2017)
- Do not force reconnect on resume if there is a pending track (#2081)
- Fix out-of-range access. (#2082)
- Start key frame requester on start. (#2111)
- Handle RED extended sequence number. (#2123)
- Handle playoutDelay for Firefox (#2135)
- Fix ICE connection fallback (#2144)
### Changed
- Drop padding only packets on publisher side. (#1990)
- Do not generate a stream key for URL pull ingress (#1993)
- RTPStats optimizations and improvements (#1999 #2000 #2001 #2002 #2003 #2004 #2078)
- Remove sender report warp logs. (#2007)
- Don't create new slice when return broadcast downtracks (#2013)
- Disconnect participant when signal proxy is closed (#2024)
- Use random NodeID instead of MAC based (#2029)
- Split RTPStats into receiver and sender. (#2055)
- Reduce packet meta data cache (#2073 #2078)
- Reduce ghost participant disconnect timeout (#2077)
- Per-session TURN credentials (#2080)
- Use marshal + unmarshal to ensure unmarshallable fields are not copied. (#2092)
- Allow playout delay even when sync stream isn't used. (#2133)
- Increase accuracy of delay since last sender report. (#2136)
## [1.4.5] - 2023-08-22
### Added
- Add ability to roll back video layer selection. (#1871)
- Allow listing ingress by id (#1874)
- E2EE trailer for server injected packets. (#1908)
- Add support for ingress URL pull (#1938 #1939)
- (experimental) Add control of playout delay (#1838 #1930)
- Add option to advertise external ip only (#1962)
- Allow data packet to be sent to participants by identity (#1982)
### Fixed
- Fix RTC IP when binding to 0.0.0.0 (#1862)
- Prevent anachronous sample reading in connection stats (#1863)
- Fixed resubscribe race due to desire changed before cleaning up (#1865)
- Fixed numPublisher computation by marking dirty after track published changes (#1878)
- Attempt to avoid out-of-order max subscribed layer notifications. (#1882)
- Improved packet loss handling for SVC codecs (#1912 )
- Frame integrity check for SVC codecs (#1914)
- Issue full reconnect if subscriber PC is closed on ICERestart (#1919)
- Do not post max layer event for audio. (#1932)
- Never use dd tracker for non-svc codec (#1952)
- Fix race condition causing new participants to have stale room metadata (#1969)
- Fixed VP9 handling for non-SVC content. (#1973)
- Ensure older session does not clobber newer session. (#1974)
- Do not start RTPStats on a padding packet. (#1984)
### Changed
- Push track quality to poor on a bandwidth constrained pause (#1867)
- AV sync improvements (#1875 #1892 #1944 #1951 #1955 #1956 #1968 #1971 #1986)
- Do not send unnecessary room updates when content isn't changed (#1881)
- start reading signal messages before session handler finishes (#1883)
- changing key file permissions control to allow group readable (#1893)
- close disconnected participants when signal channel fails (#1895)
- Improved stream allocator handling during transitions and reallocation. (#1905 #1906)
- Stream allocator tweaks to reduce re-allocation (#1936)
- Reduce NACK traffic by delaying retransmission after first send. (#1918)
- Temper stream allocator more to avoid false negative downgrades (#1920)
## [1.4.4] - 2023-07-08
### Added
- Add dependency descriptor stream tracker for svc codecs (#1788)
- Full reconnect on publication mismatch on resume. (#1823)
- Pacer interface in down stream path. (#1835)
- retry egress on timeout/resource exhausted (#1852)
### Fixed
- Send Room metadata updates immediately after update (#1787)
- Do not send ParticipantJoined webhook if connection was resumed (#1795)
- Reduce memory leaks by avoiding references in closure. (#1809)
- Honor bind address passed as `--bind` also for RTC ports (#1815)
- Avoid dangling downtracks by always deleting them in receiver close. (#1842)
- Better cleanup of subscriptions with needsCleanup. (#1845)
- Fix nack issue for svc codecs (#1856)
- Fixed hidden participant update were still sent when track is published (#1857)
- Fixed Redis lockup when unlocking room with canceled request context (#1859)
### Changed
- Improvements to A/V sync (#1773 #1781 #1784 )
- Improved probing to be less disruptive in low bandwidth scenarios (#1782 #1834 #1839)
- Do not mute forwarder when paused due to bandwidth congestion. (#1796)
- Improvements to congestion controller (#1800 #1802 )
- Close participant on full reconnect. (#1818)
- Do not process events after participant close. (#1824)
- Improvements to dependency descriptor based selection forwarder (#1808)
- Discount out-of-order packets in downstream score. (#1831)
- Adaptive stream to select highest layer of equal dimensions (#1841)
- Return 404 with DeleteRoom/RemoveParticipant when deleting non-existent resources (#1860)
## [1.4.3] - 2023-06-03
### Added
- Send quality stats to prometheus. (#1708)
- Support for disabling publishing codec on specific devices (#1728)
- Add support for bypass_transcoding field in ingress (#1741)
- Include await_start_signal for Web Egress (#1759)
### Fixed
- Handle time stamp increment across mute for A/V sync (#1705)
- Additional A/V sync improvements (#1712 #1724 #1737 #1738 #1764)
- Check egress status on UpdateStream failure (#1716)
- Start signal relay sessions with the correct node (#1721)
- Fix unwrap for out-of-order packet (#1729)
- Fix dynacast for svc codec (#1742 #1743)
- Ignore receiver reports that have a sequence number before first packet (#1745)
- Fix node stats updates on Windows (#1748)
- Avoid reconnect loop for unsupported downtrack (#1754)
- Perform unsubscribe in parallel to avoid blocking (#1760)
### Changed
- Make signal close async. (#1711 #1722)
- Don't add nack if it is already present in track codec (#1714)
- Tweaked connection quality algorithm to be less sensitive to jitter (#1719)
- Adjust sender report time stamp for slow publishers (#1740)
- Split probe controller from StreamAllocator (#1751)
## [1.4.2] - 2023-04-27
### Added
- VP9 codec with SVC support (#1586)
- Support for source-specific permissions and client-initiated metadata updates (#1590)
- Batch support for signal relay (#1593 #1596)
- Support for simulating subscriber bandwidth (#1609)
- Support for subscription limits (#1629)
- Send Room updates when participant counts change (#1647)
### Fixed
- Fixed process return code to 0 (#1589)
- Fixed VP9 stutter when not using dependency descriptors (#1595)
- Fixed stutter when using dependency descriptors (#1600)
- Fixed Redis cluster support when using Egress or Ingress (#1606)
- Fixed simulcast parsing error for slower clients (camera and screenshare) (#1621)
- Don't close RTCP reader if Downtrack will be resumed (#1632)
- Restore VP8 munger state properly. (#1634)
- Fixed incorrect node routing when using signal relay (#1645)
- Do not send hidden participants to others after resume (#1689)
- Fix for potential webhook delivery delays (#1690)
### Changed
- Refactored video layer selector (#1588 #1591 #1592)
- Improved transport fallback when client is resuming (#1597)
- Improved webhook reliability with delivery retries (#1607 #1615)
- Congestion controller improvements (#1614 #1616 #1617 #1623 #1628 #1631 #1652)
- Reduced memory usage by releasing ParticipantInfo after JoinResponse is transmitted (#1619)
- Ensure safe access in sequencer (#1625)
- Run quality scorer when there are no streams. (#1633)
- Participant version is only incremented after updates (#1646)
- Connection quality attribution improvements (#1653 #1664)
- Remove disallowed subscriptions on close. (#1668)
- A/V sync improvements (#1681 #1684 #1687 #1693 #1695 #1696 #1698 #1704)
- RTCP sender reports every three seconds. (#1692)
### Removed
- Remove deprecated (non-psrpc) egress client (#1701)
## [1.4.1] - 2023-04-05
### Added
- Added prometheus metrics for internal signaling API #1571
### Fixed
- Fix regressions in RTC when using redis with psrpc signaling #1584 #1582 #1580 #1567
- Fix required bitrate assessment under channel congestion #1577
### Changed
- Improve DTLS reliability in regions with internet filters #1568
- Reduce memory usage from logging #1576
## [1.4.0] - 2023-03-27
### Added
- Added config to disable active RED encoding. Use NACK instead #1476 #1477
- Added option to skip TCP fallback if TCP RTT is high #1484
- psrpc based signaling between signal and RTC #1485
- Connection quality algorithm revamp #1490 #1491 #1493 #1496 #1497 #1500 #1505 #1507 #1509 #1516 #1520 #1521 #1527 #1528 #1536
- Support for topics in data channel messages #1489
- Added active filter to ListEgress #1517
- Handling for React Native and Rust SDK ClientInfo #1544
### Fixed
- Fixed unsubscribed speakers stuck as speaking to clients #1475
- Do not include packet in RED if timestamp is too far back #1478
- Prevent PLI layer lock getting stuck #1481
- Fix a case of changing video quality not succeeding #1483
- Resync on pub muted for audio to avoid jump in sequence numbers on unmute #1487
- Fixed a case of data race #1492
- Inform reconnecting participant about recently disconnected users #1495
- Send room update that may be missed by reconnected participant #1499
- Fixed regression for AV1 forwarding #1538
- Ensure sequence number continuity #1539
- Give proper grace period when recorder is still in the room #1547
- Fix sequence number offset on packet drop #1556
- Fix signal client message buffer size #1561
### Changed
- Reduce lock scope getting RTCP sender reports #1473
- Avoid duplicate queueReconcile in subscription manager #1474
- Do not log TURN errors with prefix "error when handling datagram" #1494
- Improvements to TCP fallback mode #1498
- Unify forwarder between dependency descriptor and no DD case. #1543
- Increase sequence number cache to handle high rate tracks #1560
## [1.3.5] - 2023-02-25
### Added
- Allow for strict ACKs to be disabled or subscriber peer connections #1410
### Fixed
- Don't error when get tc stats fails #1306
- Fixed support for Redis cluster #1415
- Fixed unpublished callback being skipped in certain cases #1418
- Fixed panic when Egress request is sent with an empty output field #1420
- Do not unsubscribe from track if it's been republished #1424 #1429 #1454 #1465
- Fixed panic when closing room #1428
- Use available layers in optimal allocation #1445 #1446 #1448 #1449
- Fixed unable to notify webhook when egress ending with status EgressStatus_EGRESS_LIMIT_REACHED #1451
- Reset subscription start timer on permission grant #1457
- Avoid panic when server receives a token without a video grant #1463
### Changed
- Updated various logging #1413 #1433 #1437 #1440 #1470
- Do not force TCP when client left before DTLS handshake #1414
- Improved performance of data packet forwarding by broadcasting in parallel #1425
- Cleaning up `availableLayers` and `exemptedLayers` #1407
- Send stream start on initial start #1456
- Switch to TLS if ICE/TCP isn't working well #1458
### Removed
- Removed signal de-duper as it has not proven to be reliable #1427
- Remove deprecated ingress rpc #1439 (breaking change for Ingress, this will require Ingress v0.0.2+)
## [1.3.4] - 2023-02-09
### Added
- Memory used and total to node stats #1293 #1296
- Reconnect response to update ICE servers after resume #1300 #1367
- Additional prometheus stats #1291
- Adopt psrpc for internal communication protocol #1295
- Enable track-level audio nack config #1306
- Telemetry events for ParticipantResumed, track requested actions #1308
- Allow disabling mDNS, which degrades performance on certain networks #1311 #1393
- Publish stream stats to prometheus #1313 #1347
- Retry initial connection attempt if it fails #1335 #1409
- Add reconnect reason and signal rtt calculation #1381
- silent frame for muted audio downtrack #1389
### Fixed
- Fixed TimedVersion handling of non-monotonic timestamps #1304
- Persist participant before firing webhook #1340
- Set IsPublisher to true for data-only publishers #1348
- Ignore inactive media in SDP #1365
- Ensure older participant session update does not go out after a newer #1372
- Fix potentially nil access in buffer #1374
- Ensure onPacket is not nil in RTCPReader callback #1390
- Fix rare panic by CreateSenderReport before bind completed #1397
### Changed
- A/V synchronization improvements #1297 #1315 #1318 #1321 #1351
- IOInfo service to handle ingress/egress updates #1305
- Subscription manager to improve subscription resilience #1317 #1358 #1369 #1379 #1382
- Enable video at low res by default when adaptive stream is enabled #1341
- Enable upstream nack for opus only audio track #1343
- Allow /rtc/validate to return room not found message #1344
- Improve connectivity check to detect DTLS failure #1366
- Simplify forwarding logic #1349 #1376 #1398
- Send stream state paused only when it is paused due to bandwidth limitation. #1391
- Do not catch panics, exit instead to prevent lockup #1392
## [1.3.3] - 2023-01-06
### Added
- Signal deduper: ignore duplicate signal messages #1243 #1247 #1257
- FPS based stream tracker #1267 #1269 #1275 #1281
- Support forwarding track encryption status #1265
- Use publisher side sender report when forwarding - improves A/V sync #1286
### Fixed
- When removing a participant, verify SID matches #1237
- Fixed rare panic when GetSelectedICECandidatePair returns nil #1253
- Prevent ParticipantUpdate to be sent before JoinResponse #1271 #1272
- Fixed Firefox connectivity issues when using UDPMux #1270 #1277
- Fixed subscribing muted track with Egress and Go SDK #1283
### Changed
- ParticipantLeft webhook would not be sent unless connected successfully #1130
- Updated to Go 1.18+ #1259
- Updated Egress RPC framework - psrpc #1252 #1256 #1266 #1273
- Track subscription operations per source track #1248
- Egress participants do not count in max_participants #1279
## [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)