Commit Graph
1362 Commits
Author SHA1 Message Date
cnderrauberandGitHub 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 SubramanianandGitHub 456b870936 Fix missed unlock (#3861)
* Fix missed unlock

* select alternative codec if no codec specified
2025-08-17 13:08:45 +05:30
Raja SubramanianandGitHub 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 SubramanianandGitHub 11b240d67d Log track settings more. (#3853) 2025-08-14 20:26:15 +05:30
Raja SubramanianandGitHub 1aa0f96374 Log signal messages on media node. (#3852) 2025-08-14 18:12:17 +05:30
Raja SubramanianandGitHub 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 SubramanianandGitHub 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 SubramanianandGitHub 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 SubramanianandGitHub f2da4444b4 Support per simulcast codec layers. (#3840)
* different layers

* deps
2025-08-08 19:53:38 +05:30
Raja SubramanianandGitHub 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 SubramanianandGitHub 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
Raja SubramanianandGitHub 7dea101286 Clean up missed v2 pieces (#3837)
* Clean up missed v2 pieces

* missed stuff
2025-08-06 22:30:50 +05:30
Raja SubramanianandGitHub 34a491309f Delete v2 signalling (#3835)
* Delete v2 signalling

* deps

* mage generate

* deelte unused file
2025-08-06 09:08:09 +05:30
Raja SubramanianandGitHub db4bc127e8 Get to the point of connecting publisher PC and using it for async signalling (#3822)
* starting signalling DC work

* WIP

* plumbing data channel

* add datachannel message sink file

* mage generate

* clean up
2025-08-01 18:50:28 +05:30
Raja SubramanianandGitHub e3155b146b Get to the point of establishing subscriber peer connection. (#3821)
Proper message id checks.

Some refactoring for common code in rtcv2service handlers.

Instantiate signalling based on synchronous local candidates flag, but
needs better defined code.
2025-07-25 14:49:04 +05:30
Raja SubramanianandGitHub a7ce138239 HTTP DELETE of participant session (#3819) 2025-07-24 23:02:45 +05:30
Raja SubramanianandGitHub 01de0e365f Do not send leave if nil (to older clients) (#3817) 2025-07-24 17:24:35 +05:30
Raja SubramanianandGitHub 10103449c5 Add country label to edge prom stats. (#3816)
* Add country label to edge prom stats.

* data channel country stats

* test

* pub/sub time country
2025-07-24 13:23:05 +05:30
Raja SubramanianandGitHub a75295fcd5 More v2 signalling changes (#3814)
* More v2 signalling changes

- Use wire message in relay signal
- Generate offerId for SDP for sync mode also
- more checks for SDP offer/answer state to see if there are cases of
  missed/duplicate messages

* clean up
2025-07-24 10:14:01 +05:30
Raja SubramanianandGitHub b20db94dc9 Validation end point for v2 signalling. (#3811)
* WIP

* stricter check

* WIP

* WIP

* clean up
2025-07-23 11:59:30 +05:30
Raja SubramanianandGitHub fffc2ac090 Use signalling utils from protocol (#3807)
* Use signalling utils from protocol

* staticcheck
2025-07-21 18:15:06 +05:30
Raja SubramanianandGitHub f5fc82d344 Filling out messages unlikely to change in v2. (#3806)
* Filling out messages unlikely to change in v2.

* deps

* remove defensive nil checks
2025-07-21 12:33:52 +05:30
Raja SubramanianandGitHub 1c99b9ad5f Split signal segmenter and reassembler. (#3805)
* Split signal segmenter and reassembler.

As reassembler may need to run a goroutine for pruning, splitting it up
so that we do not have unnecessary goroutines. Keeping the UT unified
though.

Also, for now, trying to see if `Prune` can be called from external
place to avoid creating a goroutine and have extra state/functions to
close the reassembler and clean up goroutine etc. May still have to do
goroutine, but have not created one for now.

* fix: do not increase packetId for each fragment of a packet
2025-07-21 11:10:20 +05:30
Raja SubramanianandGitHub 0a1bfd3092 Signal handling interfaces and participant specific HTTP PATCH. (#3804)
* HTTP PATCH on participant sid

* rename

* signal handler

* new files

* clean up

* clean up reassembly

* handle messages on server side

* deps

* staticcheck

* clean up
2025-07-20 22:47:36 +05:30
Raja SubramanianandGitHub 7837c8e595 starting signaller interface (#3802)
* starting signaller interface

* WIP

* WIP

* WIP

* typo

* connect response check

* WIP

* clean up

* move signal handling to participant fully

* service methods

* type assertions for interfaces
2025-07-20 13:48:40 +05:30
Raja SubramanianandGitHub 2a6a9b8a4a Grouping all signal messages into participant_signal. (#3801)
Currently, it is a bit of a mish-mash
- some compose the message fully and just call send()
- some give parameters and the message is composed in
  participant_signal.go

Was thinking about making an interface for signalling and have v1/v2
impls, but did not want to repeat composing messages if there are common
messages. And some of those function reach into `ParicipantImpl` object
and use information (simple example of p.IsReady()) which would become
more elaborate if the signaller is split out into its own struct.

Maybe, just need to make an interface for the sink and send to the
correct sink based on v1 /v2 signal transport.

But, for now, just grouping all signal messaages in one file
so that it is easier to manage later.
2025-07-18 15:24:52 +05:30
Raja SubramanianandGitHub 078c01fad3 Signal v2: envelope and fragments as wire message format. (#3800)
* Signal v2: envelope and fragments as wire message format.

Please see details in https://github.com/livekit/protocol/pull/1133

* log connect response
2025-07-18 15:24:32 +05:30
Raja SubramanianandGitHub b9a44c3fbf Signalling V2 protocol implementation start (#3794)
* WIP

* name

* refactor validate

* WIP

* WIP

* signal cache initial impl

* HandleConnect in room manager

* generate subscriber offer

* handle ConnectRequest as stand alone

* segmentation, reassembly

* clean up

* rearrange

* lock scope

* support metadata in connect request

* prom

* add SifTrailer to ConnectResponse

* prom for get offer error counter

* RtcInit counter

* Jie feedback

* signal client

* consolidate v1 and v2 into SignalClient

* clean up

* comment

* deps

* mage generate

* fix tests

* pass around roomName and participantIdentity

* mage generate
2025-07-18 00:01:21 +05:30
cnderrauberandGitHub 51bbe8c52b Set participant active when peerconnection connected (#3790)
Don't wait datachannel ready (sctp handshake)
2025-07-14 10:59:59 +08:00
Raja SubramanianandGitHub 40028dc33c Normalize known rids. (#3779)
Normalize the rids in SDP to known patterns.
Currently,
- LK protocol uses q;h;f
- Sean's OBS WHIP uses 0;1;2

As the ordering in SDP could be different, normalize to known order.

For RIDs not in the known set, just use it as is.
2025-07-06 13:32:21 +05:30
Raja SubramanianandGitHub 7678e08701 Set rids for all codecs. (#3772)
Back up codecs will not have pending track. The update needs to happen
on published track.

Have added a note about updating in published track. Can happen when we
have separate layers for primary and backup.
2025-07-01 11:27:03 +05:30
Raja SubramanianandGitHub 5d636acffb Limit taking rids from SDP only in WHIP path. (#3771)
Some clients are not sending q;h;f; ordering which affects layer/quality
mapping.
2025-07-01 08:20:20 +05:30
Raja SubramanianandGitHub 4d09e5b564 Log SDP rids to understand the mapping better. (#3770)
* Log SDP rids to understand the mapping better.

* return early when layer is invalid
2025-06-30 09:21:44 +05:30
Raja SubramanianandGitHub c69f1aae87 Revert "Temporary change: use pre-defined rids" (#3769)
* Revert "Temporary change: use pre-defined rids (#3767)"

This reverts commit d11da5f5fa.

* clean up

* add test and simplify

* clean up
2025-06-30 07:34:58 +05:30
Paul WellsandGitHub 8197438e5f bounds check layer index (#3768)
* bounds check layer index

* tidy
2025-06-29 18:37:26 -07:00
Raja SubramanianandGitHub d11da5f5fa Temporary change: use pre-defined rids (#3767)
To address a compatibility issue across relay. Will revert this once the
compatibility is addressed.
2025-06-29 20:00:21 +05:30
Raja SubramanianandGitHub 9fc4ddbe47 ClearAllReceivers interface is used to pause relay tracks. (#3761)
Restore interface.
2025-06-24 16:27:14 -07:00
Raja SubramanianandGitHub 1216113b35 Do not need to just clean up receivers. Remove that interface. (#3760)
The tracks are always closed.
2025-06-24 12:54:34 -07:00
Raja SubramanianandGitHub c481396f5b offer could be nil when migrating. (#3752) 2025-06-23 09:04:16 -07:00
cnderrauberandGitHub 8c2fc0bcd9 Fix svc encoding for chrome mobile on iOS (#3751)
The browser could send rtp packets of svc encoding without
DD extension while the sdp negotiates it, sfu detects extension
in rtp packet for this case.
2025-06-23 22:39:12 +08:00
03d3fcab43 Fix data packet ParticipantIdentity override logic in participant.go (#3735)
* Fix data packet ParticipantIdentity override logic in participant.go

https://github.com/livekit/agents/issues/2554

* Update pkg/rtc/participant.go

---------

Co-authored-by: David Zhao <david@davidzhao.com>
2025-06-19 22:58:31 -07:00
cnderrauberandGitHub e754a86068 return error when moving egree/agent participant (#3741) 2025-06-18 15:10:08 +08:00
Raja SubramanianandGitHub 5549ab5562 Revert clearing RIDs. (#3732) 2025-06-13 23:34:01 -07:00
Raja SubramanianandGitHub ae9673130f Clear rids if not present in SDP. (#3731) 2025-06-13 21:02:01 -07:00
cnderrauberandGitHub 9ce737db31 Add log for dropping out of order reliable message (#3728) 2025-06-13 22:08:56 +08:00
Raja SubramanianandGitHub 670f927ff6 Set and use rid/spatial layer in TrackInfo. (#3724)
* Set and use rid/spatial layer in TrackInfo.

* test
2025-06-12 23:22:11 -07:00
Raja SubramanianandGitHub a9e2911645 Add Id to SDP signalling messages. (#3722)
* Add Id to SDP signalling messages.

Allows matching up offer/answer.
For now, the subscriber answer just logs if there is a mismatch.

* correct variable name

* test

* fixing rid

* revert

* clean up
2025-06-12 14:39:25 -07:00
Raja SubramanianandGitHub 4ec828ce00 Fix bug with SDP rid, clear only overflow. (#3723) 2025-06-12 14:04:13 -07:00
Raja SubramanianandGitHub 8f6c3a9b4e Clear rids from default for layers not published. (#3721) 2025-06-12 08:59:16 -07:00
Raja SubramanianandGitHub ce07740e11 Add simulcast support for WHIP. (#3719)
* Add simulcast support for WHIP.

- General change to have rids be anything.
- One issue is rid ordering not matching quality ordering, will need
  some dynamic layer quality determination for that.

* clean up

* deps

* test
2025-06-11 19:40:38 -07:00