It’s been a surprisingly busy few months between freelance and personal projects, I’ve been mostly working inside of a PHP Framework I wrote a few years ago called Vogon.
Vogon isn’t anything overly special, but that’s part of why I like it so much. It’s a prototyping framework, designed to do just enough to bootstrap a project that I can immediately start writing logic code. If you’re interested at all in the framework you can find it on GitHub (https://github.com/stephentkennedy/vogon), it has a small wiki that explains most of the moving parts, but there aren’t a lot and you should be able to glean what’s going on by just scanning the files if you’re familiar with PHP. I’ve used it a few times over the years for a bunch of different styles of projects, from data-aggregation, to my own personal CRM.
The bigger project of the two in the title, and the reason I wanted to write a blog post and document the progress is the media server web interface I am writing on top of the Vogon framework. You can also find it on GitHub (https://github.com/stephentkennedy/vogon_media_server).
The Problem
The person I’m writing the server software for has a collection of DVDs they’ve invested a great deal of time and energy collecting over the years, but they lack the convenience of streaming and their current BlueRay player has pretty laughable up-scaling performance, making their movies a pain to watch on modern resolution TVs.
They approached me to ask if I could fix up a solution for them as far as a home streaming server was concerned.
The Solution
Well, there are a lot of solutions already on the market. Flex immediately sprung to mind, but since I was doing this project as a favor, and I wanted to cut a few corners on the cost of the server itself (transcoding is expensive, if you didn’t know), I decided I would write my own solution on top of a bog simple DLNA server.
The DLNA format is one of those secret formats that’s not really supported by anything, but is strangely supported by everything. PS4 and Roku for example both support DLNA out of the box through their media players. And the custom web interface I was writing could expand compatibility to anything with an HTML5 compliant web browser.
So, Vogon Media Server was born.
It’s not finished yet, but it does have a pretty good feature list so far:
Meta Data Aware Mass Import
- Auto-generate Thumbnails for imported videos
- Auto-populate meta data required for history tracking features
- Auto-import common meta data fields for supported audio formats (Artist, Year, Composer, Album, Track Number)
User Profiles
- Support for multiple user profiles
- History tracked individually between profiles
Audiobook Support
- Turn individual audio tracks into a coherent audio book
- History tracking allows resuming across devices
Custom HTML5 Video Player Interface:
- Autoplay next episode for items categorized as part of a TV series
- History tracking for media resuming across devices
Custom HTML5 Audio Player Interface:
- Playlists (Ongoing development)
- Shuffle Play (client-side and client/server hybrid)
- Visualizers (3 currently, but hopefully the vizualizer code will be rewritten to be module and these can be developed as plugins)
- Media key support
- Partial Media Meta Data support (Depending on your browser and device, you will get media controls on lock screens or when the browser is not the active window)
- Sleep timer
And I’m gonna be honest, I’ve got the prototype running on a Raspberry Pi 3B, and I’ve been using it every day. It’s very quickly replacing Spotify as my primary media player simply because when something annoys me about it, I can just change it myself instead of complaining to support.