Extensions XBMC 2015

= Introduction =

This project idea is to develop various plug-in for kodi (formerly xbmc).

More information on Project Extensions XBMC Sujet 2015

=Documents=
 * Software Requirements Specification (SRS)
 * UML Diagrams
 * [[Media:Proj-2014-2015-xbmc-rapport.pdf|Report]]
 * [[Media:Proj-2014-2015-Ext_XBMC2015-transparents.pdf|Slides of the Presentation]]
 * [[Media:Proj-2014-2015-xbmc-flyer.png|Flyer]]

= Team =


 * Tutors : Nicolas Palix


 * Members : Clément Valentin, William Bobo, Jules Legros, Gabin Teulon


 * Departement : RICM 5, Polytech Grenoble

= Project objectives =

= Progress of the project =

The project started January 26th, 2014.

Week 1 (January 26th - January 30th)

 * Project discovery
 * Discovery of Kodi (formerly XBMC) and the add-on structure

Sprint 1 (February 02nd - February 14th)

 * Installation of a shared library in kodi between computers
 * Use of mySQL database/server on the SalleAIR computer
 * Synchronization of the movies lecture (can resume a movie on any computer, viewed list updating)
 * Discovery of dev tool for the kinect : we chose to use C++ library (native library) instead of python one's, because on windows, it is not userfriendly at all, and in the aim of providing an addon that can be easily installed, it's not the good solution.
 * Discovery of the source code of the remote control android application

Sprint 2 (February 23rd - March 10th)

 * Development of the kodi add-on
 * Pop-up mechanism
 * Port communication in order to communicate with the kinect program. We first wanted to use D-Bus or ØMQ but once again, the fact that the installation is not easy on windows, is incompatible with the fact that we want an addon easily installable by anyone.
 * Development of a kinect program to count the number of people in front of the TV
 * Development of the NFC part, and including it in the remote control android application

Sprint 3 (March 10th - March Xth)

 * Developing a multi-platform solution for the kinect
 * Creating scenarios in order to decide of interaction with the NFC tags and the kinect

= Choices for the remote = We used the official remote because there was things already done last year Bluetooth seem perfect for following someone without interaction but there is material differences which change signal's power and made it unreliable. NFC add a user interaction but we are sure that the remote is here and we already known how to deal with NFC on Android Our tag are very small. We can write around 144 byte. At first, it was not a problem because we just needed un id, but it work with only one remote. When we choose to make it work with all the remote, we needed to write all the data about un host. Where was not enough place and we had to choose most important information. We choose to do it with a minimum of change and before each commit, code was cleaned to reflect it so if we choose to push our modification to the original repository, our push will be clean. We choose not to communicate with XBMC through an addon with our own socket because we found JSON-RPC. JSON-RPC is already implemented in the remote and allow to control XBMC through JSON request. The remote have access to everything through JSON-RPC and it avoid to deal with negotiation between add-on. We thought of using Kodi on Android for the "follow me", it consist in moving the playing media from a TV to the smart-phone then to another TV. We choose not to do it because Kodi on Android is a native application and it would take too much time to retro-engineering this.
 * Choice of the app
 * Follow-me : NFC or Bluetooth
 * Tag content
 * Remote integration
 * Communication with XBMC/Kodi
 * Centralisation on remote
 * XBMC/Kodi on Android

= Enhancement =
 * Follow me on Kodi Android
 * Deal with more user-case
 * More options and user choice
 * UPNP server for follow me on media not shared on the network

= To continue = We did not found any documentation about the remote. So you have understand it yourself with your Android skills. The main part which deal with NFC tag is "NFCIntentActivity.java". This is the core of the remote application. It read a tag, add the host if it dosn't exist then do the follow me thing. "FollowMeActivity.java" was also added for writing on NFC and settings.
 * About the remote