snissn 5 years ago

Could anyone share a tutorial on how to set up a basic WebRTC text and/or voice chat from scratch? I've tried but failed to get a proof of concept built, and personally have not found any great documentation

  • Uehreka 5 years ago

    As someone who has done some work with WebRTC (attempting to build a video conferencing app for work) it's hard to boil things down to a "Hello World" due to the whole ICE and signalling thing. It's unfortunate, but in order to get this client-side peer-to-peer thing working, you need to have a server in the cloud (i.e. not behind NAT) that can pass signals between the two peers.

    The tutorials other people have linked to look good, just note that unless you're talking between 2 computers within your local network (and even then you'll have to copy-paste their IP addresses to each other), you'll need to either deploy a server or use a 3rd party library like PeerJS that uses one.

    I hope that eventually IPv6 will obviate the need for NAT and make this whole thing much simpler, but until then, this is what we've got.

    • voltagex_ 5 years ago

      I wonder if there's any plans for peer discovery, at least locally.

      I guess that's where your central server comes in - even in a perfect scenario where there's no NAT between peers.

  • deviantfero 5 years ago

    Hi there, I authored this small chat-text/file-transfer demo without any third party libraries for WebRTC communication [0].

    It is very easy to get running in your computer since it's made with the purpose of explaining data flow withing WebRTC, logs have been implemented describing this flow in both client and server, you can find a blog post about it here [1].

    [0] https://github.com/agilityfeat/file-transfer-demo

    [1] https://webrtc.ventures/2018/04/file-transfers-small-demonst...

h43z 5 years ago

Neat idea to use WebRTC. Do I understand it correctly therefore no central server is involved?

I was once in need to stream my shell to some colleges and so I hacked together a tiny shellscript http://liveshell.43z.one/ which should work on most Linux systems without installing any dependencies.

  • maxmcd 5 years ago

    Correct, no central server. It does use google's stun server to establish the connection, but you can swap that out with another stun server with the -s flag (it's easy to host your own and there are many free stun servers)

    The -o flag makes things easier but uses https://10kb.site to do the sdp exchange

    That shell script is cool

    • verroq 5 years ago

      With no TURN server I cannot see it will always work.

th0ma5 5 years ago

RTTY made me think radio and not remote. Still fun!

  • anilakar 5 years ago

    It would be fun to run good old 45 baud RTTY over a WebRTC audio channel.

lgrahl 5 years ago

Neat! I wrote something similar [1] more than a year ago which allows you to create one or more remote shells but sharing can only be done via tmux (shameless advertising).

[1]: https://github.com/rawrtc/rawrtc-terminal-demo

Sean-Der 5 years ago

Congrats on the release maxmcd, you really built something cool quick!

The best thing about Go is those easy deploys, it would be great to drop this on a remote server and go at it. Could be helpful for getting quick shell help for a friend. Or maybe a way for people to avoid having jump boxes (and SSH only available via VPN) solutions are endless :)

kbumsik 5 years ago

I'm not an expert in web, but isn't WebSockets better for this purpose? What's the advantage of using WebRTC for text-based terminal over WebSockets?

  • matthewmacleod 5 years ago

    WebRTC is mostly about peer-to-peer communication (with a focus on audio and video support alongside data), whereas WebSockets is more about client-server communication. That is, a WebSocket connection needs to be made explicitly to some kind of server; WebRTC handles a peer-to-peer connection setup somewhat transparently.

    WebRTC still needs to communicate between peers in order to set up that connection. In fact, many applications using it will use a WebSocket server to handle that initial communication – basically messages between the peers that say "this is where I am and how you can connect". In the case of this WebTTY project, this initial communication is encoded in the "connection data" that needs to be shared to set up the connection, so there's no need for that channel.