2012-01-06, 16:03
There were request in the forum for more then one library.
I would like to put it a little further:
I have a distributed environment with more than one media server (a large server for archiving all older stuff, a xbmc media center in my living room with current media / tv recordings and recent dvd / br content, a NAS with other video stuff / TV shows etc.
I also have small xbmc boxes with no local media in my home - they just stream from the backend servers.
Not all of this media sources are turned on all the time. They can be fired up by remote Power-On signals and switch off when not in use after some hours or on a remote shutdown command.
One can have xmas movies on one NAS and Helloween / Horror stuff on another, or adult content on a 3rd. They would be seldom used sometimes - however I don't want them to be always visible in the library, but only when they are turned on, some of them even password protected.
It would be awesome, if each media server could have it's own repository of media information stored localy along with the media (thumbs, infos, database´s and everything needed to represent / feed the xbmc UI of the players), because the media and the meta data belong together and make no sense one without the other.
On the other side, the players recognize if a media source is online, and if - it automatically uses the remote database to update it's UI cache (front end xbmc boxes will show only available content). If another source goes online, the information is merged, if a source goes offline - the information is purged from the UI.
The backend systems could also take care for the scraping and updating of their databases. If they are just "dumb" NAS devices or usb hard drives, a central server instance could do the job for these tasks and delivers the mySQL engine / database of online available content and the corresponding share locations for the metadata / media currently available online.
This could allow a seamless plug&play integration in a distributed environment.
It also enables a common setup for all xbmc front end players and a 'start playback in one room, continue watching in another' - scenario... A dream would be a zero conf xbmc front end, booting from ROM or flash or over the network with no local storage at all. it would get a dhcp ip and would scan the local net for a xbmc server containing all config information, skins etc. from the repository.
Dynamic custom categories could filter then according to the needs of each user (smart filters, favorites...) based on profiles stored in the repository. Advantage: same custom, user specific UI in all rooms - whereever you go.
Most of the stuff needed is already there thanks to the migration to a mySQL based library. What is needed is a abstraction layer between content storage with library and presentation layer, that aggregates the currently available libraries / Metadata to the UI. This could be done as a windows or linux service, that polls all sources and updates the local SQL instance on startup and every 5 minutes or so if something changes on the network.
We have already abstraction layers there.
We got the data layer (called add source and supporting almost all network protocols available)
We got the metadata stored along with the media (using amber media manager)
We got also the (lokal) mySQL Database for search and categories like artists, genre, year etc.
We also have the concept of independant profiles with own configs and databases.
While allowing skins, we have a layer between this data and the presentation engine.
And finaly there is the media playback engine (based on mplayer) that plays back all this stuff on the frontend.
We also have the straming ability and the remote control stub using http servers.
But all this is running on the front end on a single machine.
So what is missing:
1. we need to migrate to a distributed database. The database parts must be stored together with the media on the data layer.
2. we need a aggregation database, that caches the currently available metadata for performance reasons.
3. we need a service on the frontend, that scans the network for changes and updates the SQL cache.
4. for the last optional issue (no local store, net boot for xbmc front ends) a config master (share?) needs to be setup, that caches user profiles, skins, plug-ins etc.
What are the advantages:
- one seemless, consistent UI on all xbmc instances everywhere in the house.
- metadata and library consistency (no additional scans required per instance)
- easy possibility for roaming of media playback
- easy remote control for one room by a UI in another room
- easy zone setup (sync playback / multiroom)
- easy integration of future home automation system
- easy maintenance and customization of all devices from one central point
- concept of 'satelite units' can be realized (e.g: UI: Android, Windows Mobile, iOS, Windows, Linux, hidden playback box without human input interfaces like keyboard, mouse, IRremote controlled only over the net, intelligent media servers) not just for one player, but for all in the house. The user can choose what modules to install on what machine, so the hardware requirements could be adjusted to the needs (25$ credit card sized PC, ION Boards, 20 Disk NAS Beasts, Tablets whatever...).
So what separate Parts would make sense:
- Data Storage
- Scraper engine
- sqlite3 db | mySQL Server instance(s) for the Data Layer
- sqlite3 db | mySQL Server instances for the presentation layer(s)
- Network discovery Service for the presentation layer
- central Config Storage for Profiles, Addons, Skins, Settings
- Playback engine
- UI engine
you can have each on one instance or combinations on separate machines, there could be one config storage (master), many data storages with or without scraper engines and mySQL instances, many playback engines and many UI engines either with a local SQL cache or using a centralized mySQL Server instance / network discovery.
Does this sounds reasonable?
I would like to put it a little further:
I have a distributed environment with more than one media server (a large server for archiving all older stuff, a xbmc media center in my living room with current media / tv recordings and recent dvd / br content, a NAS with other video stuff / TV shows etc.
I also have small xbmc boxes with no local media in my home - they just stream from the backend servers.
Not all of this media sources are turned on all the time. They can be fired up by remote Power-On signals and switch off when not in use after some hours or on a remote shutdown command.
One can have xmas movies on one NAS and Helloween / Horror stuff on another, or adult content on a 3rd. They would be seldom used sometimes - however I don't want them to be always visible in the library, but only when they are turned on, some of them even password protected.
It would be awesome, if each media server could have it's own repository of media information stored localy along with the media (thumbs, infos, database´s and everything needed to represent / feed the xbmc UI of the players), because the media and the meta data belong together and make no sense one without the other.
On the other side, the players recognize if a media source is online, and if - it automatically uses the remote database to update it's UI cache (front end xbmc boxes will show only available content). If another source goes online, the information is merged, if a source goes offline - the information is purged from the UI.
The backend systems could also take care for the scraping and updating of their databases. If they are just "dumb" NAS devices or usb hard drives, a central server instance could do the job for these tasks and delivers the mySQL engine / database of online available content and the corresponding share locations for the metadata / media currently available online.
This could allow a seamless plug&play integration in a distributed environment.
It also enables a common setup for all xbmc front end players and a 'start playback in one room, continue watching in another' - scenario... A dream would be a zero conf xbmc front end, booting from ROM or flash or over the network with no local storage at all. it would get a dhcp ip and would scan the local net for a xbmc server containing all config information, skins etc. from the repository.
Dynamic custom categories could filter then according to the needs of each user (smart filters, favorites...) based on profiles stored in the repository. Advantage: same custom, user specific UI in all rooms - whereever you go.
Most of the stuff needed is already there thanks to the migration to a mySQL based library. What is needed is a abstraction layer between content storage with library and presentation layer, that aggregates the currently available libraries / Metadata to the UI. This could be done as a windows or linux service, that polls all sources and updates the local SQL instance on startup and every 5 minutes or so if something changes on the network.
We have already abstraction layers there.
We got the data layer (called add source and supporting almost all network protocols available)
We got the metadata stored along with the media (using amber media manager)
We got also the (lokal) mySQL Database for search and categories like artists, genre, year etc.
We also have the concept of independant profiles with own configs and databases.
While allowing skins, we have a layer between this data and the presentation engine.
And finaly there is the media playback engine (based on mplayer) that plays back all this stuff on the frontend.
We also have the straming ability and the remote control stub using http servers.
But all this is running on the front end on a single machine.
So what is missing:
1. we need to migrate to a distributed database. The database parts must be stored together with the media on the data layer.
2. we need a aggregation database, that caches the currently available metadata for performance reasons.
3. we need a service on the frontend, that scans the network for changes and updates the SQL cache.
4. for the last optional issue (no local store, net boot for xbmc front ends) a config master (share?) needs to be setup, that caches user profiles, skins, plug-ins etc.
What are the advantages:
- one seemless, consistent UI on all xbmc instances everywhere in the house.
- metadata and library consistency (no additional scans required per instance)
- easy possibility for roaming of media playback
- easy remote control for one room by a UI in another room
- easy zone setup (sync playback / multiroom)
- easy integration of future home automation system
- easy maintenance and customization of all devices from one central point
- concept of 'satelite units' can be realized (e.g: UI: Android, Windows Mobile, iOS, Windows, Linux, hidden playback box without human input interfaces like keyboard, mouse, IRremote controlled only over the net, intelligent media servers) not just for one player, but for all in the house. The user can choose what modules to install on what machine, so the hardware requirements could be adjusted to the needs (25$ credit card sized PC, ION Boards, 20 Disk NAS Beasts, Tablets whatever...).
So what separate Parts would make sense:
- Data Storage
- Scraper engine
- sqlite3 db | mySQL Server instance(s) for the Data Layer
- sqlite3 db | mySQL Server instances for the presentation layer(s)
- Network discovery Service for the presentation layer
- central Config Storage for Profiles, Addons, Skins, Settings
- Playback engine
- UI engine
you can have each on one instance or combinations on separate machines, there could be one config storage (master), many data storages with or without scraper engines and mySQL instances, many playback engines and many UI engines either with a local SQL cache or using a centralized mySQL Server instance / network discovery.
Does this sounds reasonable?