> The application has lots of external dependencies. In particular, you need:
> Twitch - a Twitch account with an application registered on their developer console.
I'd be really interested to see what happened if a popular streamer used a platform like this to completely bypass how Twitch supports itself, while still using Twitch's bandwidth / services / etc. Presumably Twitch would ignore it until it became a problem, and then change their TOS to disallow it.
However, if it gets kids to docker compose, well that's a net positive.
They can’t get rid of 3rd party donations because they’ve been there forever, but they can continue to incentivise every other kind of revenue except them.
Anecdotally 3rd party donations have dropped a lot over the last couple of years in relation to other forms
1. Get a server. Not a tiny one.
From what I've heard it is bandwidth that costs the most? Like $20 a month gets me a droplet on digital ocean with 4TB transfer, 4GB memory, and 80GB of storage. If you have 25 concurrent viewers each watching 100 hours of Livestream every month and each hour of 1080p60 is 1GB, how much ___ will you need?
25 * 100 * 1GB = about 2.5TB? Does that sound about right?
You can hack on this foundation to create your own solution.
Also, you can use Terraform to easily run this on Azure:
It's fairly cheap, costs about 25 cents an hour on DigitalOcean. Compare to hundreds of dollars for some other live streaming services.
I'll definitely keep this in my pocket as we move towards our own live streaming platform. Thanks for sharing!
Thanks for sharing.
Much better deal (and probably way better CDN) than AWS provides, but AWS egress rates are suicidally bad, especially for high bandwidth stuff like video. If you're doing any serious streaming, avoid AWS like the plague unless you like livestreaming yourself filing for bankruptcy.
You can also get per-hour Wowza AMI EC2 instances, so scale to those when you peak, and fallback to self-hosted for lulls.
ffmpeg -i [...] -codec:v libx264 -profile:v baseline -pix_fmt yuv420p -codec:a aac -tune zerolatency -f dash -window_size 5 /tmp/live/live.mpd
You might want to use the nginx RTMP module, too, if you want to receive an RTMP stream from e.g. obs and wang-bang it into DASH.
I'll write up a more detailed blog post at some point.
Chrome does not support HLS.
DASH isn't plug and play. It's an XML representation describing how to ingest media streams using something like Media Source Extensions.
There are a lot of players out there that will do this heavy lifting for you.
morsel ingests h264 & aac and produces fragmented mp4 files & playlists.
plainview reads the playlists and uses MSE in the browser to play them via the web
pupil is a WIP server that reads h264 & aac over TCP and passes that data to morsel, then uploads to any s3 compatible storage (AWS, Minio, etc)
The swift stuff works on Linux, iOS, tvOS, etc
There's also a WIP project called "kubrick" https://github.com/krad/kubrick
It's a simple POP wrapper around AVFoundation that allows for building media processing pipelines.
There's an example in the project for reading video samples and passing them through a series of Metal shaders to produce fun effects.
I feel like any streaming implementation should be setup you broadcast to put yourself hosted setup, and to twitch/youtube/facebook/et. al. I haven't done any live stream/podcasts, but I think there is already proxy software that does this.
At my company , we work with organizations who do livestreaming to enable live Q&A, moderated chats and polls. If anyone's interested in hooking up such interactivity to your own livestreams, drop me a message!
Might be useful for others!
If possible I'd like to avoid an opinionated hosting service like Google Cloud Launcher or AWS ECS, but I recognize that it's probably necessary. The only open source one-click deploy I've seen is a church service, but the author of that project accomplished it by with a separate app that provisions the necessary DO droplets via API and presenting the credentials to the user.
[Disclosure: I run the Certified Kubernetes program.]
I think with Twitch it's not really necessary. The community itself is generally, with exceptions, not toxic (being curated by streamers).
The 'who made this and why' seems to indicate some minor antagonism for the platform financials. Their take on bits transactions is definitely abhorrent, but they haven't blocked 3rd party transactions yet. People know they are getting screwed when they buy bits, but they have other options.
I hated bits when they came out, but they fill a bit of a niche role that a streamlabs/paypal donation doesn't. If the end goal is to shift money from viewer to streamer, bits smooths a few obstacles.
Once a bits purchase is made, they can be spent on any streamer instead of repeating the transaction for every person. The actual tip itself is an almost frictionless transaction, just a few keystrokes in the chatbox. This avoids the bounce rates seen when a user has to open a separate browser window, possibly log into paypal, or providing information to a third party site, etc. Most streamers I've discussed this with privately have said that they agree on the rates, but that it's still been a net benefit (sorry, this is just anecdotal). The worry of course is that it's a precursor to complete control of transactions (eg, banning paypal/streamlabs/etc) despite claims this won't occur.
But all of that aside.. I think the project would get a lot more traction if you at least appeared to try to work WITH the platform instead of against it.
There's a lot of value you can add here just to augment the system instead of combating it. Help the streamer build their online profile. Some thoughts:
* Keep the in-line stream, embedded with the Twitch chat if possible.
* Build a CMS system for the streamer to showcase custom content while he or she is offline.
* Add a merch store or integration.
* Embed the streamer's twitter feed.
* Show off their Discord.
* Keep the forum.
* Add a tool to sync up community permissions across various tools (twitch permission, discord, steam groups, etc).
* Show off their YouTube content.
* Add a calendar
* Show when the streamer's friends are online and streaming.
* Make all of this modular so streamers can pick-and-choose
* Optional WYSIWYG style edits (I know, but.. it makes this more accessible to users)
There's a lot more. Some of the above may be bad ideas, and I'm certain some are not for every streamer (and I don't think should just turn on all-of-the-things if they did exist).
I love the idea of giving streamers a way to build further upon their Twitch audience. It could increase engagement and help Twitch. It could also help reduce a streamer's dependency on a single platform, eventually, without outright confronting that platform.