crybapp / portal

Service deployed on VM instances to launch browsers
MIT License
33 stars 12 forks source link

Use Go to create a WebRTC client for each portal #69

Open nurdism opened 4 years ago

nurdism commented 4 years ago

I was planing on making something similar to cryb but I decided to go for a stateless/self hosted route. Was too much work for me xD But I had some ideas that I'd like to share

https://drive.google.com/file/d/1xyXhs1iCisyjYQrRR2IP6HmXbapESPLs/view is a flow chart of how I wanted the backend streaming of the containers to work, I did some work in regards to that with https://github.com/nurdism/neko using gstreamer and go I was able to broadcast the webrtc stream using https://github.com/pion/webrtc It might need some reworking for your current system. But I wanted to share it. With neko I've been able to hold a 720p/30fps stream with sub 150ms latency. You can use cgo to handle the user i/o and get close to no overhead.

Soliel commented 4 years ago

Heya Nurdism,

We're actually working on a WebRTC implementation using SFU servers, like Janus. A webRTC client for each portal sounds like alot of additional overhead and could be difficult to peer with(I haven't tried it in an actual network though so it's worth considering). The Solcode Fork has a semi-stable Janus implementation. Janus is showing some issues with current setups so we're considering moving to MediaSoup.

I really like Go, though, so we'll keep it in consideration as a candidate.

JeDaYoshi commented 4 years ago

Hey Nurdism. Nice to see you commenting here, have seen your project before. Congrats for your work, now that I have the opportunity to tell it to you.

As @Soliel mentions, we are already working on implementing WebRTC. As she didn't comment where it is, and you don't know, it is on the SolCryb organisation's repositories as of now, in the Janus-related branch. They will be moved to here, eventually, but first there are things to do and see if we are going to stick with Janus or move to MediaSoup or something else. It uses gstreamer actually (the implementation on this repos are using ffmpeg).

Using Go in a future will be kept in consideration as mentioned, either way. It's something that needs to be discussed internally (and actually, there were mentions of such before).