Android based multiroom media system (Educational project)

At the HAN, University of Applied Science, in a course on Operating Systems and network programming this project was introduced by Ruud Ermers. There were five groups of bachelor students who could choose from 7 projects. This project, however, was chosen by two groups of students. For this, Ruud Ermers played the role of product owner and technical coach. Scrum was used as software development method.

The idea is to produce a multiroom audio system. Now this has been done many times before, but the goal was to have some new features, build a cheap system and obtain knowledge about modern techniques.

The product owner had two extra requirements:

  • The systems should be able to play the same music in selected rooms (this is called party mode play)
  • The customer wanted a simple API to extend the solution. This simple API should have objects in the problem domain, not implementation domain.

We have large experience with building such systems (having build a system with a server and many clients programmed in .NET, HTML/Javascript, Android, Object pascal) so as a customer it was exactly known which requirements to have, and which problems or pitfalls may occur.

In the end the two groups both succeeded building a streaming upnp server in C# plus an Android client. This was based on the cling api (available here), which implements upnp. The requirement on having a simple API made it necessary to dive somewhat in the api and extend it with an extra layer. On this layer it was easy to program the requirements.


Of course, the main goal of this project was not to build a real system, but to be educational. However, a group of students have extended the idea and made a working system. Objectives from an educational point of view were:

  • Use existing libraries to quickly build a system. Do research on more libraries before choosing. Communicate with the product owner on research.
  • Creating good documentation on all levels. (design, implementation, research)
  • Use existing protocols (upnp/dlna) instead of defining your own.
  • Combine learned knowledge in a new situation.