-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WebRTC DataChannel Everywhere #13
Comments
Tagging people interested. @substack @mikolalysenko @mafintosh @feross @polvi @philips @petar |
WebRTC in node: https://www.npmjs.org/package/wrtc (HT @feross) |
Yep - @modeswitch has done awesome work with this, including getting prebuilt binaries available which makes installing the From a minamlistic build from scratch implementation I would recommend having a look at the way the Janus gateway from @meetecho approaches things. While I'm not 100% sure I think implementing a lighter node binding for pure SCTP data channels should be doable using just For more information on Janus, have a look below: |
Damon, Funny you mentioned that, as just the other day I was talking with @helloIAmPau, who just joined our team, exactly about that! Pasquale has been working on node.js and WebRTC for a while already, and was interested in evaluating how much effort extracting the related core stuff from Janus would be, to allow for a DataChannel only module in his projecys. In Janus, as you noticed, we make use of |
This is great news! Awesome work so far @modeswitch @DamonOehlman and @lminiero. @lminiero @helloIAmPau sounds great! Extracting this out of Janus would make this all much easier. Let's figure out what needs to be done! Could someone very familiar with the Janus codebase give a quick sketch? @lminiero am curious-- have you experienced connectivity problems with libnice in Janus? I.e. some random edge case that chromium's |
Thanks for including me on this. Good to listen. On Monday, June 9, 2014, Juan Batiz-Benet [email protected] wrote:
|
@jbenet we just discussed this briefly before I left to attend an event abroad, so we didn't actually brainstorm any detail. In principle, in Janus we have a core that takes care of the involved protocols (HTTP on one side, the whole WebRTC stack including SDP/ICE/DTLS/SRTP on the other) and, while this implementation currently takes into account the pluggable nature of Janus and the fact that you're going to need and feed data from/to plugins, most parts should be reusable outside of that context. As soon as time permits, we'll try design a way to do so. Besides, DataChannels support in Janus is currently limited to strings, so I'd have to take care of filling the binary gap as well in the meanwhile. For what concerns your other question, to be honest I haven't done extensive testing in that regard. I made some tests interacting with Oleg Moskalenko's TURN server using different modes, and most of them (TURN over UDP, TURN over TCP, TURN over TCP 80/443) seemed to work fine, while I couldn't get it to work with TURN over TLS, apparently because of some certificates-related issues in Chrome. TURN over TLS on port 443 would help address most of the "unconnectable nodes" you talk about, as most of the places you can't use WebRTC in because of UDP/port filters, do filter HTTP but don't do DPI on HTTPS. Hangout AFAIK does the same fake-HTTPS tunneling stuff, but with the advantage of having complete control over the solution being a proprietary plugin. Alternative proposals for WebRTC to cover even more edge cases where even TURN/TLS:443 doesn't work (like one I was involved in about tunneling RTP over WebSockets) didn't get much traction in the IETF because of security concerns: people basically don't like the idea of going behing a network admin's back, and our ideas for making this controllable didn't seem to change that. |
That sounds great!! What can we help with?
Haha!! This is great to hear! I suspected this use of TURN over TLS on :443 at: #2 -- glad to hear that's being used. I wonder if the +hangout plugin does something like Fake TCP. And, they may not do DPI on HTTPS now, but they probably will... traffic patters are pretty detectable. Eventually, we'll have to start hiding patterns.
Tunneling RTP/WS sounds cool. What other ones? What do you think of making a standard outside of the IETF? IMO "code is law" (meaning, implementations rule what happens. Specs only suggest). I'm of the position that network admins should not selectively alter/drop traffic. They should either provide access to the internet or not. Anything else gives rise to discrimination and censorship in a basic resource + serious abuse from less liberal governments. It's on "freedom of speech" level. Though, this is discussion is beyond the scope of this Issue -- happy discuss via another issue, or some other channel. |
2014-06-10 12:50 GMT+02:00 Juan Batiz-Benet [email protected]:
Unfortunately none of this matters for WebRTC, as code might be the law,
|
I have been working with WebRTC from almost beggining first as hobbyist and later for job and mostly focused on DataChannels, count with me please :-) |
Any news @lminiero ? How can we help? |
|
Awesome - thanks for sharing the link :) |
Well, check this out: https://github.com/EricssonResearch/OpenWebRTC |
@jbenet Sadly it's audio/video channels only, no data. |
@cjb ahh, tragic! i just found it. |
Hey everyone, check out this github org:
We are organizing an effort. |
Hi everyone, I have implemented a WebRTC DataChannel library in C (along with a Python binding). Just paste it here in case you were interested. |
@xhs this is great news! Will check it out post haste and make go bindings. |
@xhs excellent work, congratulations! Just out of curiosity, does your code handle the splitting of DTLS messages in case of retransmissions caused by an MTU limit? In my implementation of Janus I've noticed that, in case a DTLS message exceeds the MTU, the packet is obviously lost somewhere in the path but is then not splitted by the DTLS stack in Openssl in following retransmissions, which is what, for instance, Chrome does instead. Looking around this may be blamed on the usage we make of BIOs to bridge a DTLS session to a generic transport, which hides the transport-related limitations (e.g., the MTU for UDP messages) since all happens in a virtual channel in memory. I did find some approaches that should allegedly help address this issue, but none seemed to work as expected. This is not strictly a DataChannel related issue, as I mostly encountered this issue when involving big (e.g., 2048) certificates during a DTLS handshake, but my guess is that, unless the SCTP stack takes care of that, this may happen even during a consistent DataChannel usage. |
Sorry, @lminiero, didn't meet this. I will look into it. |
@xhs considering using your implementation for https://github.com/jbenet/go-ipfs would love to ask you some questions. Mostly re robustness you've seen so far, maybe getting some large test cases setup (we can contribute and help do all of this) to ensure various cases work well (nat traversals, etc). If you use IRC, drop by |
@jbenet I'm glad to help. librtcdc is still in its early phase, and sometimes it crashes :(, issues/questions/help are welcome to make it better. |
Do you have in mind to add Node.js bindings? Using the Python ones as basis 2015-03-07 11:14 GMT+01:00 Xiaohan Song [email protected]:
"Si quieres viajar alrededor del mundo y ser invitado a hablar en un monton |
I think what we need to do is first construct a set of test cases to prove robustness of the library-- see webrtcftw/goals#8 -- then we can move to bindings in various languages |
DataChannel support merged 8 days ago into openwebrtc. EricssonResearch/openwebrtc#3 |
Wonderful! |
just wanted to bump this to say google is working on QUIC data channels, but i'm unsure when they will ship it |
Sorry for necro'ing a closed issue, but I was wondering if anyone is aware of a robust node.js implementation of the WebRTC dataChannel? I've used both https://github.com/js-platform/node-webrtc - which stalled out about 5 months ago - and more recently https://github.com/vmolsa/webrtc-native which has much more active development (although I'm currently experiencing some critical bugs, possibly in the chromium code on which webrtc-native is based). My use case is for a multiplayer game using solely datachannels, where browser peers connect to a node.js server "peer", and a 'pure' 'librtcdc' implementation is exactly what I'm looking for. Any leads would be greatly appreciated!! |
@bfishman You might consider electron-webrtc which is used by webtorrent-hybrid. What type of datachannel bug are you encountering with |
@bfishman I'm in the process of bringing on another maintainer for |
@modeswitch Understandable. I imagine that's a really difficult package to maintain. |
@feross I will check out electron-webrtc, thanks! Here's the issue I raised over at webrtc-native: vmolsa/webrtc-native#30 @modeswitch I totally understand the need to prioritize other subjects, particularly the startup you mentioned elsewhere. Thank you for all the work you've done so far!! |
anyone working on this? |
@notedit not that I know of. |
Working on what exactly? As part of our studies, we will implement a WebRTC (and possibly ORTC) library with a focus on Data Channel in C (in fact, we already have a working prototype that redirects WebRTC's SCTP packets to a kernel SCTP stack using dctt). I will keep you posted. |
@lgrahl any progress on your project? Sounds really interesting! |
@mafrost Yes, recently we have conceived the C-API (which will be very similar to the JS-Spec defined by the ORTC community group). We'll start cleaning up the prototype and integrate it into the API skeleton as soon as we've writen our exams for the current semester. :) |
webrtc will use quic with datachannel |
any reference to this info? thanks! |
@mafrost I haven't forgotten this issue here. Our WebRTC and ORTC implementation is making good progress: ICE and DTLS is working already while SCTP and DCEP is underway (I'm waiting for usrsctp's event loop API). However, I'm certain we will have a working implementation at the end of this year. I'll keep you posted. And meanwhile, you can follow my progress here. The project will be moved to GitHub at the end of this year as well. Edit: Updated project URL. |
Hey everyone. I promised to move the project to GitHub at the end of last year, so I feel obliged to inform you why this hasn't happened, yet. My studies were quite intense and I encountered some very nasty bugs to debug in late 2016. However, the project is making great progress. The data channel implementation is nearly complete and might even be the first implementation that can handle messages of arbitrary size correctly (if you're interested in this topic, read my blog posting about this problem). Once we have fixed these bugs and the project is working in alpha state, I'll move it to GitHub into this organisation. This will most likely happen in Q1 2017. I'll keep you posted. |
Done, you can check it out here: https://github.com/rawrtc/rawrtc Documentation is pretty bad at the moment, so please open issues if you are having trouble getting started. There are also tons of TODOs in the code if you want to help. :) |
Chrome 63 just announced:
Just FYI |
Hey @jbenet Just stumbled across this while searching for something else. We wrote pion WebRTC it is Go implementation that has Datachannel and media support
|
WebRTC DataChannel Everywhere
(I realized this many months ago, documenting it here for discussion)
WebRTC is becoming the de-facto way to connect two peers in the web (thanks to @petar for pointing this out to me). While protocols like LEDBAT (uTP) work for most applications, those who would seek to interact with peers running in browsers must use webrtc for the foreseeable future.
We can get everyone (servers + browsers) talking over WebRTC. But to do that we need servers to speak WebRTC. AFAIK, only browsers have implementations. And this is because
libwebrtc
(https://code.google.com/p/webrtc/) is a behemoth. It has libjingle + DataChannel + lots of A/V magic + much more in it.We need
libwebrtc
+ language bindings.libwebdc
- only the datachannel part.(2.) is because many application use cases don't care at all about the A/V stuff, and only want to exchange data with peers. We only need WebRTC DataChannels (libjingle + datachannel implementation, SCTP, etc).
I propose
libwebdc
Eventually, native language implementations may emerge, but frankly, rewriting libjingle, sctp, and whatever else on top of rewriting the DataChannel protocol, seems much harder than ripping out the code we need from
libwebrtc
intolibwebdc
. (Would love to be proved wrong).I know many people are interested in this, so let's do it.
The text was updated successfully, but these errors were encountered: