Skip to content
mrumpf edited this page Jun 11, 2012 · 15 revisions

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).

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.

Clone this wiki locally