strukturag / spreed-webrtc

WebRTC audio/video call and conferencing server.
GNU Affero General Public License v3.0
1.09k stars 259 forks source link

"Add to current call" feature when called while in a call #276

Open plinss opened 8 years ago

plinss commented 8 years ago

When two or more people are in a call, if an additional person tries to call one of the participants, they get a "busy" message and the call does not go through (although the person they tried to call does get a notification). However, someone participating in the call can call the additional person, adding them to the group call.

Ideally, when the additional person makes the call to someone already in a call, the receiver should have the option to answer, adding the person to the call (like call waiting on a phone).

Additionally, it would be nice to have UI for a group call, i.e. calling in to a room, rather than to a person directly, where no one needs to answer to initiate the call and additional people can join at will (if this already exists, I can't find how to do it).

longsleep commented 8 years ago

Yes, this is a nice feature request. Currently all participants in a call can add additional participants (by calling them).

longsleep commented 8 years ago

Conference rooms have been merged in #284 (develop branch).

plinss commented 8 years ago

Just tried the conference room feature and it's very nice. A few suggestions though: 1) the room names appear to be case-sensitive, it would be more user-friendly to be case insensitive (at least for the ascii range) 2) the regex for the roomtype mapping appears to be forced to lowercase, I didn't test if it's applied case-insenitively or not (it should match the case sensitivity of room names) 3) it would be nice to have a UI to control the room type, at least when creating the room, instead of having to create conference rooms with a magic room name convention 4) It would be nice to be able to configure the default room type (currently forcing all rooms to conference via the setting ^.* = Conference )

plinss commented 8 years ago

Further testing with multiple participants (on different continents) resulted in a number of failed audio/video connections. Some people could see hear a few others but no one got connected to everyone. Some got video but no audio. Not sure if this is due to the conference feature or other issues on the develop branch.

longsleep commented 8 years ago

Do you have any more details on this? I doubt it is related to the develop branch in itself. Also if for some video worked but not audio then this is most certainly a local (browser) issue as all current browsers send audio and video bundled inside a single stream.

plinss commented 8 years ago

What details do you want? I'm using the ownCloud integration and my own coturn server, everything over TLS, I can provide logs if you want them. Also happy to have test calls on my setup if you want to diagnose. We had six participants using a variety of browsers, Firefox, Chrome, and Opera, I tried both Firefox and Chrome (on OSX) myself. Note that after a few attempts to get everyone connected we switched to appear.in using the same browsers and it worked fine.

For the first two participants (started with Chrome then switched to Firefox on my end, Opera on the other, he joined first), I could see and hear the other person, but he could neither see or hear me (we could text chat though). Reloading the page didn't help. As others joined, they got either a connection to myself or the other person, but no one connected to everyone (we could play telephone though).

FWIW we're trying to use Spreed for a regular weekly meeting with 6-12 participants for the W3C Technical Architecture Group (trying to dogfood WebRTC). We've been using appear.in when Spreed is too flaky (we often get dropped connections several times during an hour long meeting) or when participants have trouble joining. It's never been rock-solid, but regular rooms worked much better than conference rooms so far (they're just a pain to add people to the call). appear.in has been more stable, but still sometimes drops connections and is limited to 8 participants so isn't usable when we have guests (and we'd prefer to run on our own infrastructure).

longsleep commented 8 years ago

Thank you for the details. This helps a lot and we are already working on improving the web client conference resilience. The current implementation is quite naive and has no way to recover when for whatever reason a peer connection goes wrong.

Also the automatic conference type is still new and seems we have an issue here where not everyone gets notified about all peers (that's what your description sounds like). Could you share how you set up the conference rooms exactly (URL pattern?) so we could try to reproduce the "neither see nor hear me" issue you describe.

Is some of this reproducible or random?

When you say you did not connect to everyone, did a blank video participant appear in the UI for everyone which then did not show video or did only some of the peers show up (and worked).

I will update this issue as changes land.

plinss commented 8 years ago

The roomtype pattern is: ^.* = Conference (I wanted the default room to be a conference to make it easier for people to join.)

We only tried the one meeting so far in Conference mode so not sure how reproducible, though for the first two participants we reloaded the page several times with the same results (I could see and hear him, he could neither see not hear me, as though I was muted), some of the others that joined later could see and hear me but not him.

Those that didn't get audio/video from others get blank video (though for some it worked in one direction), so it looks like all peers at least tried to connect with each other, just some connections failed. Text chat seemed to work for all (but wasn't thoroughly tested).

Making the connections more resilient would be very welcome, some of our participants use mobile or hotel/public wifi from time to time so bandwidth can be spotty. Detecting and auto-correcting failed peer connections is a must-have.

fancycode commented 8 years ago

@plinss as you might have noticed, I landed #293 that improves handling of calls/conferences and should make conference call setup much more stable (at least we found a couple of issues that could lead to some participants not sending and/or receiving some streams and that are fixed now).

Upcoming in a future merge request is support for automatic reconnection of previously established p2p connections that got interrupted.

Anyway thanks for your valuable feedback so far!

plinss commented 8 years ago

Cool. thanks! Will try again on our next call (June 29).

plinss commented 8 years ago

FWIW, just did some local testing between my desktop, laptop, and iPhone (all on local network). On the first attempt I entered the room on my desktop (Firefox), then the laptop (Chrome), the laptop received audio and video from the desktop, but the desktop only received audio form the laptop (video looked like it was muted). Reloading the page on the laptop resulted in a good connection. Trying again I was able to reproduce this about 1 in six tries (always missing video coming from Chrome to Firefox if that matters).

Using the iPhone Spreed app doesn't join the conference at all. If I call one of the conference participants from the iPhone I get the usual "busy" result. Calling the iPhone account from a conference participant results in a two-way call with the iPhone (i.e. that participant sees the iPhone along with the rest of the conference, but the iPhone doesn't connect to the other conference participants). Similarly if I start a two-way call form the iPhone to the laptop, then join the room on the desktop, the desktop and iPhone don't connect at all. If I manually call the iPhone from the desktop, then I get a three-way conference.

One other issue I noticed: during a two-way conference in the default room (all rooms are conference rooms), I switched to a different room on one client and the call ended cleanly. But when leaving that room (and implicitly returning to the default room) it didn't initiate a call with the other client that was still in the default room (and trying to manually call that client gets a "busy"). Similarly, if I join the other room on the other client, then I get a "busy" result as it tries to call the other participant. So moving from conference room to conference room appears to be broken at the moment.

(I don't know if you want me to file separate issues or keep them all here, feel free to split this up if you prefer.)

fancycode commented 8 years ago

Thanks for the quick feedback. Yes, the iOS apps doesn't support conference rooms yet (that's why that feature is still in develop and not released).

Moving from conference room to conference room is not tested and I already have an idea why it might not work correctly. Again thanks for testing, there will be new updates on this early next week.

fancycode commented 8 years ago

@plinss Did you get a chance to test the recent updates to conference rooms? Just wanting to check back...

plinss commented 8 years ago

Yeah we did a quick trial with limited success. It worked fine for the first two participants (Firefox and Opera), the next two to join (Chrome and Firefox) got AV connections to each other, and could hear the first two (not sure if they got video from us), but the first two got blank (appeared muted) video and no audio from either of the second two. Their names would turn green as they spoke though. Text chat appeared to work fine all around. After that we switched to appear.in. This was using the 0.27.0 version.

fancycode commented 8 years ago

Oh ok, so you were running the latest released version? All the recent improvements are still in develop branch and not released yet.

plinss commented 8 years ago

Ah, ok, from the 0.27.0 release notes it looked like they might have gotten folded in, will switch back to develop branch for next try.

fancycode commented 8 years ago

Sorry, you are right - didn't do the release and got confused myself :frowning: 0.27.0 should have all the latest code. Looks like there are still some scenarios that don't work correctly - thanks for testing!

plinss commented 8 years ago

No worries, let me know if you want logs (spreed or coturn)

IvRRimum commented 8 years ago

How do you enable conference type call? Like multiple people in one call?

longsleep commented 8 years ago

@IvRRimum just call others peer from the list while already in a call. Once the new call is picked up its a conference.

longsleep commented 8 years ago

Just call others while already in a call.

On Aug 2, 2016 12:17 PM, "Kārlis Čudars" notifications@github.com wrote:

How do you enable conference type call? Like multiple people in one call?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/strukturag/spreed-webrtc/issues/276#issuecomment-236863468, or mute the thread https://github.com/notifications/unsubscribe-auth/ABly1ZCHyruwE3WozklNrUEIXjqkZEf2ks5qbxlCgaJpZM4IGy2V .

IvRRimum commented 8 years ago

@longsleep Thanks!