Wednesday, November 12, 2014

Beanstack: Online Video for the Free World

Occasionally I'll get a really cool idea and crank out a demo of it to see how feasible it is, then forget about it. This is an idea that I've been kicking around for a while but I was spurred to act this summer when my dad asked me for a way to share and stream videos from our home server.

YouTube pretty much has a vice grip on the online video market. Don't get me wrong, I love YouTube (obviously) but this does mean that when YouTube makes a change, it rocks the world of users and content creators alike (see: subscription box changes, Google+ comment integration, advertising).
The problem is that nothing does YouTube like YouTube does - but what is YouTube? It's a video sharing website at its core, but there are also entire communities built within it. It's an educational resource, a communication medium, a revenue-generator, a library of stock content for content creators . YouTube is everything.
So how do you fix such a complex service? You probably can't. At least, if you're just some guy like me. But, if I had my druthers, I would break the problem into small pieces.

Beanstack was borne of the UNIX philosophy: "Do one thing, and do it well." I figured, if you're going to do video hosting like YouTube, fundamentally you just need an easy way to host videos. This is what Beanstack is - it's a Rails web app that allows you to upload videos, then behind the scenes it transcodes them and serves them using HTML5 - and this is all it does.
Beanstack would then implement a secure login system (OAuth2) and an API that can be accessed by clients (which I would call beanpods) and these clients provide the commenting, sharing, advertising, or community-building aspects. All Beanstack does is host the videos.

Picture this: a user sets up a Beanstack server, and uploads his videos to it. Then, he connects his Beanstack account to a beanpod (working on the name), which is the server that people go to to watch and comment on his server. A beanpod could be anything - anything that implements the Beanstack API and communicates with a Beanstack server. From Beanstack, the user would be able to control which beanpods have access to their videos - and if the user controls the instance of Beanstack, they fully control their media.

What do I see as the advantages to this? It the user more control over their content:
  • They choose which Beanstack instance to use, or to run their own, and beanpods behave the same whatever their choice.
  • Users aren't locked in to one platform - if a beanpod social site goes down or makes unfavorable changes, the user's content isn't affected as it's hosted on the Beanstack instance. Similarly, if the users decide to move their content to another Beanstack instance, they can keep their presence on whatever beanpods they connect to.
  • Beanstack and beanpods can be integrated - if you wanted to run everything at the same time yourself, you could effectively have your own YouTube competitor.
Will this idea take down YouTube? Of course not, and that's not my goal. I just want to get the online video world thinking about how they can really own their content.

Now of course, it's a lofty idea and I'm not quite there yet. Here's what works:
  • Simple user/pass authentication - I'd like to switch to OmniAuth eventually
  • Video uploading (but the routing is really bad, so you can't really share videos)
  • Video transcoding (using delayed_job and ffmpeg)
  • HTML5 playback
My original plan was to keep it under wraps until I had more to show for it (namely, a working API and a fix to the routing problems) but I just don't have the time.
If anyone has any comments, I'd love to hear it! But I think it's time that I got this idea out there.

View the code on GitHub!

Post a Comment