The m3ddity-server is an implementation of the UPnP Media Server specification. It aims to be highly extendable by a plugin-mechanism, based on CDI (Contexts and Dependency Injection).

NOTE: A very early version of the media-server has just been committed to SVN. Only the protocol adaptor framework is basically working, the rest is under heavy construction.

The m3ddity-server is based on the following frameworks:

  • Cling - An excellently designed UPnP library
  • Weld - An implementation of the JSR-299 "Contexts and Dependency Injection"
  • RESTlet - An implementation of the JAX-RS standard
  • UI Web Framework - Not yet determined

Design

The basic MediaServer does not know anything about UPnP. It is just a class that provides media browsing and searching capabilities. The UPnP Media Server interface is implemented as a ProtocolAdaptor plugin. Access to media backends is implemented by ContentProvider plugins, which allows new backends to be added by implementing new plugins.

Protocol Adaptor

A ProtocolAdaptor is a plugin that provides access to the Media Server functionality from external clients. The UPnP protocol access is implemented by a Cling plugin. Another ProtocolAdaptor provides a REST API to the server functionality. And a third one provides a Web GUI for graphical access to the server.

Content Provider

A ContentProvider is a plugin to access backend systems that provide content of any type. The primary ContentProvider is the one for the file-system. This provider allows browsing of a folder hierarchy and by that access to the media on local storage. There could be another provider for Shoutcast for example. The streamcast scraping library extracts the different channels and displays them in a virtual folder hierarchy.