How Streamplace Works: Syndication

When television started out in the 50s, all there was was broadcast television. Absent a data connection to every single home, television's only option was to follow radio's lead and broadcast content over the air. To get coverage in the every city in the country, major networks sponsored the creation of affiliate stations — independently operated broadcasters in every major city who would rebroadcast content from the major networks. This is called syndication.

Times change. With the rise of the internet we got something else — cheap data meant an entire generation of creators could get their video content online on YouTube and Twitch without going through centralized gatekeepers. Local TV stations are becoming less and less relevant every year. Content production thus became more decentralized, but content consumption became more centralized; 50% of internet bandwidth is currently used by just seven companies: Google, Facebook, Netflix, Amazon, Microsoft, Apple, and Disney . And most of that traffic is video.

I don't mean to romanticize the affiliate days. Affiliate stations in the Jim Crow south censored national broadcasts to enforce segregation. In the early days of Siskel and Ebert, affiliates in New York wouldn't deign to carry a show produced in Chicago. To this day, Nexstar and Sinclair affiliate stations briefly refused to broadcast Jimmy Kimmel for political reasons. In general, it's good that there are fewer barriers for creators getting their content to a global audience.

But something of value was lost. Affiliate stations could run their own advertising during their parent station's content; this mechanism was used to fund a lot of local journalism. Small broadcasters gave a generation of creators their first access to TV production equipment — that's how my dad's TV show got started . Smaller, more local communities having access to video distribution is a positive. It shouldn't just be megacorporations.

Streamplace is aiming to bring back some of that energy. We want to empower all of our users to operate their own little TV station. Not just video on the internet, but decentralized public broadcast. Not just consumption, but video relay, rebroadcast, and syndication. You probably can't beat Twitch by building a bigger CDN. But maybe you can by following the example of Bittorrent.

With the release of Streamplace 0.8, we're introducing the ability node operators to syndicate streams, and for streamers to control how their streams are replicated. Here's how it works:

Embedded Metadata v2

From here this post will pick up where HSW: Signing and Segmentation left off — might want to check that one out first if you haven't seen it!

So remember, Streamplace's broadcast format is all about embedded metadata. Your segments are sliced up into one-second MP4 files. Metadata within the files identifies them as yours. With this release, we've dramatically expanded what you can do with that metadata.

It's now possible to embed three new categories of data in your livestream in our Live Dashboard :

Content Warnings: This allows users to tag their streams as containing potentially sensitive content. Streamplace nodes can configure whether they want to allow streams in, and soon Streamplace viewers will be able to optionally hide content tags from their feed.

Content Rights: This allows you to define the copyright information for your livestream and pick from a variety of licenses for the content.

Distribution: This determines how your stream may be broadcast. May anyone syndicate your stream, or just certain providers? Also, can nodes archive your stream, or would you prefer them to automatically delete them after a certain amount of time?

The place.stream.metadata.settings record containing all of that data then gets embedded within your livestream, allowing syndicating nodes to respect your consent automatically.

Public Broadcast

After you start your livestream, the Streamplace node that's publishing it publishes a place.stream.broadcast.origin record to your PDS, identifying where your stream is currently available. This records fills a role similar to something like a Bittorrent tracker. These records contain an "ticket" which identifies how the server may be accessed — IP addresses and whatnot.

Once that node is published, other Streamplace nodes following the ATProto firehose can identify the record and begin replicating the stream. These, in turn, can publish their own place.stream.broadcast.origin records, fanning out distribution to avoid overwhelming the stream origin. If one of these nodes go down, all of the other ones can seamlessly switch to replicating it from a different node.

We're using Iroh for node-to-node segment distribution, a high-performance UDP protocol based on QUIC and implemented in Rust. Iroh has some very useful properties for replicating data: for example, it's very good at NAT hole-punching so that down the road you and a friend can stream Streamplace streams to each other with no third party intermediary.

At last, your content is separated from the platform it's hosted on.

We're ready for you to self-host!

We've made it really easy to run your own Streamplace nodes, but so far there hasn't been a very compelling reason to do so. Now there is! You can now host your streams on your own server and allow them to automatically replicate all over the world. You can also syndicate streams If you're comfortable with the basics of SSH and hosting, head on over to our installation guide and give it a shot ! As a node admin, you can presently control who you syndicate with the SP_ALLOWED_STREAMS parameter, but better user interfaces for node operators are in the works. Any streams that you allow to be syndicated by did:web:stream.place will show up on the website and the app!

Many thanks to the teams at Hypha and n0 for helping out with the metadata-embedding interface and segment-replication protocol, respectively. Couldn't ask for better partners.

If you need help setting up your own nodes, or if this kind of thing is interesting to you, drop by the Streamplace Discord!

Join the Streamplace Discord Server!

Solving video for everybody, forever | 354 members