Spreed app issue with setting "turnServerProtocols"

I had some time now trying to get the app running (spreed.me with dedicated server runs perfectly with own turn server), but there is at least one problem:

Error PHP Undefined index: turnServerProtocols at /var/www/owncloud/apps/spreed/templates/settings-admin.php#35 (and following lines, containing “turnServerProtocols”)

I defined and also tried to switch the “TURN server protocols” in admin panel, but after page reload it still shows the old value. There seems to be a problem to save the value to the database. I tried to find and define it manually in mysql tables, but wasn’t able to locate the setting.

When I start the app my camera picture is shown properly and I can switch video, sound and full screen. But I can’t invite someone the the call. When I start searching another user it just says “Searching…” but nothing shows up. I am the only user, but I would still expect the search ending with something like “no user found” or at least the “Searching…” to disappear. Also I can’t find a way to create public links/invite an external user.
The browser tab also seems to hang up. When I try to browse to another site inside nextcloud or even another website, It just starts to lead forever an nothing happens. Sometimes I can’t even kill the tab and need to kill the whole browser.

The dev panel of my browser also shows the following error:

Uncaught TypeError: avatarContainer.find(…).avatar is not a function
at child.hideVideo (app.js?v=ddf0bfc…:439)
at child.disableVideo (app.js?v=ddf0bfc…:446)
at HTMLButtonElement. (app.js?v=ddf0bfc…:172)
at HTMLButtonElement.dispatch (jquery.min.js?v=ddf0bfc…:3)
at HTMLButtonElement.r.handle (jquery.min.js?v=ddf0bfc…:3)

If voice or video is active the related icon completely disappears. This looks like it’s related to the error above. This was the reason I first didn’t find the way to disable video. Just moving the cursor over the icon location made the cursor icon change to show ,e, that there is actually a hidden button ;).

No one has an idea? If someone can tell me where and how this setting is actually saved, I can do that manually to hopefully resolve the issue.

Let’s see what happens :wink:

1 Like

I applied the changes from the related pull request and the turnServerProtocols errors disappeared, on admin panel and also in personal settings. This can be considered as “resolved” with the next spreed update.

But sadly that does not resolve the second problem with the actual video call I have. My current Opera developer browser version 43.0.2431.0 shows the following error in browser console when starting the spreed app:

Uncaught TypeError: avatarContainer.find(...).avatar is not a function
    at child.hideVideo (app.js?v=ca4f717…:439)
    at child.onStart (app.js?v=ca4f717…:384)
    at child.r [as triggerMethod] (backbone.marionette.min.js?v=ca4f717…:9)
    at child.start (backbone.marionette.min.js?v=ca4f717…:10)
    at HTMLDocument.<anonymous> (init.js?v=ca4f717…:25)
    at j (jquery.min.js?v=ca4f717…:2)
    at Object.fireWith [as resolveWith] (jquery.min.js?v=ca4f717…:2)
    at Function.ready (jquery.min.js?v=ca4f717…:2)
    at HTMLDocument.I (jquery.min.js?v=ca4f717…:2)
    (anonymous)	@	simplewebrtc.js?v=ca4f717…:13898
    emit	@	xhrconnection.js?v=ca4f717…:22
    (anonymous)	@	xhrconnection.js?v=ca4f717…:15
    j	@	jquery.min.js?v=ca4f717…:2
    fireWith	@	jquery.min.js?v=ca4f717…:2
    x	@	jquery.min.js?v=ca4f717…:4
    (anonymous)	@	jquery.min.js?v=ca4f717…:4

When I switch the video off, the following similar error shows up:

Uncaught TypeError: avatarContainer.find(...).avatar is not a function
    at child.hideVideo (app.js?v=ca4f717…:439)
    at child.disableVideo (app.js?v=ca4f717…:446)
    at HTMLButtonElement.<anonymous> (app.js?v=ca4f717…:172)
    at HTMLButtonElement.dispatch (jquery.min.js?v=ca4f717…:3)
    at HTMLButtonElement.r.handle (jquery.min.js?v=ca4f717…:3)
hideVideo @ app.js?v=ca4f717…:439
disableVideo @ app.js?v=ca4f717…:446
(anonymous) @ app.js?v=ca4f717…:172
dispatch @ jquery.min.js?v=ca4f717…:3
r.handle @ jquery.min.js?v=ca4f717…:3

As the “hide video” button does not show up, to connection is clear here ;). “show video” button is displayed correctly after video hidden. I tried with current Opera beta 43.0.2442.7 (actually newer, huh?), where the error messages are the same (in browser console) but even the voice toggle does not show up completely. On the other hand the same behaviour.

I tried with Edge: WebRTC is not supported to the “hide video” button does not need to show up :wink: . But I actually realizes that on Edge, when I try to add another user, after short searching the button for creating a public link shows up, which does not on Opera. Also the browser tab does not hang up.

I tried with Android 6 (cyanogenmod 13) standard browser and there everything works fine: video/auto toggle buttons, adding users, creating public link etc.

So in the end the issue related with the topic title is resolved but I face three maybe not related other errors on Opera browsers:

  1. Video hide button does not show up and throws error above in browser console.
  2. Trying to add users to call ends in endless searching without any user, group or public link option showing up.
  3. Browser tab hangs up:
  • endless page loading is shown
  • no possibility to open another website inside
  • with open browser console it is not even possible to close the tab or whole browser anymore, besides killing the whole process.

I will open a new topic about this and will test also the stable version of opera.


  • About the button visibility: Opera stable shows the same issue, actually also in all opera versions also do not show the “enable audio” button, so the other way round than video button :wink: . But no error about this in browser console
  • About showing users/participants: At least in opera stable the browser tab does not freeze. Also the users/participants show up and I can create a public room/link. But I was so far not able to have some real video connection with all possible browser combinations I have here…