Juliusz Chroboczek
6b54f14dfe
Display correct maxBitrate in statistics.
2022-02-01 20:12:31 +01:00
Juliusz Chroboczek
e8fbfcb9ba
Avoid overflow in bitrate computation.
2022-01-25 20:11:28 +01:00
Juliusz Chroboczek
39976d6d0d
Protect webClient.actions with its own mutex.
...
(*webClient).action may be called with the group mutex taken,
and therefore cannot take the client mutex.
2021-12-11 01:33:47 +01:00
Juliusz Chroboczek
abed33d654
Fix missing line break in subgroups command.
2021-11-29 17:33:46 +01:00
Juliusz Chroboczek
6af729eeee
Reduce delay before sending NACK.
2021-11-27 23:14:42 +01:00
Juliusz Chroboczek
c7c3c9c6b0
Export group status in .status.json.
2021-10-30 19:12:06 +02:00
Juliusz Chroboczek
c64ec4ccd0
Update dependencies.
2021-10-30 18:54:24 +02:00
Juliusz Chroboczek
019f365981
Remove accessors for group description fields.
...
Consult the description directly.
2021-10-30 18:34:35 +02:00
Juliusz Chroboczek
869eb9b839
Move password checking into group.go.
...
It used to be delegated to clients.
2021-10-27 04:15:44 +02:00
Juliusz Chroboczek
09c5ba0d06
Protect against tracks without a stream.
2021-09-16 17:19:19 +02:00
Juliusz Chroboczek
e81ee4af5e
Remove userId and userName from rtpconn.
...
They're redundant with the client field.
2021-09-16 16:53:44 +02:00
Juliusz Chroboczek
f683675ab4
Use a dedicated error value for anonymous users.
2021-09-09 22:26:08 +02:00
Juliusz Chroboczek
6aa7a9394a
More tweaks to layer switching.
...
I'm not seeing any non-keyframe spatial sync frames, so simplify
the code by only switching spatial layers on keyframes.
2021-08-05 00:03:42 +02:00
Juliusz Chroboczek
9093339b62
Rework handling of buffered keyframes.
...
Instead of buffering the last keyframe, we merely keep track of its
seqno, and use the main cache for recovering. We also send the whole
sequence of packets rather than just the keyframe itself.
2021-08-04 02:58:24 +02:00
Juliusz Chroboczek
f4aa86a491
Switch spatial layers at the right point.
2021-08-03 23:21:44 +02:00
Juliusz Chroboczek
48a9b10ce8
Use spatial scalability when simulcast is not available.
...
If the client requested a low-resolution stream and there is none,
switch to SID=0.
2021-08-03 13:14:11 +02:00
Juliusz Chroboczek
4f7be19644
Implement pid and mark rewriting for VP9, fix VP9 sync bits.
...
The sync bits were incorrect. In addition, we need to set the
marker at the new end of the frame when doing spatial decimation.
2021-08-03 13:09:43 +02:00
Juliusz Chroboczek
56226a2934
Export the max requested rate in track statistics.
2021-08-03 03:28:36 +02:00
Juliusz Chroboczek
200c0dd68c
Refresh layer info after adjusting in down.Write.
...
Otherwise we might act on outdated info, which could cause a spurious
drop.
2021-08-03 03:15:08 +02:00
Juliusz Chroboczek
3d21a79880
Don't carry up tracks explicitly.
...
Left over from the old data structure.
2021-08-03 02:51:44 +02:00
Juliusz Chroboczek
51c31ab729
Improve error handling for negotiation failures.
...
Now that we constrain tracks in offers properly, there is no need
to manually check that the codecs have been matched correctly.
2021-08-02 20:00:23 +02:00
Juliusz Chroboczek
816b7a54df
Restrict negotiation of downstream codecs, allow multiple profiles.
...
We now restrict the allowable codecs in the downstream direction,
which leads to a clean failure instead of a silent track. We also
allow multiple profiles for a single codec.
2021-08-02 18:08:37 +02:00
Juliusz Chroboczek
dd4dbeaee5
Add spatial scalability support.
...
Only used as a last-resort fallback.
2021-08-01 13:57:14 +02:00
Juliusz Chroboczek
efb298f002
Use sendonly transceiver for down tracks, embed receiver in track.
2021-08-01 13:33:01 +02:00
Juliusz Chroboczek
3bdcb8af28
Fix typo in down layer selection.
2021-07-31 23:22:01 +02:00
Juliusz Chroboczek
b527c8757a
Add chathistory message.
2021-07-31 14:42:26 +02:00
Juliusz Chroboczek
97a5bf60ad
Send the locked user-friendly message in the group status.
2021-07-30 19:44:39 +02:00
Juliusz Chroboczek
3b98e123e0
Send a message of kind "kicked" instead of "error".
2021-07-30 19:38:02 +02:00
Juliusz Chroboczek
a5c97fd849
Add System permission.
...
This replaces the OverridePermissions method, and is communicated
to clients that can reliably and safely identify a system user.
2021-07-30 19:26:34 +02:00
Juliusz Chroboczek
a8dfc32f9e
Fix keyframe tests.
...
The keyframe detection has been moved into codecs.
2021-07-30 15:26:21 +02:00
Juliusz Chroboczek
89780b866b
Move packet parsing code into its own package.
2021-07-29 21:30:39 +02:00
Juliusz Chroboczek
6388f16e87
Fix typos in infinite action stream implementation.
...
This fixes issues introduced in commit 6ae79f.
2021-07-17 00:05:55 +02:00
Juliusz Chroboczek
52a26327d7
Implement group status.
...
We now inform clients of the status of a group (locked, etc.). Also
cleans up the handling of administrative messages, which solves the
issue of receiving "user" before "joined".
2021-07-16 19:51:54 +02:00
Juliusz Chroboczek
6ae79f21d6
Use unbounded buffer for track actions.
...
Without that, we might deadlock if the reader is blocked in read.
2021-07-16 03:03:45 +02:00
Juliusz Chroboczek
c540cad994
Move pushClientConnection into its own function.
2021-07-16 01:40:42 +02:00
Juliusz Chroboczek
053067548a
Ensure that replaced down tracks are closed even on failure.
...
Thanks to Ludovic Rateau.
2021-07-15 23:52:03 +02:00
Juliusz Chroboczek
9b8d868647
Fix a race between delUpConn and addLocal.
...
We could call addLocal after the remote was closed, which
would cause the local connection to remain forever.
Thanks to Ludovic Rateau.
2021-07-15 16:03:06 +02:00
Juliusz Chroboczek
3d2089f40f
Merge GetRTP and Nack into GetPacket.
...
The two function were always called together. This factors out
the NACKing logic into the track.
2021-07-14 14:22:22 +02:00
Juliusz Chroboczek
36d31f0db8
Maintain a reference to the connection associated to each track.
...
This avoids carrying an extra parameter in many places.
2021-07-14 14:05:23 +02:00
Juliusz Chroboczek
f3b73263c8
Fix handling of NACKed packets when dropping.
...
We were not rewriting in this case.
2021-05-17 20:06:08 +02:00
Juliusz Chroboczek
22585e9d10
Handle spatial scalability.
...
Maintain spatial layer information, and drop lower layers when
possible. Yields a 20% saving with VP9.
2021-05-17 18:17:43 +02:00
Juliusz Chroboczek
91fa693709
Display max layer in stats.
2021-05-17 13:51:29 +02:00
Juliusz Chroboczek
fd76abb61d
Send up actions synchronously.
2021-05-17 03:54:58 +02:00
Juliusz Chroboczek
c00a21995e
Move PLI rate-limiting into the reader loop.
2021-05-17 03:54:20 +02:00
Juliusz Chroboczek
d94e5583cd
Rewrite AV1 keyframe detection.
...
Metadata OBUs can appear between the sequence header and the first
frame header.
2021-05-16 14:51:09 +02:00
Juliusz Chroboczek
4435a30a53
Use sequence parameter sets for h.264 keyframe detection.
...
RFC 6184 Section 8.5.1 implies that the sender will send a
a sequence parameter set in response to PLI. Since a keyframe is
useless without parameters, use the SPS to detect keyframes.
2021-05-15 23:50:32 +02:00
Juliusz Chroboczek
3e00bb4293
AV1 support.
2021-05-15 19:54:07 +02:00
Juliusz Chroboczek
c0da658b9f
Send sender report more often.
...
Now that we start at 200kbps, we need to increase our rate faster.
2021-05-14 23:21:14 +02:00
Juliusz Chroboczek
2da8faa8cf
Implement per-stream requests.
2021-05-14 23:21:14 +02:00
Juliusz Chroboczek
515c4a5cd0
Rename pushConns to requestConns, move into Client interface.
...
Also allow selecting just a single connection.
2021-05-14 23:21:14 +02:00