[HN Gopher] Adding WebRTC support to OBS using Rust
___________________________________________________________________
Adding WebRTC support to OBS using Rust
Author : markdog12
Score : 202 points
Date : 2022-12-15 14:49 UTC (8 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| amalcon wrote:
| WebRTC is one of a very few newer browser features that has made
| me say "That seems legitimately useful!". Good to see it being
| integrated with more things.
| minimaxir wrote:
| Minor OBS tangent: as of macOS Ventura, OBS is now an _extremely_
| good screen recorder for macOS with much less UI jank: previously
| there were a few issues such as not being able to capture
| application sound or not showing the mouse, but now everything
| works well.
|
| Incidentially if this WebRTC support takes off, it may be a great
| tool for high-quality peer-to-peer desktop streaming.
| andy_ppp wrote:
| Did macOS Ventura help this somehow?
| pilif wrote:
| Yes. A point release added an API to do this better and Apple
| has contributed a PR to OBS to make use of the new API:
|
| https://news.ycombinator.com/item?id=30112595
| skrrtww wrote:
| Yes. Also worth noting that for OBS 29 (in beta currently),
| Apple has contributed native hardware encoder support for H265
| and ProRes, which both work very well. Very nice pick for their
| engineering outreach people!
|
| edit: Forgot to mention that they also contributed Continuity
| Camera and Desk Cam support, so those are built in to OBS now
| as well.
| minimaxir wrote:
| Is there a way to confirm if the encoding is H265? I use the
| Apple Hardware VT Encoder and it doesn't provide many options
| (I use a Mac w/ a T2 chip which should be able to do H265)
| skrrtww wrote:
| If you're on OBS 29, all options will appear in the encoder
| dropdown in advanced output mode. The full suite:
| https://puu.sh/Juc1K/33d8aecc33.png
| minimaxir wrote:
| Ah, those aren't visible to me so maybe the T2 isn't
| enough and you do need AS. A bit of a bummer :(
| dagmx wrote:
| They're only part of the Apple Silicon hardware so that
| would make sense (though a Mac Pro with an Afterburner
| card would have it too, but I'm too poor to know if that
| works)
| jjbinx007 wrote:
| Surprised nobody has mentioned the excellent https://vdo.ninja/
| encryptluks2 wrote:
| I think this only makes sense if they at least focus and get the
| components right that add the most value first, specifically P2P
| streaming. All the rest sounds like an advertisement, but I know
| it is open source and so I appreciate all the work.
| maeln wrote:
| > Co-authored-by: Sean DuBois
|
| Sean is everywhere that involve WebRTC ! He is doing an
| incredible job.
| nashashmi wrote:
| The other webrtc allstar is Feross. Some of my earliest uses of
| the tech came from his very simple and effortless
| implementation of sending files to someone else simply with a
| link.
|
| Instant.io
| obviyus wrote:
| Love to see more WebRTC! Shame to see FTL go, I contributed a few
| PRs to Lightspeed[1] which relied on FTL to achieve sub-second
| latencies.
|
| On a slightly off-topic note, I've been working on a simple
| WebRTC radio project[2] for a social listening experience. In my
| limited testing with a few friends, I was able to get < 100ms of
| lag (audio de-sync) between different players on different
| networks. It has been an absolute joy to use. The social
| experience of listening to music together somehow really appeals
| to me.
|
| It was pleasantly simple to get it up and running with socket.io
| + Mediasoup as the SFU. I plan to flesh it out a lot more shortly
| but I'm a bit of a novice. Would love to have some more
| experienced eyes on the project :D
|
| [1]: https://github.com/GRVYDEV/Lightspeed-ingest
|
| [2]: https://github.com/obviyus/radio
| zorgmonkey wrote:
| OBS is heavily architected around plugins, many of the built-in
| features including FTL output are plugins, so even if it is
| removed it would likely be possible to turn FTL support into a
| separate plugin that users can install. For reference the FTL
| code is in the plugin called obs-outputs (part of the main OBS
| repo). The only real limitation I know of is that it is likely
| not possible to make the UI exactly the same as it currently
| is.
| Sean-Der wrote:
| Big fan of FTL also, it is a shame that it was orphaned. In a
| world where Mixer lives on I could see FTL being a lot more
| places. ftl-sdk was nice to work with since it was just a
| single C library, and only concerned itself with streaming
| client/server.
|
| The way I see it WebRTC is the best way forward to enable
| people to build interesting things. I was so excited to itemize
| all the use cases that would be added to OBS by merging WebRTC
| support. I also wrote a little bit about 'Why WebRTC'
| https://pion.ly/blog/why-webrtc/. The big advantage WebRTC has
| over FTL is that is does more. Broadcast is a small part of
| WebRTC. I think WebRTC's superpower is that it can be used for
| so many different use cases and industries. Even if another
| protocol is better at a single use case, it is hard to beat the
| breadth of WebRTC.
|
| WebRTC isn't without its issues. I think that is fixed by
| better education + more implementations and owners. We shall
| see what the future holds :)
| ermir wrote:
| A few years back I also used WebRTC with different backends
| (Kurento, Puppeteer, Mediasoup) to try and make an audio-based
| social network. I got pretty far but I was on my own and a grad
| student at the same time so the project died. A few years later
| Clubhouse became viral, it was essentially the same thing I was
| doing.
|
| I still use WebRTC for my personal projects but the difficulty
| of compiling and embedding it in a backend makes it really hard
| to use by the masses. My next project is going to use Pion, and
| I'm going to make a static compilation and just distribute the
| executable and have the main service use IPC to communicate
| with the Pion module.
| Sean-Der wrote:
| That sounds like a really interesting project!
|
| If there is anything I can do to help please tell me, always
| happy to help :) Either email me sean @ pion.ly or join
| https://pion.ly/slack.
|
| Slack is better, but some prefer email!
| nunez wrote:
| This is very exciting. Latency can be problematic with OBS out of
| the box.
| glacia01 wrote:
| pavlov wrote:
| Read the PR description. The Rust-based library builds a lot
| faster than the C++ alternative by Google. The difference is on
| the order of less than a minute vs. half an hour.
| npigrounet wrote:
| Sean-Der wrote:
| DDRBoxMan wrote the original PR, a member of the OBS community.
| The choice of Rust wasn't taken lightly and I think it was the
| right decision.
|
| A few people outside the OBS community (me being one of them)
| wanted to help finish the PR. It will let me build some things
| that aren't possible today.
|
| If anything I am heavily biased AGAINST Rust. I work primarily
| on the Go implementation of WebRTC (Pion). I feel great about
| the decision to use webrtc-rs for OBS.
| capableweb wrote:
| Seems like you need to first understand a situation before you
| have a knee-jerk reaction to something and start calling people
| assholes.
|
| From one of the OBS contributors:
|
| > Firstly, I love the idea of having specific features /
| plugins available to be written in Rust, your point about it
| being able to encapsulate the heavy dependency without
| cluttering up the overall project is absolutely true.
|
| https://github.com/obsproject/obs-studio/pull/7192#issuecomm...
|
| Seems you (an anonymous HN user), are the only one being
| against having Rust parts in OBS, and none of the contributors
| have (so far) spoke against having some parts in Rust. Maybe
| let them run the project as they see fit.
| bijoo wrote:
| I see a description for why webrtc-rs was picked and it seems to
| center around the impact to build time and size. It would be
| helpful to know what other factors were considered.
|
| >Why webrtc-rs as the WebRTC library?
|
| > WebRTC has many libraries that we could have used. The first
| one we evaluated was Google's implementation known as libwebrtc.
| The time required to fetch+download would have been too much of a
| burden for the OBS code base. These metrics come from a Macbook
| M1 with a 400 Mb/s connection.
| simlevesque wrote:
| I know someone who did a full-fledged WebRTC plugin for OBS years
| ago for internal use only. Quite a shame it was never published.
| rektide wrote:
| I had extensive comments yesterday praising this (especially the
| low latency), & calling out the future horizons (simulcast,
| multi-streaming) it might lead towards.
|
| It's still questionable to me to call this WebRTC though. My
| understanding is it's only output is WHIP, WebRTC-HTTP Ingestion
| Protocol, which is used by CDNs to actually do the WebRTC
| protocol browsers do. It's near WebRTC but a couple steps short,
| seemingly. https://www.ietf.org/archive/id/draft-ietf-wish-
| whip-05.txt
| Sean-Der wrote:
| Sorry I missed your comment yesterday! So many things got
| called out in the PR that I completely forgot about HN :/ You
| should re-post it in this thread! I really want people not
| familiar with see what is possible.
|
| Agree on renaming from `webrtc_output` -> `whip_output`! I
| believe that is done in the current PR?
| [deleted]
| Sean-Der wrote:
| Copying rektide's comment here. I think it hits some really
| interesting points
|
| -----
|
| This is my vote for PR of the year in open source! Holy shit.
| There's amazing thing after amazing tbing listed.
|
| > Latency. With WebRTC we are able to achieve sub second
| latency. With our initial measurements we see ~120 Milliseconds
| from Broadcaster to Playback. We believe we can continue to
| bring down this number as well.
|
| More speculative, but awesome futures here that OBS will either
| adopt or eventually fall on the wayside to a worthy competitor
| on:
|
| > Broadcast at all angles. WebRTC supports multiple video
| streams in the same session. OBS could experiment with
| broadcasting multiple scenes at once! Viewers could then switch
| between scenes or different views in the same game.
|
| > Simulcast. WebRTC allows broadcasters to upload multiple
| streams of different quality. OBS users could upload high, med,
| and low streams themselves.*
|
| Also notable Rust based, working via FFI. Is this the first
| Rust in OBS?
|
| Im trying to understand a little deeper how this implementation
| works. There's seemingly some hardware encoding support, but as
| compared to using something general & flexible like gstreamer
| it seems a bit more hardcoded, and embedded in webrtc-rs. Not
| the worst I guess.
|
| It also has this somewhat odd "whip" output, where it dumps the
| stream via http. Im not sure if that is the only output right
| now. This targets some CDN systems, which then host/peer over
| actual CDN. Calling this webrtc feels a little weird but ok.
___________________________________________________________________
(page generated 2022-12-15 23:00 UTC)