webrtc-nv-use-cases icon indicating copy to clipboard operation
webrtc-nv-use-cases copied to clipboard

IoT use-case requires direct one-way media support

Open steely-glint opened this issue 7 years ago • 24 comments

Many IoT usecases (security cameras, baby monitors, drones etc) use unidirectional media Unfortunately the trend in the current specification is to force such media though a TURN server since that is the only usable candidate that will be generated without a GUM permission.

The costs (and latency) of running every video camera through TURN would negate two of webRTC's main advantages in this product area.

srflx and host ICE candidates should be available to this usecase in a way that isn't bemusing to the user.

steely-glint avatar Sep 12 '18 12:09 steely-glint

Sorry for the noise but +1000.

lgrahl avatar Sep 12 '18 14:09 lgrahl

I completely agree with @steely-glint.

WebRTC is the only way of implementing ultra-low-latency real-time streaming on the Web. WebRTC is increasingly used for one-way real-time streams, rather than for two-way communications.

Requiring user permission for ICE candidate discovery is perfectly reasonable. However, doing that via getUserMedia is a round hole, and assumes that all WebRTC applications are round pegs. My consumer-only application seems to be a square peg.

Perhaps we can have a dedicated permissions request mechanism for cases where GUM isn't used.

jamespearce2006 avatar Sep 12 '18 20:09 jamespearce2006

Completely agreed. A permission request just for creating PeerConnections would fix this.

lminiero avatar Sep 13 '18 06:09 lminiero

Another datapoint here :) I work on a project where we provide a web application that can connect to a smartphone app and exchange data. We are perfectly fine asking the user for "permission to establish a direct connection", but "please let us access your microphone and camera in order to load data from your smartphone" is definitely a no-go, no matter how much you explain it to the user.

When the alternative is using TURN servers to relay all data, then what is the point of using WebRTC in the first place?

dbrgn avatar Sep 13 '18 07:09 dbrgn

Now, I can already hear "but there is NAT hair-pinning!". But:

  1. There are more routers that don't support NAT hair-pinning than you would think. The amusing result is that a relay connection is being established when both are in the same network. And a direct connection is being established only when both aren't in the same network.
  2. Quite a substantial amount of ISPs (often cable providers) use DS-Lite where NAT hair-pinning lets all IPv4 data flow to the DS-Lite Gateway and back again. Which of course applies all limits of your broadband connection.

lgrahl avatar Sep 13 '18 10:09 lgrahl

@steely-glint @lgrahl It seems that several use cases may have a requirement for support of one-way media and related permissions support. This requirement comes up not only in IoT, but in scenarios such as MOOCs (where gUM may not be called until the student asks a question).

I'd also argue that overloading gUM as a universal permissions mechanism for WebRTC 1.0 is becoming unworkable. So we probably need to address the permissions issue for WebRTC 1.0 as well as NV.

aboba avatar Sep 26 '18 20:09 aboba

We're having a lot of issues with the new Chrome 77 update and connecting our end users to our deployed IoT devices with a one way connection... Any update on this? Asking a user for microphone/camera to connect them to their toaster is undoable 😂. Is there anything we can do in the meantime to fix our product?

bfitec avatar Sep 27 '19 17:09 bfitec

@bfitec can you file a bug at http://crbug.com? Chrome should be able to reach your device without any additional permissions.

juberti avatar Sep 28 '19 01:09 juberti

@bfitec If you do file a bug - please let me know - I'd be happy to chime in. Alternatively email me and I'd be happy to discuss mitigations.

steely-glint avatar Sep 28 '19 06:09 steely-glint

@steely-glint would you be willing to do a post on webrtchacks regarding this? If you control one of the endpoints a direct connection should be possible with or without mDNS.

juberti avatar Sep 28 '19 23:09 juberti

TBH I think the OP description on this issue is incorrect; no new API surface is needed for these scenarios. @steely-glint, please clarify or close this issue.

juberti avatar Sep 28 '19 23:09 juberti

@juberti I've had problems connecting over a relay after Chrome 77. Chrome is telling my STUN/TURN servers that the browser "hostCandidate" is null (hostCandidate: "[0:0:0:x:x:x:x:x]:58670") then the STUN/TURN says something around about 'Host lookup failed' preventing my relay from establishing the connection. I'm really frustrated, our business relies on this so I would really appreciate any help and hope it doesn't necessitate us waiting on another Chrome update.

bfitec avatar Sep 28 '19 23:09 bfitec

Here is the w3c description of hostCandidate (https://w3c.github.io/webrtc-pc/#attributes-6):

hostCandidate of type DOMString, readonly

The hostCandidate attribute is the local IP address and port used to communicate with the STUN or TURN server.

On a multihomed system, multiple interfaces may be used to contact the server, and this attribute allows the application to figure out on which one the failure occurred.

If use of multiple interfaces has been prohibited for privacy reasons, this attribute will be set to 0.0.0.0:0 or [::]:0, as appropriate.

bfitec avatar Sep 28 '19 23:09 bfitec

Chrome doesn't send hostCandidate to the TURN servers; that's provided to the JS application.

Also, do you know who is looking up hostCandidate? That seems rather strange too.

juberti avatar Sep 29 '19 01:09 juberti

On 29 Sep 2019, at 00:08, Justin Uberti [email protected] wrote:

@steely-glint https://github.com/steely-glint would you be willing to do a post on webrtchacks regarding this? If you control one of the endpoints a direct connection should be possible with or without mDNS.

Interesting idea. I’ll see if I can gather some usable data and a narrative to make a readable blog post.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/w3c/webrtc-nv-use-cases/issues/1?email_source=notifications&email_token=AAFODYCB4RL4FCK5C3GC2V3QL7PWDA5CNFSM4FUVJBNKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD73EBAY#issuecomment-536232067, or mute the thread https://github.com/notifications/unsubscribe-auth/AAFODYE444BNQDKVHKSRMELQL7PWDANCNFSM4FUVJBNA.

steely-glint avatar Sep 29 '19 09:09 steely-glint

@bfitec, any more thoughts on this?

juberti avatar Sep 30 '19 17:09 juberti

Putting mDNS aside, I think this is also (if not mainly) about mode 1 vs mode 2/3 (or "default mode" vs "best available mode"). The above mentioned use cases should also be able to leverage themself into the "best available mode" just as gUM usually does nowadays. And that issue can be resolved by e.g. https://github.com/w3c/webrtc-pc/pull/2175 or merging #14.

lgrahl avatar Oct 01 '19 09:10 lgrahl

While that makes sense in theory, I think you'll need to show a more specific need regarding why the current APIs are insufficient. I actually think this particular bug is underspecified and perhaps should be closed.

juberti avatar Oct 01 '19 17:10 juberti

I've stumbled on an interesting example - admittedly under tested, since I don't have access to the relevant hardware ;-) The latest Tesla software update ships with chromium as the browser with working webRTC, but no input media (as far as I can tell) or mdns. This means that a smartphone inside the tesla can't send webRTC video directly to the screen, it has to use an external TURN server. I'd be happy to work with an owner to help specify this bug!

steely-glint avatar Oct 01 '19 17:10 steely-glint

I don't follow the reasoning. The Tesla implementation should hand out host IPs, right? And if not, the smartphone will. So what's the issue?

juberti avatar Oct 01 '19 18:10 juberti

Sorry, to be clear, both ends of this scenario are browsers. I am assuming that the smartphone is running latest chrome. The tesla has a web browser (URL bar and all) which is a port of chromium - so I assume when they upgrade to 78 then it won't send host IPs unless it has GUM - which it won't since it has no User Media available (as far as I can tell). Chrome/safari on smartphone won't supply host candidates unless we do GUM (which is the subject of this bug).

I'd be very surprised if tesla added mdns support to the MCU's os.

steely-glint avatar Oct 01 '19 18:10 steely-glint

OK, that helps. But still, Tesla and phone will both be on separate cell networks and a direct host-host connection won't be possible, right? (unless you're sitting in your garage with wifi)

juberti avatar Oct 01 '19 18:10 juberti

Turns out that the video tag is disabled unless you are in 'park' so being on wifi (or tethered to the smartphone) is a pretty plausible situation.

steely-glint avatar Oct 01 '19 18:10 steely-glint

Tethering a Tesla to a smartphone seems like a true corner case; if you could do the reverse it would be a more plausible scenario. Regardless, I agree with the meta-point; when both ends support only mDNS, a direct connection is not possible in some cases. (Suggest the bug title and description be updated accordingly.)

juberti avatar Oct 01 '19 18:10 juberti