Let’s talk about streaming!
With the proliferation of digital media files, the media server is becoming more and more of a reality. For families that have small children, they are a boon due to the protection of the physical media. For others, they simply hold the promise of instant recovery and playing of a particular movie.
However, we went on a search to find a video media server that would meet the following criteria:
- Efficiently serve to multiple computers or devices
- Supports open formats like Matroska (mkv)
- Cross-platform using Open Source players like MPlayer and VLC, enabling a consistent interface.
- Open Source
- Supported streaming protocols such as RTSP, to allow for seeking within the stream
The search ultimately ended in partial failure. While there are solutions that meet criteria 1, 3, 4 and 5, relatively few meet criteria 2, and of those that do, there are problems; more on that in a minute.
First we looked at FFServer, a the little known server that comes with the FFMpeg transcoding package. While it met criteria 1,2,3 and 4, it was not completely stable and used http for the streaming protocol.
VLC followed. RTSP? Check! Matroska? Check! Mplayer and VLC? Check! FOSS? Check! Stable? No! VLC supports streaming in a server fashion, and it does support Matroska, however, the files that it streams suffer from audio synchronization problems. The advice from the VLC irc forum? Use a web server. It is faster and more efficient. Unfortunately, a web server was more than I wanted. Plus it doesn’t support RTSP. VLC’s server counterpart, VLS, is no longer supported and only supports older technologies like MPEG, and AVI, so it wouldn’t work either.
Jinzora? Great, however it is too picky about how the media has to be installed. Ampache? Again, it is web based. Coherence? Nope. Coherence, uShare and the PS3 Streaming Server, Mediatomb and the newcomer MiniDLNA show great potential, and they use DLNA/UPnP. DLNA and UPnP are technologies that show great promise for media servers in the home, and support for the protocol comes from devices like the PS3, Xbox 360 and other hardware solutions. At this point in time, Totem comes the closest to supporting DLNA/UPnP with a plugin from Coherence, but that eliminates a cross platform solution as VLC doesn’t look like it support DLNA/UPnP until well after the 1.0 release, and MPlayer doesn’t support it at all.
And the winner is Darwin Streaming Server (DSS), from Apple. While it doesn’t support Matroska, it does meet all of the other criteria, and doesn’t suffer from audio synchronization problems. In addition, the media can simply be stored in a single directory or be organized into subdirectories. Its native format is MP4, easily available from Handbrake, and the only preparation that the files need is something called hinting. Hinting, and an accompanying preparation that simply add synchronization information, adds additional streams to the MP4 container that tell DSS how to stream and seek within the stream. The result is nearly flawless streaming from my Amahi HDA to an XP client. MP4Box, part of GPAC, handles the hinting and synchronization details with a single command. Even with multiple streams going, my HDA machine idles at a throttled 800MHz.
Additionally, DSS offers a modular approach to development, so plugging in additional support for technologies like Matroska may be forthcoming.
DSS suffers from one problem that some might find annoying, the lack of text based subtitles. MP4Box can add the stream and hint it, but DSS doesn’t send that portion of the stream. If the subtitle is burned into the H.264 stream, then there is no problem, but for multilingual or hard-of-hearing households, this may be a deal-breaker. For all others, if you are already using MP4s the sky is the limit. If you are looking at Matroska, well, the conversion process from Matroska to MP4 isn’t difficult.
Right now, for Amahi users, there isn’t a one click solution for DSS but we hope to . This should be soon fixed. For now, installing isn’t difficult as the dependencies are few. Simply download the source code from Apple, apply the patches for the 64bit version, if needed, and compile. Detailed instructions are available from CodeProject.
While there are possibly countless other possible solutions, this is the one that I found that did the job with the least overhead, while conforming to most of the criteria. Enjoy!
[Photos courtesy of ishrona]