Video on Demand (VOD) options for ATProto

We were discussing video hosting for later playback aka “video on demand” VOD for videos from ATProto events to embed on web pages and attach to posts.

Note: Stream.place is great for streaming! VOD is on the roadmap.

What options are there for storing and playback of videos?

Hosted

Vimeo

Has been a good platform for many years.

  • Recently bought by Bending Spoons, so likely going to get worse.
  • Might be OK for the short term.

Example from EuroSky Live “showcase” page:

Videos are also available for download which is great.

Yes, Vimeo links embed and playback in Bluesky posts!

YouTube

for obvious reasons, we don’t want to perpetuate more content here.

Flickr

(Boris) I signed up for a Flickr Pro account and uploaded a EuroSky Live video.

Here are the upload requirements:

  • Each video can be up to 1 GB.
  • The maximum resolution for videos is 1080p.
  • Although videos of any length can be uploaded, video playback is constrained to the first 3 minutes for free members, and 10 minutes for Pro members. Playback is also limited to 30 fps (for both free & Pro members.)
  • If you’re having trouble uploading a video, try converting the file to a different format.
  • Restricted videos are not permitted.

So, especially for free members, this is the same length as Bluesky video uploads, but here we’re talking about suggestions for event organizers and others on where to host their video. With talks being 20min to an hour (or online tech talks that are 1.5 hours), this isn’t a great fit.

Testing video embeds, videos do not embed and playback, it just shows a thumbnail:

Internet Archive

You can upload videos to the Internet Archive at no cost. We could make an ATProto Community section, and this is probably a good idea for the tech talks and ATmosphereConf that are on YouTube right now

See DWeb Camp for an example organization that has lots of video.

FAQ on movies

Internet Archive video links don’t embed – this is something we could advocate for.

Bunny CDN

I signed up for a trial account with Bunny Stream

I uploaded my same EuroSky Live video:

Embedding doesn’t work, but seems like an obvious thing to allow list:

Self Hosted

Peertube

PeerTube is a full federated video hosting platform that runs on ActivityPub.

It can sync with YouTube channels.

One could also use BridgyFed to show up on ATProto, but videos won’t embed. Would need to advocate for showing embeds.

TODO: Other self hosted?

Bsky Video and Embeds

Bluesky supports only very short videos of max 3 minutes. These play “natively” in the Bluesky clients / through their CDN.

There are also external media embed settings (Preferences > External Media Settings).

Of those, Flickr might be worth looking at if video embeds as well as photos / photo galleries.

1 Like

The hosting part of this makes me wonder if it makes sense to be able to have a different PDS for some specific applications. I should be able to sign up for a separate PDS for my stream.place data and everything else (my “daily driver” PDS) could be Bluesky’s PDS. I recognize that the PDS is supposed to be application-agnostic, but I wonder if there will soon be an issue with expecting any old PDS to be able to store tons of VOD data. Sure a PDS could start charging per GB but as soon as you start requiring payment for video storage and moderation on video you’re expecting a PDS to do a lot. It basically makes every PDS have to have a largest minimum amount of features to be viable.

Or maybe instead the better solution is to keep PDSs agnostic but build “plugins” that help a generic PDS implement charging for storage, and another one for moderation on video content, etc. Just spitballing.

Btw, with stream.place does the PDS store all video data as blobs in the repo? Or does it just store metadata like the CID and keeps the actual video data in a CDN somewhere?

3 Likes

MediaCMS is open source and can run on a pretty minimal VPS if you’re only uploading a few videos a day. I’m working on a commercial project that is built on MediaCMS, and we’ve been pretty happy with it. Not sure if/how well it supports OAuth; it’s not required (yet) for our project. With something like BunnyCDN in front of it, the global delivery UX would be very good.

1 Like

This is roughly the Streamplace plan, to be video optimized PDS, and we came up with multiple service endpoints to maybe solve this.

Today points to storage elsewhere. With their own PDS, each 1 sec chunk will be a record + blob

Also: moderation lives at the app layer. By default the conceptual model is that the PDS is a file store. If you start looking at where stuff is stored (S3 compatible object store), we know file hosts don’t moderate, applications do.

(Yes, bad stuff scanning on ingest is a well known pattern)

Yeah making this a native ATProto project is kind of a different layer. It could be straightforward to couple this with OAuth ATProto login as one step.

Writing this up made it clear that one of the pivot points is allow listing arbitrary embeds.

And/or having like an in browser editor to make clips that can get uploaded natively.

Thanks for sharing Media CMS as an option!

Actually, looks like Bunny has a video product now, too. Bunny Stream Pricing | Simplified and Flexible Video CDN Pricing

1 Like

Yeah this looks really good. I might give it a trial.

What if the PDS ran an instance of PeerTube as a sidecar service, and then its own local copy of bridgy fed for repos on that PDS?

1 Like

Seems like something like cloudflare stream or backblaze b2 might be less hacky fits.

Generalizing an interface to these kinds of solutions should make future more ideal infra plug and play.

Bunny looks like a potentially great fit, not familiar with it though. I vaguely recall Automattic had some kind of solution in house, but it may be tightly wordpress integrated. I’ll look around and see if there’s anything there.

Seems like a combo of Backblaze for bucket storage and a number of cdn providers is what I’m seeing as recommendations for cost, performance, and control over data. Cloudflare and bunny as well as fastly are on the list of partner orgs.

We’re in enterprise plan territory, so technical implementation aside, i wonder if the ecosystem could piggyback on someone’s enterprise plan, or if it’d make sense to have a collective organization manage the legal and financial side of this kind of infra.

Wait wait wait.. are we talking about solving vod for the ecosystem, or hosting specific videos from an event? I just realized I may be attempting to answer completely unrelated questions. Lol

The scope here is - where to upload videos that isn’t YouTube, isn’t a shitty company, AND extremely nice to have, ideally plays inline as an embed in the Bluesky client.

And also: not American providers, or at least clearly labeled options of knowing which are US based companies and which aren’t.

Bunny looks to be a good one, I’m going to experiment.

If someone can try video on Flickr that would be helpful. It might be a great “works today” option if embeds work.

(And yes, people would like to generally solve this / replace YouTube, but that’s a product solution that someone can take a run at)

I think you’d probably want to replicate the app.bsky.video.uploadVideo XRPC endpoint, and have that do the conversion between formats and sizes. Maybe have it accept either a blob or a blob URI. If it receives a blob, then write the blob to the PDS as an original file (perhaps with sensitive metadata stripped), and then process it through video infrastructure.

A once reasonable german option was transload.it; For larger video files, you could even implement support for the TUS protocol.

For streaming there’s bunny stream, api.video (french), and mux (american).

For larger videos, it may actually make sense to have a side-car service kinda like knots where you can host it yourself or someone else can which actually stores the large video blobs.

Thanks for the additional pointers to services!

For the purposes of this thread, I’d love to pick a video host that can work today, not actually program a bunch of things. e.g. what can we recommend to non technical users of how / where they can upload their videos.

Looks like the main blocker will be allow-listing video embeds in the bsky client.

I’m going to test out Flickr and Bunny.

i like the idea of bunny, not just for the existing Bluesky PBC relationship but also this woudl need to be explored for stream.place

@iame.li Thoughts?

1 Like

Yeah, I think the key factor here is enabling embeds for experience parity with YouTube and Vimeo.

Internet Archive feels like another site where embeds could be enabled.

Also: this is not about building a new thing – I think because Bsky already uses Bunny having that as a piece of programmatic tool chain is ALSO interesting, but I’m trying to figure out what to recommend.

Streamplace can and will have its own solution that I’m excited to hear more about, help find partners & funding (Europe has an even more massive need here to do “not YouTube” – maybe Internet Archive EU could get involved) … but I kind of want to know what we can recommend today.

There might something fun like “save to Bunny” for Streamplace as the smallest thing I can think of that could be available sooner. An open API that means it could go to IA or Vimeo or even YT is probably the best product play.

Streamplace VOD current state of affairs: we’re doing a lot of work right now on livestream export and archival but just for streamers downloading their archives, not with a focus on public VOD distribution. In that context, something like “export to Bunny” could be potentially interesting and something we could deliver on relatively quickly! But that’d just be raw livestream recordings; often people want to clean things up and split up livestreams before posting (especially for something with “talks”).

Past that, I think we could do a lot if we just agreed on a VOD lexicon, with the Bluesky three-minute clips providing a starting point. That’d allow users to define their content libraries in their repos and could decouple the content with the distribution; you could imagine a front-end that renders the content library with support for Bunny, Cloudflare, etc, with an Internet Archive link as a fallback. You can even go a step further with something like a Bittorrent magnet URL if you’re not looking to monetize the distribution.

4 Likes

Yeah, there’s a whole continuum of users here. Not everyone YOLOs from Zoom like I do, with nothing but some trimming.

Yes, these are all excellent ideas … “decoupling content from distribution” is exactly it. You define the metadata and could indeed have more than one link.

Would probably be worth looking at the database structure and AP format that PeerTube uses.

1 Like