Commit graph

52 commits

Author SHA1 Message Date
Joachim Bauch
c12addb2a8
Notify remote to stop publishing when last local subscriber is closed. 2024-11-11 10:26:42 +01:00
Joachim Bauch
e152b8dcda
Migrate to github.com/golang-jwt/jwt/v5 2024-11-05 09:59:14 +01:00
Joachim Bauch
813ea5217a
Improve log message if session was closed by proxy.
Follow-up to #852.
2024-11-04 15:22:11 +01:00
Joachim Bauch
a487afc909
Support passing codec parameters when creating publishers. 2024-11-04 13:35:03 +01:00
Joachim Bauch
46712ba589
Use object to store MCU settings. 2024-11-04 13:35:03 +01:00
Joachim Bauch
748467b5c7
Remove compatibility code for Go < 1.21.
Support for Go 1.20 was dropped in #737
(commit 88575abea2).
2024-08-26 09:56:30 +02:00
Joachim Bauch
c7cccc9287
Support reloading maximum stream / screen bandwidths. 2024-05-28 12:33:12 +02:00
Joachim Bauch
c6cbe88d0e
Pass contexts when creating / starting MCUs. 2024-05-21 09:29:23 +02:00
Joachim Bauch
7e7a6d5c09
Support bandwidth limits when selecting proxy to use. 2024-05-21 09:29:20 +02:00
Joachim Bauch
3ce963ee91
Re-create publisher with new endpoint if it already exists. 2024-05-21 09:29:19 +02:00
Joachim Bauch
24c1a09662
Add methods to unpublish remotely. 2024-05-21 09:29:18 +02:00
Joachim Bauch
56f5a72f61
Get list of remote streams from offer/answer SDP. 2024-05-21 09:29:17 +02:00
Joachim Bauch
63c42dd84c
First draft of remote subscriber streams. 2024-05-21 09:29:15 +02:00
Joachim Bauch
92cbc28065
Add basic tests for mcu proxy client. 2024-05-21 09:29:14 +02:00
Joachim Bauch
fdc43d12cd
Use new builtin "clear" to remove map entries. 2024-05-16 13:14:56 +02:00
Joachim Bauch
c58564c0e8
Log something if mcu publisher / subscriber was closed. 2024-05-16 09:44:47 +02:00
Joachim Bauch
8f4fc2db6d
Calculate proxy load based on maximum bandwidth.
Take maximum bandwidth of connected clients into account when calculating
load as screensharing requires more than regular audio/video.
2024-02-27 15:20:17 +01:00
Joachim Bauch
7d09c71ab9
Strongly type "StreamType". 2024-02-27 15:20:14 +01:00
Joachim Bauch
b1c78f6e9d
Use DNS monitor from static GRPC clients configuration. 2024-01-30 17:03:45 +01:00
Joachim Bauch
528a09e5da
Use DNS monitor from static proxy configuration. 2024-01-30 17:03:43 +01:00
Joachim Bauch
bd9e2aa29d
Don't log error if reading failed because a close message was sent before. 2023-12-21 13:23:14 +01:00
Joachim Bauch
8f2933071e
Move proxy configuration code to different files. 2023-12-21 11:50:12 +01:00
Joachim Bauch
e61845b086
Move common option list parsing code to own function. 2023-12-07 13:33:54 +01:00
Joachim Bauch
c134883138
Switch to atomic types from Go 1.19 2023-10-30 09:32:46 +01:00
Joachim Bauch
fd29f83454
Use "struct{}" channel if only used as signaling mechanism. 2023-06-15 11:30:28 +02:00
Joachim Bauch
20228b176f
Migrate to channel waiter helper class. 2023-02-22 08:34:16 +01:00
Joachim Bauch
8353cbbb0f
Migrate to closer helper class. 2023-02-22 08:34:15 +01:00
Joachim Bauch
42a8aab307
Log error responses when deleting proxy publishers / subscribers. 2022-08-30 16:02:07 +02:00
Joachim Bauch
9a868c6d91
Handle error responses when creating proxy publisher / subscriber. 2022-08-30 11:49:08 +02:00
Joachim Bauch
cdbc177179
Schedule reconnect asynchronously if ping could not be sent. 2022-08-30 11:46:45 +02:00
Joachim Bauch
40e1b208c0
etcd: Fix race in initialized event.
It could happen that the initialized event was triggered even though the
watch was not fully created yet.
2022-07-08 10:56:36 +02:00
Joachim Bauch
924fce6713
Stop using deprecated "jwt.StandardClaims". 2022-07-07 17:12:21 +02:00
Joachim Bauch
8a97fa7f5e
Update to Go module version of github.com/golang-jwt/jwt 2022-07-07 17:04:34 +02:00
Joachim Bauch
6f64ff901d
Create temporary connection to proxy used by remote publisher. 2022-06-30 11:35:30 +02:00
Joachim Bauch
a0d3af14e0
Add initial clustering support. 2022-06-30 11:35:28 +02:00
Joachim Bauch
134d22bfe7
Move common etcd code to own class. 2022-06-24 11:15:29 +02:00
Daniel Calviño Sánchez
e86baba54d Discard unneeded messages based on their "sid" parameter
If a message includes a "sid" parameter and it does not match the one
from the publisher or the subscriber the message is ignored. However, if
the message does not include a "sid" parameter it is processed just like
before for backwards compatibility.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2022-04-27 11:14:59 +02:00
Daniel Calviño Sánchez
3636e69dba Add specific ID for connections
A new ID is introduced for publishers and subscribers to be able to
identify different connections in the same session. While it was
possible to do that from the Janus handles this ID is meant to be shared
with the clients and set by the peer sending the offer, so it is set by
the client for publishers and by the signaling server for subscribers
(in which case the Janus handle is used).

This will make possible to know without any ambiguity if an offer/answer
belongs to an already existing connection or not. This can be used, for
example, to know if an offer represents an update or a new connection,
or to discard unneeded messages that might be sent in some corner cases
by the clients.

The ID name is "sid" for consistency with the property name used by the
internal signaling server of Talk.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2022-04-27 11:14:59 +02:00
Joachim Bauch
156a8a2086
Merge pull request #221 from danxuliu/fix-media-type-not-updated-after-publisher-renegotiations
Fix mediaType not updated after publisher renegotiations
2022-04-07 08:24:57 +02:00
Daniel Calviño Sánchez
b9d671ab2f Fix mediaType not updated after publisher renegotiations
The "mediaTypes" attribute is checked to know if a publisher needs to be
closed when the permissions are updated. However, that attribute was set
only when the publisher was initially created; due to this if a
publisher then used a renegotiation to add media not included in the
original offer the publisher would not be closed if the publishing
permission for that media was later revoked.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2022-04-07 02:50:57 +02:00
Joachim Bauch
81a52389aa
Stop using deprecated ioutil package. 2022-04-05 12:48:27 +02:00
Joachim Bauch
58b4beb3ba
Update etcd to v3.5.1
Requires at least Golang 1.14
2022-04-05 11:16:38 +02:00
Joachim Bauch
659730d371
Support DNS discovery for proxy server URLs.
If the hostname of a proxy server resolves to multiple IP addresses,
a connection is established to each of them.

Changes to the DNS are monitored regularly and proxy connections are
created or deleted as necessary.
2022-04-04 16:17:22 +02:00
Daniel Calviño Sánchez
020cbaf49d Send updated offers to subscribers after publisher renegotiations
When a publisher has a connection the publisher can update the
connection (for example, to add a video track to an audio only
connection) by sending an updated offer to Janus. Janus detects that,
adjusts the connection and then sends back an answer. Once the publisher
connection is updated Janus starts a renegotiation for the subscribers
and generates the offers to be sent to them.

The signaling server did not handle the event, so the offers were not
sent and the subscriber connections were not updated. Now the offers are
sent as needed, which makes possible for the renegotiation to be
completed by the clients.

In this case the "offer" message will also include an "update" parameter
so clients can differentiate between offers to create new connections or
update the existing one.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2022-02-25 07:47:17 +01:00
Joachim Bauch
707b125730
Check individual audio/video permissions on change.
If a client publishes audio/video and no longer has the video permission,
the whole publisher will be closed. Previously this was only checking
the generic "media" permission.
2021-11-08 12:08:14 +01:00
Joachim Bauch
42dc476033
Only log RTT of connections to proxy if larger than 500ms. 2021-11-03 14:56:25 +01:00
Joachim Bauch
e09022c78d
deps: Migrate to "github.com/golang-jwt/jwt".
The previous "gopkg.in/dgrijalva/jwt-go.v3" is no longer maintained.
2021-10-11 14:02:57 +02:00
Joachim Bauch
c01caa94e6
Add prometheus metrics. 2021-08-10 08:50:39 +02:00
Joachim Bauch
7bf6fa903b
Support continent mapping overrides.
This can be used for example to route all users on continent A to proxies
on continent B. Useful if no proxy exists on continent A and the global
selection chooses a non-ideal proxy.
2021-08-06 16:00:54 +02:00
Joachim Bauch
c8e4bfe007
Fix various issues found by golangci-lint. 2021-04-26 17:25:52 +02:00