Banshee Media Player


I have been involved in contributing to Banshee media player since January and planning to kill some bugs. By the help of contributors and previous work I have been able to figure out some key design factors in Banshee code.
Banshee is an open source media player which is integrated with the present and future releases of Ubuntu. It has a nice interface for play music, videos, and other media as well sync it with portable devices. Banshee uses GStreamer for audio and video decoding (playing) and encoding (ripping, format conversions).
High level architecture of banshee which is more like a platform rather than just a program.

By exploring the code and getting the information from contributors the Banshee contains three separated layers as in the figure.
These are some of the few principles that have been used in Banshee which suggest it as an platform or framework,
• Separation of UI code and non-UI code.
• Separation of the platform/OS specific code.
• Distinction between the parts that could be potentially useful for others and the "Banshee only” parts.
The extension infrastructure comes mostly from Mono.Addins which has been designed to be easy to use and useful for a wide range of applications: from simple applications with small extensibility needs, to complex applications which need support for large add-in structures.
In order for Banshee to be adaptable through extensions, it has to be very modular, with as low coupling as possible between each module. It is concerned that it helps a lot with maintenance. This modularity then helps to solve the performance versus portability problem. For example, Banshee file I/O is done with pluggable backbends; each backend is a Mono.Addins extension and implements a set of interfaces in the Banshee.IO namespace. The original reason for that is the fact that the standard .Net API (System.IO), which is available on all platform, performs poorly on Linux. So on Linux Banshee was using the Mono.Unix API instead, while still being able to fallback to System.IO when necessary. Because of this architecture GIO API was implemented as an additional backend, without changing the core of Banshee.

Comments

Popular posts from this blog

GSoc 2012 Final Report

Progress of the Voice Control For Banshee

Update Voice Control for Banshee