Commit Graph

3344 Commits

Author SHA1 Message Date
Raja Subramanian
d6f0588fb2 Update mediatransportutil to log external IP found via STUN. (#3929) 2025-09-16 16:34:23 +05:30
Raja Subramanian
2c30a0640a Fix dynacast subscriber node clearing on move participant. (#3926) 2025-09-14 15:20:20 +05:30
Raja Subramanian
6489237e33 Simulcast audio fixes (#3925)
* Simulcast audio fixes

* clean up
2025-09-14 09:41:40 +05:30
Raja Subramanian
9f0ab8706f Wait for SetRemoteDescription before configuring senders. (#3924)
* Wait for `SetRemoteDescription` before configuring senders.

Details inline in code.

* comment
2025-09-12 23:24:56 +05:30
Raja Subramanian
df6c26dbf6 Subscrbed audio codecs - update from remote nodes. (#3921) 2025-09-12 13:01:00 +05:30
Raja Subramanian
798fa76110 Support simulcasting of audio (#3920)
* WIP

* WIP

* new files

* clean up

* test

* Deps

* clean up

* clean up

* goimports latest
2025-09-12 10:20:04 +05:30
cnderrauber
f4a06cf025 Clean code as there is no oss sweeper for ingress (#3918) 2025-09-11 16:44:52 +08:00
David Zhao
5f561b4ff1 Include agent_name as a participant attribute (#3914) 2025-09-10 21:29:55 -07:00
Paul Wells
782a35e801 update protocol for psrpc (#3915) 2025-09-10 21:01:28 -07:00
Raja Subramanian
eee2001a31 Set publisher codec preferences after setting remote description (#3913)
* Set publisher codec preferences after setting remote description

Munging SDP prior to setting remote description was becoming problematic
in single peer connection mode. In that mode, it is possible that a
subscribe track m-section is added which sets the fmtp of H.265 to a
value that is different from when that client publishes. That gets
locked in as negotiated codecs when pion processes remote description.
Later when the client publishes H.265, the H.265 does only partial
match. So, if we munge offer and send it to SetRemoteDescription, the
H.265 does only a partial match due to different fmtp line and that gets
put at the end of the list. So, the answer does not enforce the
preferred codec. Changing pion to put partial match up front is more
risky given other projects. So, switch codec preferences to after remote
description is set and directly operate on transceiver which is a better
place to make these changes without munging SDP.

This fixes the case of
- firefox joins first
- Chrome preferring H.265 joining next. This causes a subscribe track
  m-section (for firefox's tracks) to be created first. So, the
  preferred codec munging was not working. Works after this change.

* clean up

* mage generate

* test

* clean up
2025-09-10 18:28:36 +05:30
Hamdan
fc995533e1 add incoming request id to request response message (#3912) 2025-09-10 08:58:12 +05:30
cnderrauber
76645fad5e Rpcs for ingress proxy WHIP (#3911)
See https://github.com/livekit/protocol/pull/1194
2025-09-09 22:49:42 +08:00
Raja Subramanian
991a4a4f53 Refactor subscribedTrack + mediaTrackSubscriptions. (#3908)
- Move downTrack instantiation to SubscribedTrack as it should own that
  DownTrack. Still more to do here as `DownTrack` is fetched from
  `SubscribedTrack` in a few places and used. Would like to avoid that,
  but doing this initially.
- Use an interface from sfu.Downtrack and replace a bunch of callbacks.
  SubscribedTrack is the implementation for DownTrackListener.
2025-09-08 18:20:19 +05:30
Raja Subramanian
e16b3ba95a Use gzip reader pool (#3903)
Borrowing from @paulwe's change for internal proto
2025-09-07 13:50:22 +05:30
Paul Wells
17c349210d update protocol for sip api change (#3902) 2025-09-06 12:00:22 -07:00
Raja Subramanian
2f43a575db Release candidate for v1.9.1 (#3899)
* Release candidate for v1.9.1

* trim
v1.9.1
2025-09-05 21:28:12 +05:30
Raja Subramanian
07c40cf349 Use RequestResponse to report protocol handling errors (#3895)
* Send errors as necessary

* WIP

* WIP

* WIP

* WIP

* deps

* static check

* fix test

* test

* test

* logs
2025-09-04 11:27:07 +05:30
Raja Subramanian
98352fd0f9 Prevent race in determining BWE type. (#3891) 2025-08-30 21:56:11 +05:30
Raja Subramanian
f7291fdaa8 Do not send both asb-send-time and twcc. (#3890)
* Do not send both asb-send-time and twcc.

In single peer connection mode, both extensions are set on the media
engine and both would be negotiated. Unfortunately, pion/webrtc does
not yet support RTPSender.SetParameters() which would allow setting
specific header extensions for the sender. So, check for TWCC enabled
and use it. If not, do abs-send-time if that is enabled.

* check BWE type

* comment
2025-08-30 19:22:14 +05:30
Raja Subramanian
21b42fa6d9 Do not advertise NACK for RED. (#3889)
Set the transceiver codecs first in single peer connection mode and
then do audio specific config so that NACK is removed for RED.
2025-08-30 17:34:44 +05:30
Raja Subramanian
6633bf9372 Use departure timeout from room preset. (#3888)
Not sure why only that was applying from req which is effectively a
no-op as the clone is a replica of the req. Guess, it was a typo/miss.
Change it to use room preset config value.
2025-08-29 22:22:32 +05:30
Raja Subramanian
38f7906ecb Handle migration better in single peer connection case. (#3886)
* Handle migration better in single peer connection case.

Have to avoid creating a sender for publish tracks.
Otherwise, the sender messes up the answer SDP because
it forced to inactive and that gets used by type match when setting
remote description offer.

Create sender only for m-lines which was used to send.

* remove unnecessary RemoveTrack
2025-08-29 18:18:32 +05:30
cnderrauber
5026de2bea handle frame number wrap back in svc (#3885)
* handle frame number wrap back in svc

* Add Slack Notifier

* check nil dd ext

* log format
2025-08-29 17:11:49 +08:00
Raja Subramanian
091e3c13a1 Revert to using answer for migration case. (#3884)
Was breaking migration in cases where there was inactive transceivers
because of direction check.

This change will break single peer connection case, but can look at that
one later.
2025-08-29 12:58:42 +05:30
Paul Wells
2aeadf14dc init ua parser once (#3883) 2025-08-28 05:20:25 -07:00
Raja Subramanian
998a9f9404 Switch known rids from 012 -> 210, used by OBS. (#3882)
* Switch known rids from 012 -> 210, used by OBS.

* static check
2025-08-28 14:47:57 +05:30
Raja Subramanian
890fd94249 Single peer connection mode (#3873)
* WIP

* check using protocol version

* revert

* clean up

* sdp cid argument

* WIP

* WIP

* test

* clean up

* clean up

* fixes

* clean up

* clean up

* clean up

* conditional checks

* tests for both dual and single peer connection

* test

* test

* test

* type check

* test

* todo

* munges

* combined config

* populate mid

* limit to receive only

* clean up

* clean up

* clean up

* older test

* clean up

* alternative audio codec

* dtx

* don't need to copy

* Anunay feedback

* use the available peer connection

* publisher check

* WIP

* WIP

* WIP

* no mid

* media sections requirement

* mage generate

* WIP

* WIP

* set data channel receive size for test

* handle early media better

* WIP

* do not do ICERestart if no subscriber

* WIP

* WIP

* WIP

* WIP

* WIP

* WIP

* start up subscriber RTCP worker

* WIP

* WIP

* clean up

* clean up

* flag to indicate use of single peer connection

* remove unused interface method

* clean up

* clean up

* Jie feedback #1

* deps

* do not access subscriber in one shot mode

* more places for one shot mode

* more one shot fixes

* deps

* deps

* test
2025-08-28 12:16:18 +05:30
David Zhao
bfe98eaa09 fix: ensure the participant kind is set on refresh tokens (#3881) 2025-08-26 10:25:25 -07:00
Paul Wells
8d270e2a0f chunk room updates (#3880)
* chunk room updates

* move to config

* typo

* default
2025-08-26 09:16:00 -07:00
cnderrauber
b4e146c5cb update mediatransport util for ice port 3478 (#3877) 2025-08-26 10:35:10 +08:00
Benjamin Pracht
dc3a775350 Fix timeout handing in StopEgress (#3876) 2025-08-25 10:34:26 -07:00
Raja Subramanian
d62336e1a6 Remove unnecessary check (#3870) 2025-08-20 09:24:13 +05:30
renovate[bot]
c58e5d23c5 Update golang Docker tag to v1.25 (#3864)
Generated by renovateBot

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-17 20:49:02 -07:00
renovate[bot]
98d577eed9 Update module github.com/livekit/protocol to v1.40.0 (#3865)
Generated by renovateBot

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-17 20:41:35 -07:00
renovate[bot]
afbf541ee2 Update pion deps (#3863)
Generated by renovateBot

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-17 20:34:44 -07:00
cnderrauber
b660c3b582 Extract video size from media stream (#3856)
* Extract video size from media stream

* fix test
2025-08-18 09:06:57 +08:00
Raja Subramanian
456b870936 Fix missed unlock (#3861)
* Fix missed unlock

* select alternative codec if no codec specified
2025-08-17 13:08:45 +05:30
Raja Subramanian
d500806eed Handle no codecs in track info. (#3859)
* Handle no codecs in track info.

Not sure how it happens, but seeing a panic caused by no codecs in track
info. Avoiding that and logging information when it happens.

* log request
2025-08-16 00:18:38 +05:30
Raja Subramanian
11b240d67d Log track settings more. (#3853) 2025-08-14 20:26:15 +05:30
Raja Subramanian
1aa0f96374 Log signal messages on media node. (#3852) 2025-08-14 18:12:17 +05:30
Raja Subramanian
b182d07bac Log signal messages as debug. (#3851) 2025-08-14 16:17:45 +05:30
Raja Subramanian
a370bb2054 Support G.711 A-law and U-law (#3849)
* More codecs

* clean up

* clean up

* add to unprocessed for nil mime type

* enhance tests to check for audio codec preferences also
2025-08-13 14:49:07 +05:30
Raja Subramanian
fa5f4ef33c Populate SDP cid in track info when available. (#3845)
* Populate SDP cid in track info when available.

- Adding SDP cid to TrackInfo. Browsers like FF uses a different stream
  id for AddTrack and actual SDP offer. So, have to look up using both
  on server side. To make it easier, store both (only if different) in
  TrackInfo.
- Use a codec in TrackInfo for audio also. There is some discussion
  around doing simulcast codec for audio so that something like PSTN can
  use G.711 without any transcoding. So, just keep it consistent between
  audio and video.
- Populate SDP cid when SDP offer is received. It could populate a
  pending track or an already published track if the new offer is for a
  back up codec where the primary codec is already published.
- Passed around parsed offer to more places to avoid parsing multiple
  times.
- Clean up MediaTrack interface a bit and remove unneeded methods.

* WIP

* WIP

* deps

* stream allocator mime aware

* clean up

* populate SDP cid before munging

* interface methods
2025-08-13 10:53:16 +05:30
Raja Subramanian
eed27885e5 Send participant_connection_aborted when participant session is closed (#3848)
* Send `participant_connection_aborted` when participant session is closed
without becoming `ACTIVE`.

There is one sticky case. If there is a migration and the migration
fails, this will send `participant_connection_aborted` even though the
participant may have connected properly on the previous node.

* depsg
2025-08-13 10:36:31 +05:30
renovate[bot]
61e59346ef Update go deps (#3439)
* Update go deps

Generated by renovateBot

* update go version

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: David Zhao <dz@livekit.io>
2025-08-11 15:07:42 -07:00
Raja Subramanian
1b2289137d Support video layer mode from client and make most of the code mime aware (#3843) 2025-08-09 21:26:11 +05:30
Raja Subramanian
f2da4444b4 Support per simulcast codec layers. (#3840)
* different layers

* deps
2025-08-08 19:53:38 +05:30
Raja Subramanian
f275f592ed handle SyncState in join request (#3839)
* handle SyncState in join request

* check for nil in function
2025-08-08 10:14:02 +05:30
Raja Subramanian
5d44cf6d57 Use wrapped join request to be able to support compressed and uncompressed. (#3838)
* Do no gzip join request

* wrapped join request

* deps
2025-08-07 22:37:08 +05:30
Raja Subramanian
5ca1626439 Support join request as proto + base64 encoded query param (#3836)
* Support join request as proto + base64 encoded query param

* joinPublish

* staticcheck

* deps

* tests

* gzip

* test

* deps

* clean up
2025-08-07 11:13:27 +05:30