Spreed: Unable to establish audio+video connection (black screens)

Created on 10 Jul 2018  ·  13Comments  ·  Source: nextcloud/spreed

(cross posted from https://help.nextcloud.com/t/nextcloud-talk-black-screens-stun-turn-setup-and-other-failures/33868 )

Steps to reproduce

  1. Install NextCloud 13
  2. Install NextCloud Talk 3.2.2 in Apps page of admin
  3. Install coturn and configure (see config below)
  4. Configure Nextcloud Talk to use installed coturn (see details below)
  5. Create two Nextcloud users
  6. Start a conversation between these two users
  7. Have both users behind a local network/router, such that they have local network IPs, and not Internet-public IPs
  8. Join Call with both users using any devices desired

Expected behaviour

Users should be able to establish a Nextcloud Talk audio-video call using a Nextcloud server thus configured.

Actual behaviour

Users can see their own selves (local mirror camera), but can only see black screens for the chat partner, and no audio is heard.

Browser

Microphone available: yes

Camera available: yes

Operating system: Linux, OSX and Android (all tried)

Browser name: Firefox and Chromium tried, plus Android client

Browser version: Chromium 60.0.3108.0, Firefox 43.0.4, Android client 2.0.1

Browser log

No console errors whatsoever. In the network tab, no connections to the STUN/TURN server (which has its own subdomain), only connections to the Nextcloud server.

Spreed app

Spreed app version: Nextcloud Talk 3.2.2

Custom TURN server configured: yes

Custom STUN server configured: yes

Server configuration

Operating system: Gentoo Linux

Web server: Nginx

Database: PostgreSQL

PHP version: 5.6.36

Nextcloud Version: 13.0.0

List of activated apps:

All default ones, plus Nextcloud Talk

Nextcloud configuration:

    $CONFIG = array (
      'trusted_domains' => 
      array (
        0 => 'cloud.domainredacted.com',
      ),
      'dbtype' => 'pgsql',
      'dbhost' => 'localhost',
      'dbname' => 'nextcloud',
      'dbuser' => 'nextcloud',
      'log_type' => 'file',
      'logfile' => '/var/log/nextcloud.log',
      'mail_domain' => 'cloud.domainredacted.com',
      'updatechecker' => false,
      'instanceid' => 'redacted',
      'theme' => '',
      'passwordsalt' => 'redacted',
      'secret' => 'redacted',
      'datadirectory' => '/var/www/cloud.domainredacted.com/htdocs/nextcloud/data',
      'overwrite.cli.url' => 'http://cloud.domainredacted.com',
      'version' => '13.0.0.14',
      'installed' => true,
      'mail_from_address' => 'noreply',
      'mail_smtpmode' => 'php',
      'mail_smtpauthtype' => 'LOGIN',
      'loglevel' => 2,
      'maintenance' => false,
    );

In the Nextcloud config, under the Talk section (left side menu entry), I put

STUN servers: turn.domainredacted.com:3478
TURN server: turn.domainredacted.com:3478
with a shared secret that matches what was in the turnserver config
I have tried both "UDP and TCP" and "TCP only"
I have left Signalling Server empty.

/etc/turnserver.conf

listening-port=3478
listening-ip=999.999.999.999  # IP redacted
relay-ip=999.999.999.999  # IP redacted
fingerprint
lt-cred-mech
use-auth-secret
static-auth-secret=secretredacted
realm=turn.domainredacted.com  # not the same subdomain used for Nextcloud
total-quota=100
bps-capacity=0
no-udp  # I have tried with and without this
stale-nonce=600
cert=/etc/letsencrypt/turn.domainredacted.com/fullchain.pem
pkey=/etc/letsencrypt/turn.domainredacted.com/privkey.pem
cipher-list="ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5"
log-file=/var/log/turnserver.log
simple-log
no-loopback-peers
no-multicast-peers

Server log (data/nextcloud.log)

Ask me

More details

I have tried for days to get Nextcloud Talk working, but have not succeeded. Other WebRTC services such as appear.in and meet.jit.si work . test.webrtc.org on one device (laptop) shows all checkmarks except for the Reflexive Connectivity, which shows a warning. I have tried with NC Talk for Android as well as Chrome and Firefox, both under Linux and OSX. The devices attempting connections are always behind a home router.

I see no lines describing attempted connections in turnserver.log . I see no Network requests for the turn server in the Network tab of the web developer tools. All I get on either side are black screens, with only the local (mirror) camera showing anything, never the other side.

I am able to control the OpenWRT on one side, if any ports need to be forwarded or anything.

I have been at this for days, and am close to giving up. Assistance appreciated.

bug WebRTC 🚡

All 13 comments

I have read https://github.com/nextcloud/spreed/issues/681 . I do not have https:// prefixes in the Nextcloud Talk configuration.

You have stun and turn both configured to turn.domain....

@nickvergessen Should that not be the case? I thought coturn was both a TURN server and a STUN server, listening on the very same port for both services.

More data: If I change the Nextcloud Talk config to have garbage (a non-existent domain) in the TURN server field, the behaviour is still the same (black screens). So, it's like that field is either not used at all, or it is not using the provided TURN server config at all. Or who knows what.

I have the same problem. We just tried to have our monthly conference call (still worked two months ago, but on a version lower than 3.2.2; unfortunately I updated in between). The actual behaviour described above is exactly what I experienced. This was true with 3.2.2 but is still true even with the latest 3.2.4.
No settings have been changed from when it was all working. Real bug, not a user error re settings

It never occurred to me that there could be a bug in spreed or NCTalk. Thanks for providing that data point!

Is there an error in the browser console (press F12)?

Otherwise feel free to send me a test account to <my github name>@nextcloud.com

I can confirm that the latest Talk (3.2.4) version does work (in combination with coturn on Ubuntu-server) for clients behind our firewall. It seems it can not be a general Talk problem.
Both Firefox 61 and Chrome 67 work on Windows and Ubuntu. Coturn sessions are started as expected an can be followed from the Coturn web frontend.

This is very strange indeed. Now I cannot access my cam and mic on three diff. browsers either. However I can still do screnshare and still get the same results as described above, black screen for the other users.

I am getting several errors in the console, not sure what they all relate to. Apologies for the German. Is a TURN server now a must-have to use Talk?

Here are three console reports:

ICE failed, add a TURN server and see about:webrtc for more details

CONNECTED simplewebrtc.js:18020:4 RTCIceServer.url is deprecated! Use urls instead. c22df77e-1127-4962-b453-3e461f01e367:300 onaddstream is deprecated! Use peerConnection.ontrack instead.

Unbekannte Pseudoklasse oder Pseudoelement '-webkit-scrollbar'. Regelsatz wegen ungültigem Selektor ignoriert. 89a5-9135-server.css:1:2040
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-scrollbar-track-piece'. Regelsatz wegen ungültigem Selektor ignoriert. 89a5-9135-server.css:1:2081
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-scrollbar-thumb'. Regelsatz wegen ungültigem Selektor ignoriert. 89a5-9135-server.css:1:2142
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-search-cancel-button'. Regelsatz wegen ungültigem Selektor ignoriert. 89a5-9135-server.css:1:3448
Fehler beim Verarbeiten des Wertes für 'position'. Deklaration ignoriert. 89a5-9135-server.css:1:3543
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. 89a5-9135-server.css:1:3739
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. 89a5-9135-server.css:1:5947
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. 89a5-9135-server.css:1:6230
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. 89a5-9135-server.css:1:7063
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. 89a5-9135-server.css:1:7993
Unbekannte Eigenschaft 'list-style-indent'. Deklaration ignoriert. 89a5-9135-server.css:1:8100
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-progress-value'. Regelsatz wegen ungültigem Selektor ignoriert. 89a5-9135-server.css:1:13735
Unerkannte at-Regel oder Fehler beim Verarbeiten der at-Regel '@-ms-viewport'. 89a5-9135-server.css:1:24703
Unbekannte Eigenschaft 'appearance'. Deklaration ignoriert. 89a5-9135-server.css:1:30943
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. 89a5-9135-server.css:1:31577
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-progress-value'. Regelsatz wegen ungültigem Selektor ignoriert. 89a5-9135-server.css:1:41825
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-progress-bar'. Regelsatz wegen ungültigem Selektor ignoriert. 89a5-9135-server.css:1:41877
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-progress-value'. Regelsatz wegen ungültigem Selektor ignoriert. 89a5-9135-server.css:1:42029
Name einer Medienfunktion erwartet, aber '-webkit-max-device-pixel-ratio' gefunden. 89a5-9135-server.css:1:62588
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. 89a5-9135-server.css:1:63876
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. 89a5-9135-server.css:1:92970
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. 89a5-9135-server.css:1:93629
Unbekannte Eigenschaft 'line-break'. Deklaration ignoriert. 89a5-9135-server.css:1:98593
Unbekannte Eigenschaft 'zoom'. Deklaration ignoriert. select2.css:9:10
Deklaration erwartet, aber '*' gefunden. Übersprungen bis zur nächsten Deklaration select2.css:10:5
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. select2.css:49:27
Fehler beim Verarbeiten des Wertes für 'background-image'. Deklaration ignoriert. select2.css:53:23
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. select2.css:55:13
Fehler beim Verarbeiten des Wertes für 'background-image'. Deklaration ignoriert. select2.css:65:23
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. select2.css:67:13
'none', URL oder Filterfunktion erwartet, aber 'alpha(' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. select2.css:128:13
Fehler beim Verarbeiten des Wertes für 'background-image'. Deklaration ignoriert. select2.css:193:23
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. select2.css:195:13
Fehler beim Verarbeiten des Wertes für 'background'. Deklaration ignoriert. select2.css:239:58
Fehler beim Verarbeiten des Wertes für 'background'. Deklaration ignoriert. select2.css:251:60
Fehler beim Verarbeiten des Wertes für 'background-image'. Deklaration ignoriert. select2.css:275:23
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. select2.css:277:13
Fehler beim Verarbeiten des Wertes für 'background-image'. Deklaration ignoriert. select2.css:287:23
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. select2.css:289:13
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. select2.css:350:27
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. select2.css:529:27
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. select2.css:532:13
Name einer Medienfunktion erwartet, aber '-webkit-min-device-pixel-ratio' gefunden. select2.css:633:25
'none', URL oder Filterfunktion erwartet, aber 'Alpha(' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. jquery-ui.css:49:9
'none', URL oder Filterfunktion erwartet, aber 'alpha(' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. jquery-ui.css:538:10
'none', URL oder Filterfunktion erwartet, aber 'Alpha(' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. jquery-ui.css:918:9
'none', URL oder Filterfunktion erwartet, aber 'Alpha(' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. jquery-ui.css:925:9
'none', URL oder Filterfunktion erwartet, aber 'Alpha(' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. jquery-ui.css:929:9
'none', URL oder Filterfunktion erwartet, aber 'Alpha(' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. jquery-ui.css:1177:10
'none', URL oder Filterfunktion erwartet, aber 'Alpha(' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. jquery-ui.css:1184:10
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. apporder.css:18:10
Unbekannte Eigenschaft '-moz-border-radius'. Deklaration ignoriert. apporder.css:29:21
Unbekannte Eigenschaft 'user-select'. Deklaration ignoriert. style.css:75:4496
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-full-screen'. Regelsatz wegen ungültigem Selektor ignoriert. style.css:75:4794
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. style.css:91:10
Fehler beim Verarbeiten des Wertes für 'display'. Deklaration ignoriert. 426a-9135-style.css:1:3082
Fehler beim Verarbeiten des Wertes für '-webkit-box-flex'. Deklaration ignoriert. 426a-9135-style.css:1:3362
Fehler beim Verarbeiten des Wertes für '-moz-box-flex'. Deklaration ignoriert. 426a-9135-style.css:1:3381
Fehler beim Verarbeiten des Wertes für 'box-shadow'. Deklaration ignoriert. 426a-9135-style.css:1:3899
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-full-screen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:9258
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-full-screen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:9317
Unbekannte Pseudoklasse oder Pseudoelement '-ms-fullscreen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:9498
Unbekannte Pseudoklasse oder Pseudoelement '-ms-fullscreen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:9552
Unbekannte Pseudoklasse oder Pseudoelement 'fullscreen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:9611
Unbekannte Pseudoklasse oder Pseudoelement 'fullscreen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:9661
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-full-screen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:9716
Unbekannte Pseudoklasse oder Pseudoelement '-ms-fullscreen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:9873
Unbekannte Pseudoklasse oder Pseudoelement 'fullscreen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:9948
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-full-screen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:10019
Unbekannte Pseudoklasse oder Pseudoelement '-ms-fullscreen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:10120
Unbekannte Pseudoklasse oder Pseudoelement 'fullscreen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:10167
Unbekannte Pseudoklasse oder Pseudoelement '-webkit-full-screen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:10210
Unbekannte Pseudoklasse oder Pseudoelement '-ms-fullscreen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:10337
Unbekannte Pseudoklasse oder Pseudoelement 'fullscreen'. Regelsatz wegen ungültigem Selektor ignoriert. 426a-9135-style.css:1:10397
Fehler beim Verarbeiten des Wertes für 'background'. Deklaration ignoriert. 426a-9135-comments.css:1:1905
Fehler beim Verarbeiten des Wertes für 'background'. Deklaration ignoriert. 426a-9135-comments.css:1:1983
'none', URL oder Filterfunktion erwartet, aber 'progid' gefunden. Fehler beim Verarbeiten des Wertes für 'filter'. Deklaration ignoriert. 426a-9135-comments.css:1:2133
Source-Map-Fehler: TypeError: NetworkError when attempting to fetch resource.
Ressourcen-Adresse: https://OUR-URL.nextcloud.TOPLEVELDOMAIN/core/vendor/core.js?v=320bc48f-8
Source-Map-Adresse: purify.min.js.map

@nickvergessen In my case, I have no console errors whatsoever.

Coturn sessions are started as expected an can be followed from the Coturn web frontend.

@brtptrs What web frontend? I don't see any documentation about Coturn having a frontend. I would love to see a log or anything of attempted connections.

More data: I installed coturn on a totally separate server, separate IP, separate domain. This time, under Ubuntu (first server is Gentoo). Kept nextcloud on original server. Can't even get black screens this time. Only local mirrror video is shown on each device.

I am an extremely experienced Linux user, software developer, server admin. If I can't get NC Talk going after days and days of effort, I apologize, but I can only conclude that NCT is not ready for prime time.

I am not ready to give up yet, though, so if anyone has any other ideas, I'd be happy to hear them.

I finally found some success! The latest things I did were twofold:

  1. Update the Talk app from 3.2.2 to 3.2.4.
  2. Fully close the Android app and restart it, instead of just closing the call/conversation and reopening it.

Otherwise, all the turn server and Nextcloud settings were in a sensible configuration that I had tried in the past.

I was able to get connections between computers, as well as a computer and Android. Even with two participants that were in two different home networks (without public IP addresses).

@Pistos Sorry for the late reply:

You have to set an admin user and then just call your turnserver via https://

From:
https://github.com/coturn/coturn/wiki/turnserver

HTTPS MANAGEMENT INTERFACE

The turnserver process provides an HTTPS Web access as statistics and basic management interface. The turnserver listens to incoming HTTPS admin connections on the same ports as the main TURN/STUN listener. The Web admin pages are basic and self-explanatory.

To make the HTTPS interface active, the database table admin_user must be populated with the admin user account(s). An admin user can be a superuser (if not assigned to a particular realm) or a restricted user (if assigned to a realm). The restricted admin users can perform only limited actions, within their corresponding realms.

Was this page helpful?
0 / 5 - 0 ratings