Signaling Server recommendations

Hello, I just upgraded to 19 RC 3 which contains talk 9.0.0-rc.1. On administration/talk I can add external signaling servers and it is recommended to use one if there are more than 4 participants. Is this still a requirement? From the announcement I expected this to be obsolete.

Marketing-speak is Talk 9 can handle 5 to 10 video conference participants.
If this is the discrepancy you are talking about, then it’s just because the docs haven’t been updated.

If you need more than 10 people, you’ll need to install - now open-sourced! - signaling server

2 Likes

Hmm I tried a lot but still have issues to make it work with my testcloud.
Is there a good howto anywhere?
It is a little bit challenging to set this up (signaling + janus + nats + coturn + proxy + firewall).
My signaling is running but nextcloud talk has issues, even when everything is green in the settings.

signal2

Maybe this one: https://morph027.gitlab.io/blog/nextcloud-spreed-signaling/

1 Like

I have the same issue. Signaling server was compiled and configured according to https://github.com/strukturag/nextcloud-spreed-signaling readme). It starts without problems, runs on its own host, is configured with secure websockets.

curl -i https://[my-signaling-server]:8443/api/v1/welcome
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Server: nextcloud-spreed-signaling/8d9c9cc1cd9aa1b18b1cbf8c0d7e8a8b6fbe9738
Date: Fri, 29 May 2020 17:31:23 GMT
Content-Length: 94

{“nextcloud-spreed-signaling”:“Welcome”,“version”:“8d9c9cc1cd9aa1b18b1cbf8c0d7e8a8b6fbe9738”}

Nextcloud configuration: wss://[my-signaling-server]:8443
But the communication with Nextcloud 18 fails. When I start the Talk app, the JS console logs the following errors:

talk.js?v=c3a127c1-3:116 WebSocket connection to 'wss://[my-signaling-server]:8443/spreed' failed: Unknown reason
h.Standalone.connect @ talk.js?v=c3a127c1-3:116
(anonymous) @ talk.js?v=c3a127c1-3:116
talk.js?v=c3a127c1-3:116 Error Event {isTrusted: true, type: "error", target: WebSocket, currentTarget: WebSocket, eventPhase: 2, …}
(anonymous) @ talk.js?v=c3a127c1-3:116
error (async)
h.Standalone.connect @ talk.js?v=c3a127c1-3:116
(anonymous) @ talk.js?v=c3a127c1-3:116
setTimeout (async)
h.Standalone.reconnect @ talk.js?v=c3a127c1-3:116
(anonymous) @ talk.js?v=c3a127c1-3:116
error (async)
h.Standalone.connect @ talk.js?v=c3a127c1-3:116
v @ talk.js?v=c3a127c1-3:116
createConnection @ talk.js?v=c3a127c1-3:116
(anonymous) @ talk.js?v=c3a127c1-3:239
Promise.then (async)
(anonymous) @ talk.js?v=c3a127c1-3:239
(anonymous) @ talk.js?v=c3a127c1-3:239
c @ talk.js?v=c3a127c1-3:583
(anonymous) @ talk.js?v=c3a127c1-3:583
forEach.e.<computed> @ talk.js?v=c3a127c1-3:583
oe @ talk.js?v=c3a127c1-3:219
a @ talk.js?v=c3a127c1-3:219
(anonymous) @ talk.js?v=c3a127c1-3:219
(anonymous) @ talk.js?v=c3a127c1-3:219
he @ talk.js?v=c3a127c1-3:239
pe @ talk.js?v=c3a127c1-3:239
beforeMount @ talk.js?v=c3a127c1-3:1626
He @ talk.js?v=c3a127c1-3:27
Kt @ talk.js?v=c3a127c1-3:27
e @ talk.js?v=c3a127c1-3:27
Mn.$mount @ talk.js?v=c3a127c1-3:27
init @ talk.js?v=c3a127c1-3:27
(anonymous) @ talk.js?v=c3a127c1-3:27
l @ talk.js?v=c3a127c1-3:27
(anonymous) @ talk.js?v=c3a127c1-3:27
e._update @ talk.js?v=c3a127c1-3:27
r @ talk.js?v=c3a127c1-3:27
dn.get @ talk.js?v=c3a127c1-3:27
dn @ talk.js?v=c3a127c1-3:27
e @ talk.js?v=c3a127c1-3:27
Mn.$mount @ talk.js?v=c3a127c1-3:27
e._init @ talk.js?v=c3a127c1-3:27
Mn @ talk.js?v=c3a127c1-3:27
(anonymous) @ talk.js?v=c3a127c1-3:1650
n @ talk.js?v=c3a127c1-3:1
(anonymous) @ talk.js?v=c3a127c1-3:1
(anonymous) @ talk.js?v=c3a127c1-3:1
Show 11 more frames
talk.js?v=c3a127c1-3:116 Reconnect in 1955.4251047645466

signaling-server doesn’t log, just listens to [my-signaling-server:8443]

Is there any additional documentation how to configure nginx, Nextcloud and this signaling server?

Nextcloud 18.0.4
nginx 1.14.2
janus 0.10.0
nats 2.1.7

Guys,

I am very sorry but here are my 2 cents about Talk in NextCloud.
If it is so complicated to make Talk working why not to use other ready services for Collaboration and just make integration with NextCloud.

I am not a programmer but very much interested to integrate https://linkchat.io to integrate with NextCloud. I contacted owner and he told that it can b easily done with WebHooks

Is there anybody who can help or at least interested to do the same?

PS. I am using NextCloud for many years in my projects.

It isn’t.
Talk works fine for one to one video communication.
If your version is up to date, it should (allegedly) do 5 to 10 participant video conference a breeze.
If you want to accommodate people from behind NAT/Firewall - install a STUN/TURN server.

And that’s already done

Nextcloud 19 will have another option - the high performance backend from Struktur

Here is the point - video conferencing with 10+ people is complicated.
It primarily revolves around feeding synced video/audio streams to each participant.
If your system uses nothing but WebRTC, you - as a participant - must send your webcam stream to (N-1) participants and receive N of them. In other words, doubling the number of participants quadruples the bandwidth need. Add to that video compression, NAT traversing, stream encryption, etc. - it quickly becomes too much for the client…

Hence, there will never be a install it and forget it video conference app for all use cases.
Unless you have a contract with Nextcloud and ask them to do it for you…

Over time there might be docker images will all the components - GO, NATS, Janus, TURN, etc. - built-in.But setting it up and making it work for the end user like Zoom or Teams will take work…

Thanks.
Lets see, Nextcloud 19 release date is soon :slight_smile: It is something to test for me.

And please share your experience when you do.
I’d be surprised if it does 10, but even 6-7-8 would be huge improvement over original…

I am also skeptical because Media Server is needed more than a Signalling one to increase amount of people in the room. Especially for mobile users.
It can be traditional media server with transcoding or SFU.

BigBlueButton is too heavy for the integration with NextCloud. Something more simple is needed, jitsi or Linkchat are more interesting, at least in my opinion.

I managed to connect to the standalone signaling server from my browser. I had to adjust the nextcloud signaling configuration to: wss://[my-nextcloud-server]:8443/standalone-signaling and adjust the nginx configuration according to https://docs.nginx.com/nginx/admin-guide/security-controls/securing-http-traffic-upstream/

Now clients can invite each other, but a video/audio connection is not yet established, unfortunately… debugging further…

It works - except that it doesn’t work. :thinking: If I start a call from the desktop or iOS app, both parties are “waiting for others to join…”, or “waiting for to join call…” and the call is not established. During that phase, I see a lot of 400 BAD_REQUEST in nginx access log, i.e. “GET /ocs/v2.php/apps/spreed/api/v1/signaling/74k8hk5g HTTP/2.0” 400 107 “-” “Mozilla/5.0 (iOS) Nextcloud-Talk v9.0.0”. WTF?
I don’t see client connections in the nats server. Should I? This seems suspicious to me - hmmm. Might this be related to the nats server? There is not much information about nats in https://github.com/strukturag/nextcloud-spreed-signaling … still trying to understand the big picture of the HPB. Any help is welcome.
It looks like the other party is not getting the information that this party has joined the call and vice versa.

Do you also use a Janus gateway? I had some problems at first until I opened the UDP ports used by it.

I’m using janus, but I just configured the turn_rest_api_key. I’ve switched to setting up turn_server, _port, _type … but it didn’t help so far.

I didn’t find the proper setup yet. It is more like try-and-error at the moment, as there aren’t complete tutorials, unfortunately.

Hey there. I finally got i t to work. I will make some tutorial in the near future. For now, i’ll tell you what i did.
In my set up a have 2 vmware vms. One for nextcloud and the other for signaling. Both are running ubuntu 18.04. Initially i base my configurations in tow tutorials:

I did not use caddy nor the .deb packages for janus. I compiled everything by hand.
I struggle a bit with libnice. But cheking out the the branch latest-release did the trick. Then i ran:

./autogen.sh
./configure --prefix=/usr
make && sudo make install

Once a i had everythin in place, i hardcoded the internal ips for the signaling server and nextcloud in each host file (nextcloud and signaling):

10.1.1.1  nextcloud.example.com
10.1.1.2  signaling.example.com

I configured the RTP port range in janus (20000-40000), the min and max ports for coturn (49152-65535), and opened the folowing ports in my firewall (doin DNAT):

  • Janus: UDP: 20000-40000
  • coturn:
    • UDP 3478, 49152-65535
    • TCP 3478
    • SCTP: 3478
  • Signaling: TCP 443 (through nginx).

What i did not:

  • Configured the external ip in coturn nor janus. That’s only for 1:1 nat.
  • I did not use the udp endpoint for turn in the signaling configuration.

Now everything works fine.

2 Likes

Perhaps you could post a link to your tutorial here so google can easily find it. Thanks and looking forward to it.

1 Like

that would be really great . thanks

The problem with those nginx 400 errors (see above) was a missing trailing slash in my proxy_pass configuration. Aaaahrrg, my fault.
The connection was established successfully after I’ve removed and re-installed the Nextcloud Talk app! I don’t know why but it solved the issue. Existing conversations in the Talk app didn’t establish connections, both sides were just waiting for each other to connect… Strange, but true.

I’ve written some notes here: Nextcloud Talk Signaling

1 Like

There is a tutorial for Debian to be found here:


It’s in German, but pretty straight forward.
2 Likes

Hello,
Thanks to all for your good job.
I have try this tutorial : https://morph027.gitlab.io/blog/nextcloud-spreed-signaling/
and this one : https://nichteinschalten.de/signalisierungsserver-fuer-nextcloud-aufsetzen-how-to/
In the signaling configuration on nextcloud it seem to be ok, I have no message, contrary to Pisoko.
The logs are ok.
curl -i http://127.0.0.1:8080/api/v1/welcome
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Server: nextcloud-spreed-signaling/9206a56113064b8e44b0de12d5128f8e88617679
Date: Sun, 15 Nov 2020 16:52:33 GMT
Content-Length: 94

{“nextcloud-spreed-signaling”:“Welcome”,“version”:“9206a56113064b8e44b0de12d5128f8e88617679”}

But when I launch the test client :
/etc/nextcloud-spreed-signaling# ./bin/client -addr localhost:8080
2020-11-13 14:29:42.744255 I | Using a maximum of 4 CPUs
2020-11-13 14:29:42.746439 I | Backend server running on http://[IP]:33249
2020-11-13 14:29:42.747624 I | Connecting to [ws://localhost:8080/spreed]
2020-11-13 14:29:42.748099 I | Starting 100 clients
2020-11-13 14:29:42.962092 I | Clients created
2020-11-13 14:29:52.753822 I | Unsupported message type: {Id: Type:error Error:context deadline exceeded Hello: Bye: Room: Message: Control: Event:}
2020-11-13 14:29:52.755354 I | Unsupported message type: {Id: Type:error Error:context deadline exceeded Hello: Bye: Room: Message: Control: Event:}
2020-11-13 14:29:52.758737 I | Unsupported message type: {Id: Type:error Error:context deadline exceeded Hello: Bye: Room: Message: Control: Event:}
a lot of time and after :
2020-11-13 14:29:52.929880 I | Unsupported message type: {Id: Type:error Error:Post “http://[IP]:33249/auth”: dial tcp [IP]:33249: i/o timeout Hello: Bye: Room: Message: Control: Event:}
2020-11-13 14:29:55.557264 I | Received bye: &{Reason:hello_timeout}
2020-11-13 14:29:55.558455 I | Received bye: &{Reason:hello_timeout}
2020-11-13 14:29:55.559967 I | Received bye: &{Reason:hello_timeout}

When I go on http://[IP]:33249, I have a 404 error.

It is the same with the 2 tutorial and on this computer and in a VM.
With nextcloud 19 up to date.

Do you have any idea ?
It is working ?
Thanks in advance
Have a good day.