7 ms·
Janus WebRTC Server
- folkhack 6y agoHaving to look into this professionally for local/remote streaming solutions and came across this paper in the last couple of weeks which has been a huge help to understanding my use case: http://lup.lub.lu.se/luur/download?func=downloadFile&recordOId=8995044&fileOId=8995045 http://lup.lub.lu.se/luur/download?func=downloadFile&recordO... One of the most useful/interesting use cases to me is the ability to have a PTP encrypted stream without having to go through weird IoT PKI hoops. Ninja edit: If anyone has experience with Janus and/or WebRTC on edge devices I would very much like to talk as I could really use a solid consultant in this realm.
- j1elo 6y agoIf you are interested in cross-compiling the WebRTC implementation so it runs directly from within edge devices, Janus might be one of the best options out there. Kurento offers a variety of features apart from WebRTC, but it is more intended to be cloud-deployed as an independent media server, you could think of it as a "proxy/bridge" that distributes media between producers (like RTSP cameras) and consumers (WebRTC clients). If those features are not needed, for purely WebRTC routing there's also mediasoup, with the same philosophy: N media producers send video to a central server, and the server distributes it to M devices consuming the media. True peer-to-peer comms (i.e. sending data directly from producers to consumers, without an intermediate centralized server) was a cool thing to aim for by the WebRTC standard, but real-world practical constraints (i.e. bandwidth) put a limit to the usefulness of a truly p2p architecture. You'll find more info about this searching for MCU and SFU.
- de_watcher 6y agoThe Google's WebRTC Native is a good option too. It's basically a piece of the Chrome browser.
- folkhack 6y agoI've been vetting solutions in the space and I think I have a need for both... I'm having a hard time figuring out direct streaming from device on your local LAN without having to go out/back-in through the public internet with a hard requirement of an encrypted "point-to-point" communication (ie: can't listen into streams) which is browser trusted + the ability to ship that out to a "proxy/bridge" media server solution like you describe. I've looked at EvoStream and Wowza as licensed solutions and I am super interested in the ability to use something like Kurento with ideally self-signed certificates to a cloud-deployed/redundant media bridge that then in-turn broadcasts to the remote clients who are consuming via the public internet. The OpenCV tie-in with Kurento would be of great interest to me as well. That could be a game changer for what I'm currently embarking on! Would a hybrid approach make sense to you as you're definitely an expert in this space? (ie: using Janus on-edge and Kurento in the cloud at the same time) PS: I apologize if my questions/communication is rough... I'm two weeks into a nightmare trying to sort all of this out so I'm still coming up-to-speed on the technical details of WebRTC + secure streaming!
- j1elo 6y agoYou can deploy Kurento (or Janus itself, for that matter!) inside a subnet of the LAN, to act as a media bridge. Then, if the security group / firewall / whatever is configured so it allows the media bridge public network access, then it could be used to send the data directly to remote peers. This however would have the bridge in the middle of LAN connections, so it wouldn't be a point-to-point flow, and the server would be able to "see" data passing through it. There is however some new work on what's called "insertable streams" in Janus, which would allow e2e encryption directly between sender and receiver, thus having the media bridge purely act as a "blind" router, not being able to see the streams passed through it. Janus has some very recent support for this [0], while this is (for now at least) not standardized and out of scope for Kurento. [0]: https://www.meetecho.com/blog/janus-e2ee-sframe/ https://www.meetecho.com/blog/janus-e2ee-sframe/
- nerdbaggy 6y agoI’ve also tried to setup Kurento and Janus and Janus is 100000000000% easier
- mboehm 6y agoOut of curiousity: What is an edge device? An IP camera? Depending on the professional grade of your use case, you could directly talk to meetecho, as they are the original developers and offer consultancy around Janus.
- folkhack 6y agoIP cameras mostly, some remote-audio stuff - I think that may be a logical next step for me so I'm going to bring that up to leadership tomorrow.
- mmastrac 6y agoI used Janus to map my IP camera's stream to a WebRTC page using a Raspberry Pi's hardware transcoder. It works quite well.
- folkhack 6y agoI'd be super interested in seeing what you've got! Is your implementation posted anywhere? I really like your Stylus project btw!
- mmastrac 6y agoThere's two parts to the implementation. First part is a docker container that will transcode a stream for Janus using the hardware on the Pi: https://github.com/mmastrac/gst-omx-rpi-docker https://github.com/mmastrac/gst-omx-rpi-docker I run this with the following config (just remember to map the RPi /dev/vchiq device into the container!): gst-launch-1.0 rtspsrc location="rtsp://admin:(password)@(host):554/cam/realmonitor?channel=1&subtype=0" latency=500 ! rtph264depay ! h264parse ! omxh264dec ! omxh264enc target-bitrate=500000 control-rate=1 ! video/x-h264, profile=baseline ! h264parse ! rtph264pay name=pay0 config-interval=1 pt=96 ! udpsink host=(janus) port=8004 sync=false The second part is the Janus configuration magic that creates the appropriate stream: [gstreamer-sample] type = rtp id = 1 audio = no video = yes videoport = 8004 videopt = 96 videortpmap = H264/90000 videofmtp = profile-level-id=42E01F\;packetization-mode=1\;level-asymmetry-allowed=1 videobufferkf = yes > I really like your Stylus project btw! Thanks! Been working on Stylus a bit more this weekend. Nearly have all the features I need for my own setup.
- Sean-Der 6y agoI do WebRTC on Edge/IoT devices (mostly MIPS/ARM devices running Linux). Customers are mostly teleoperations (robotics) and security cameras. Most customers run an MCU/SFU on a server, but then just a WebRTC client on the device. We do simulcast on the device to an SFU, and then distribute from there. Happy to answer questions here or directly. I don't want to be disrespectful and sell other stuff on this thread though. I like seeing people realize how great Janus is :) don't want to distract from that conversation!
- folkhack 6y agoI'm concerned in targeting things like Janus etc to the MIPS architecture for streaming over WebRTC because typically I only see MIPS on legacy devices in my world. How does MIPS handle this stuff? PS: I know that Amazon has a product in the space and we're vetting AWS as our cloud provider due to it's diverse product offering. I've been looking at opensource solutions due to vendor lock-in but would love to hear if you have any experience with the Amazon offering!
- Sean-Der 6y agoI wrote the Amazon offering! By design I implemented the same PeerConnection API, I really didn't want their to be vendor lock-in. I included a 'signaling client' in-tree, but you can do your own easily. The end goal is to get that AWS implementation running on 'true' embedded devices. We are going to switch to mbedtls soon, and we are working on getting it on FreeRTOS. I also wrote Pion WebRTC, the Amazon offering is just a re-implementation of that in C. Just trying to decouple media pipelines and transport. I think WebRTC is a really great protocol, hopefully we can get software to match it :)
- kdkeyser 6y agoMIPS is still alive in the IP camera world. There exist very cheap SoC's (e.g. the Ingenic T20 - http://www.ingenic.com.cn/en/?product/id/14.html http://www.ingenic.com.cn/en/?product/id/14.html ), tailored towards making cheap network camera's (~ €20 retail price for the full camera). I guess at that price point, the ARM license fee does become visible in the bill of materials.
- dang 6y agoWe changed the URL from https://github.com/meetecho/janus-gateway https://github.com/meetecho/janus-gateway to the project homepage, which is generally preferred when a project is being discussed for the first time on HN. Especially if it also links to its GitHub page or other repository. I found previous submissions, but no comments except https://news.ycombinator.com/item?id=22610510 https://news.ycombinator.com/item?id=22610510.
- Uninen 6y agoWell, at least the GitHub page stays up under the traffic.
- bbeausej 6y agoWe use Janus as a WebRTC SFU for projects in the education/gaming sector. Its general purpose approach to WebRTC has been a good foundation to help us build custom solutions.
- carlsborg 6y agoWhat turn servers do you use?
- mboehm 6y agoAnswering for myself, not for bbeausej. We are currently using coturn. It is quite easy to setup, you have to dig a little into the configuration parameter and that's it - I would recommend it. Oh well, you probably should use the rest api for generating credentials on the fly and think about scaling (depending on your needs).
- carlsborg 6y agoWhat percentage of sessions do you see going through turn?
- bbeausej 6y agoWe use coturn as the TURN solution and talk to the Janus API via websockets (we found it much better then REST if the msg rate is high)
- kristianpaul 6y agohttps://www.resiprocate.org/ReTurn_Overview https://www.resiprocate.org/ReTurn_Overview
- saurik 6y agoDid you write your own plugin or are you using VideoRoom or something? The thing that turned me off of Janus is that VideoRoom seemed way too high level and made tons of schema assumptions, but all of the important SFU functionality seemed intertwined into the codebase of that plugin, so if I were to actually want to build a "custom solution" it looked like I would have to maintain an annoying-to-merge fork of that thick layer :/.
- amelius 6y agoDoes anyone have a link which explains WebRTC technology in a concise way?
- spelunker 6y agoHopefully not out of date but: https://www.html5rocks.com/en/tutorials/webrtc/basics/ https://www.html5rocks.com/en/tutorials/webrtc/basics/
- j1elo 6y agoWebRTC is the good old RTP, on steroids. It standardizes a set of conventions that web browsers could follow to a) solve the issue of NAT traversal (i.e. opening ports in consumer routers and firewalls), b) send video and audio (and possibly also arbitrary data), directly between web browsers, and c) possibly adapt the video quality to the conditions of the network, in an autonomous and automatic way. That's the bird's-eye view of it. Some keywords to expand on this: "a)" is done with the ICE protocol, "b)" is done with plain old SRTP, and "c)" is done with algorithms called REMB or Transport-CC.
- Sean-Der 6y agoI really want to write a book on this eventually, but I haven't found a good single resource myself :( I have done some talks trying to explain WebRTC. Happy to answer any questions * Slides - https://pion.github.io/talks/2018-11-28-seattle-video-tech.html https://pion.github.io/talks/2018-11-28-seattle-video-tech.h... * Video - https://www.youtube.com/watch?v=FdgoOrJH8ok&feature=youtu.be&t=989 https://www.youtube.com/watch?v=FdgoOrJH8ok&feature=youtu.be... * Video - https://www.youtube.com/watch?v=ezZYd5NsxE4 https://www.youtube.com/watch?v=ezZYd5NsxE4 ------ But when I teach others I try to break it down into a few unique chunks. * ICE - Establishing P2P Communication * DTLS/SRTP - Securing Communication * SCTP - Sending binary data over UDP and handling loss * RTP/RTCP - Sending media data over UDP and handling loss
- tomasyany 6y agoHow hard is to use Janus for a media server in the SFU paradigm? Or where could I find a good example? We currently use Kurento for the easiness of usage + the Java client, but we have been wondering about other solutions like Janus.
- VWWHFSfQ 6y agoYou might check out Mozilla's SFU plugin [1] for Janus that powers Mozilla Hubs [2] [1] https://github.com/mozilla/janus-plugin-sfu https://github.com/mozilla/janus-plugin-sfu [2] https://hubs.mozilla.com/#/ https://hubs.mozilla.com/#/
- sandGorgon 6y agoHave you looked at mediasoup?
- xmichael99 6y agoI checked out the project on github, and I was a little surprised to see no mention of jsmpeg.com as over on that project the number one question and issue is the lack of a quality web socket server. Long story short, anyone try this or think it would fit with jsmpeg?
- lminiero 6y agoJanus only supports WebRTC, and WebRTC doesn't support MPEG out of the box (to be more precise, it's not in the codecs list any endpoint supports). Besides, streaming happens over WebRTC, not WebSockets: we only use WS as one of the alternative "transport" protocols for the Janus API, so just signalling.
- j1elo 6y agoI'll chime in to comment that WebRTC, as complex as it is, is of course usually just one part of the equation, and arguably a small one. You'll have to correctly deploy your servers, a TURN server to aid with ICE (NAT/Firewall traversal), and configure it all appropriately in both server and client browser applications. It is surprising how many people have problems with getting ICE, STUN and TURN servers, to work correctly, understandably because it is a complex topic. Then once you have the basics of streaming media over the network, and your application developed (think video-based customer support, education conference, any stuff for which WebRTC is a good choice), there are still a myriad of things to worry about for a production-grade service: user permissions, autoscaling, metrics gathering, dynamic distribution of all the video streams through multiple media servers in order to accomodate for varying loads, etc. While developing Kurento, I also work with the team that makes OpenVidu, a project that builds upon Kurento and aims to provide an all-in-one solution to all these problems, and handles all complexity of WebRTC for you. Have a look at it if you need more than just the basics offered by media servers such as Janus, Jitsi, mediasoup, or Kurento itself: https://openvidu.io/ https://openvidu.io/
- mboehm 6y agoWe started our journey with Janus about three months ago and I can just fully recommend it. It is an amazing well-written piece of software which is just as flexible and integrative as developers wish. E.g. Slack used Janus, at least in 2016 [0]. It is important to understand: Janus offers the ingredients for building great WebRTC applications (examples [1]), whereas Jitsi is more like a ready-to-go solution and got much more attentation as Janus did. Lorenzo and his colleagues are doing a really great job. In the space of SFU/MFU, one really needs to decide beforehand what kind of solution is suitable for which requirement. I have chosen Janus because we could integrate it by 100% in our software. For example, I was also looking into Jitsi. But compared to Janus it feeled so much more complicated and not suited for that specific job. However, it is important to point out, that this is no a ready-to-go solution. There is a long list of things you will have to dig into: - ICE (a way to connect if you switch between WIFI and LAN or to punch a hole into your fw) [2] - Cross-browser compatibility (Thank you iOS [4]) - TURN/STUN (Which matrix of udp/tcp and ports is needed for Hole Punching?), I recommend coturn. - Scalability: How many clients are planned? In my experience, CPU and bandwith are bottlenecks, we went with horizontal scaling - How do you gonna test your WebRTC application? So far great results with https://testrtc.com https://testrtc.com, but you probably also could accomplish a lot with Selenium. - Simulcast/Bitrate or Unified Plan (Use available bandwith and adapt on-the-fly) [3][5] But once you got it running, it is an amazing feeling. We are in 2020 and it is possible for an SMB to offer video conferencing to customers via a web-browser using your own infrastructure while being compliant to GPDR and other stuff. [0] https://webrtchacks.com/slack-webrtc-slacking/ https://webrtchacks.com/slack-webrtc-slacking/ [1] https://janus.conf.meetecho.com/demos.html https://janus.conf.meetecho.com/demos.html [2] https://webrtcglossary.com/ice/ https://webrtcglossary.com/ice/ [3] https://webrtcbydralex.com/index.php/2018/03/14/extending-janus-webrtc-bandwidth-management/ https://webrtcbydralex.com/index.php/2018/03/14/extending-ja... [4] https://webrtchacks.com/guide-to-safari-webrtc/ https://webrtchacks.com/guide-to-safari-webrtc/ [5] https://www.callstats.io/blog/what-is-unified-plan-and-how-will-it-affect-your-webrtc-development https://www.callstats.io/blog/what-is-unified-plan-and-how-w...
- jtchang 6y agoI am currently working on a project to solve my own needs around this. If anyone wants to collaborate or chat about it please e-mail me. I've done some work around the Xiaomi cameras with the custom firmware so love to talk to others about what they want to see.
- kdkeyser 6y agoI hacked together a proof of concept of using Janus to wrap the H264 RTSP stream of the Xiaomi Dafang into a WebRTC stream without transcoding, giving close to real-time streaming of the ip camera to browsers without needing a plug-in. Currently, Janus and Nginx (https/auth) run on a cheap VPS, and a device in the NAT network of the ip camera creates a Wireguard tunnel to get the RTSP stream to the VPS without needing to open/forward ports on the NAT. Ideally, more of the components could run on the camera itself, but I haven't gotten to cross compile anything to the MIPS cpu of the Xiaomi camera. Will contact you so we can chat.
- nerdbaggy 6y agoWe use Janus for a few hundred clients all spread out over a few instances. It works great for us. We tried kurento and it was just soooo hard and complex to setup. The Janus JS client library is pretty good and makes it really really easy
- bigmanwalter 6y agoJust finished setting up a Janus server while building a web application in the education space which needed video chat and the ability to record the videos. Absolute dream to work with! Thank you Lorenzo and the rest of the Janus team. Hopefully we'll get the chance to make it down to Janus Conf! If anyone is looking for help adding it to their app hit me up!
- VWWHFSfQ 6y agoFor those that are interested in Janus and WebRTC in general, I highly recommend reading Lorenzo Miniero's (creator of Janus) Ph.D thesis [1] on the project and the state-of-the-art of WebRTC. It's brilliant and enlightening. The Janus project is a really marvel of engineering. [1] http://www.fedoa.unina.it/10403/1/miniero_lorenzo_27.pdf http://www.fedoa.unina.it/10403/1/miniero_lorenzo_27.pdf (PDF)
- lminiero 6y agoI didn't know anyone else apart from me and and my tutor had read my Ph.D Thesis... :-) Glad you found it informative! Janus was indeed born during my research efforts there.
- spicyramen 6y agoJanus is amazing, very easy to use. I used to develop MCU/voice control Systems but unfortunately for large companies you really need a dedicated team to manage this Infrastructure. (scheduling, video/voice quality issues, among other things) good if you have the resources to do it
- greatjack613 6y agoNewbie here, Can someone explain why webrtc needs a server and how Janus fulfills this role? As far as I understand webrtc is meant to be peer to peer with minimal server signaling, so what role does a WebRTC server play?
- Sean-Der 6y agoThese are the big points I see for servers, I am sure there are more though! * Less resource usage for users If you do mesh signaling every user connect with each other via P2P. This means if you have a 4 person conference call everyone needs to upload their video 3 times. If you have a media server each user uploads only once, and then the server distributes the video. This means a lot less CPU and network usage for each user. * P2P Connections reveal details about the user If users are connecting directly to each other they are able to figure out details like their public IP. If you route everything through a server you can anonymize more things. * Protocol Bridging People want to view RTSP/RTMP/$X via WebRTC. A media server is the only way to make it happen. * Less variability to deal with When doing P2P connections you will deal with a lot more variables. It will be harder to figure out which user's internet is causing issue, or debug encode/decode issues. A few times running a SFU has come really in handy because I was able to debug something that would have been impossible when just doing P2P.
- xvector 6y agoWhy use C over Rust or Golang? It sounds like a security disaster waiting to happen?
- lminiero 6y agoIt's not like Rust or Golang will magically save you either. I've been programming for a long time, C is my main language, so that's what I started using at the time and what I'm using still today. We worked a lot on performance and stability, so hopefully it won't suck nevertheless ;-)
- ibc 6y agoYeah please, let the author know your preferred programming language so he'll rewrite the whole software.
- xvector 6y agoI wasn’t aware that the software had a history behind it, my bad.