One of the most exciting ideas put forth at this year’s devcon was a concept called the XBMC Mesh. It was a natural extension of Alcoheca’s GSoC project and is slated as a potential feature for the version of XBMC that comes after Frodo.*
*Somebody seriously needs to come up with a good ‘G’ name.
Today, we have software that works like XBMC, where there’s a database and a player all built together in one piece of software. We also have software like Plex, where the database has been pulled out and acts as a central server, and each instance of player software acts as a mindless drone being controlled by the all powerful server.
But what if there was a third way? What if a system were developed where each software instance was intelligent and could communicate with other software instances? For example, you set up XBMC for the first time on your tablet, then when you are done, you receive an Android set-top box in the mail with XBMC pre-installed; you plug that box in, and it announces itself on the network.
Your XBMC tablet sees there is a new instance of XBMC on the network and asks you, “Would you like to add the set-top box to the mesh?” When you say yes, your XBMC tablet tells your XBMC set-top box where all of your shows/movies/pictures/music are and what addons you have installed. Rather than relying upon the tablet or other server for this information, the XBMC set-top learns where everything is located itself, so that it can always find it if the tablet has been turned off or taken out of the house.
Now, because these devices can intelligently communicate with one another, every single one of them can act as a remote control for one or all of the others. Your tablet can watch a show or tell your set-top to watch a show (along with play, pause, fast forward, record, etc.). You could theoretically start a whole-home audio session. You could, naturally, start watching a show in the living room, continue the show on your tablet in the bathroom, and finish the show in your bedroom.
And the crazy thing about this network is that it would be incredibly easy to set up. You tell one device where your content is, and all the rest of the devices know. You turn on your set-top for the first time, it sees the network, and it asks if you want to join. Heck, each device could even be smart enough* that if you, for example, took your tablet to your sister’s house, it could ask if you’d like to switch networks and keep a memory of multiple meshes.
*Eventually, of course, it would become so intelligent that it would decide to destroy all humans. Hopefully that won’t happen until we finally find out who the mother is on How I Met Your Mother.
An important aspect of this mesh system would be in playing nice with devices that exist outside the mesh. For example, the set-top box would likely need to interact with IR remotes and communicate with the CEC of your TV/receiver. Naturally, each device (particularly, each non-mobile device) would need to act as a uPnP server (given that most of the communication would be done via JSON and extended uPnP in the mesh in the first, this should be quite natural) for legacy devices that can only act as DLNA/uPnP clients. Given the cost-effectiveness of ARM hardware and (thanks to Sigma Designs) now MIPS hardware, it would arguably even be possible to set up an inexpensive router with headless XBMC software that not only acted as a mesh base, but also behaved like a simple router for the home network.
Of course, there are some challenges that would need to be ironed out with this idea. Would you still have to share your local content over something like SMB, or would you install XBMC on your local content server(s) and make it(them) act as uPnP servers for the mesh? Would it be better for there to be a shared database that each software instance latched onto while it was in the network, or would it be better for each instance to write to its own database? Or could you do both, so that the library immediately appears on your device via the shared database, but a redundant local database is written in the background while your CPU is idle or you are watching a movie or something? How would you deal with new binary addons like PVR backend addons that are entirely separate programs? Would each device have to install the binary addon to be able to make use of it, or could you stream from the XBMC instance that has the PVR addon installed and simply communicate with that server via JSON? In fact, would it be possible to abstract out nearly everything to do with XBMC and connect it all together into this mesh, so that, in addition to the normal library, addon settings and other personalized aspects could be shared along the mesh.
Needless to say, something as massive as this idea isn’t going to happen over night. It might not happen at all. To put an idea as huge as this together would take a lot of smart people and a lot of man-hours. But my God, would it be awesome.