Kodi Community Forum
GSOC 2012 - Proposal - Printable Version

+- Kodi Community Forum (http://forum.kodi.tv)
+-- Forum: Development (/forumdisplay.php?fid=32)
+--- Forum: Development (/forumdisplay.php?fid=93)
+---- Forum: GSoC 2012 Development (/forumdisplay.php?fid=161)
+---- Thread: GSOC 2012 - Proposal (/showthread.php?tid=126931)

Pages: 1 2


GSOC 2012 - Proposal - aniket - 2012-03-28 10:24

Hi all,

I'm a 4th year Bachelors Computer Science student at Indian Institute of Technology Roorkee. This is the first time I'm participating in GSOC, hope it's not too late to apply. I've used XBMC for a couple of years now, even developed some plugin for it. I've been interning the previous 2 summers, so didn't get a chance to get involved with GSOC.

Improved UPnP serving and client
Summary:
The basic problem is to enhance the user experience for multiple clients by extend the existing XBMC libraries and adding more functionality. Users with multiple clients shall view a single consistent and up to date image of all the music and video database. Using JSON-RPC API the server can be updated of any action the user takes (such like, watch, bookmark etc.). The server can then update all the other clients related to that account, giving user a unified view.
How will I achieve this:
The first phase will be finding some efficient way of extending the existing UPnP server API to handle all relevant metadata. This will need some code modifications in the existing library which I will make sure doesn’t break anyone else’s work.
Next thing will be taking care of various platforms and input devices. Depending on which platform and device the instance of XBMC is running, there might be minor to major differences in code. Listen for relevant events from various input devices and make RPC call to update the server.
Third phase will be to use the 2-way communication to update other clients with the latest information. This part is to be done on the server side and similar to the second phase, needs to take care of the type of device. Client interface to decide
What will the project focus on:
The main aim of the project will be to cover all platforms and devices and keep all media status in sync with every other devices.
Benefits:
User: Users having XBMC instance running on multiple devices with a large database of music and videos can feel tension free about handling it and keeping it all in sync.
Developers: I plan on making a generic module that can be exploited by as many people as possible keeping future changes in mind. I do not intend to limit the code to a predefined set of functionality such as like, bookmark, rating etc. but intend keep everything expandable so that future needs may also be met. An easy set of functions so that anyone can understand and use them.
Goals:
Extending the UPnP interface to accommodate the current needs of sharing more information over multiple clients.
Transparent send and receive of data, with user having option to view the history of changes.
Generic and streamlined set of functions that can be understood and used, and extended by anyone, if need arises.
What does it touch in XBMC:
It will touch the UPnP API codebase as more functionality needs to be added to it. JSON-RPC API may need to be extended if the need arises.
Requirements:
I believe knowledge of different platforms such as Windows, Linux and Android is needed beforehand. Knowledge about JSON and Remote Procedure Call handling is also required. EventClients and EventServer knowledge is also useful since they are what will trigger the RPCs. And finally knowledge of programming languages like Python, Java, C++, C# will be a must. An LIRC remote might be required, but since I have that already (from a project I did some time back), it should not be an issue.
How long have you been writing software for work/fun?
I have been writing software for more than 3 years now. I am proficient in Python, Java. C# and C++. I have some previous experience of developing XBMC plugins and scripts in python; here is the link for the same:
https://github.com/aniket134/XBMC-video-plugins
Oh I just realized this... Please ignore the poor code management Confused , its such an old piece of code. It was my first experience with Django, XBMC and Git. I didn't even know the use of .gitignore then!! That's embarrassing... Rolleyes

Is this your first GSOC?
Yes
Have you contributed to XBMC or other FLOSS projects?
Yes. Here is the link:
http://brihaspati.iitr.ernet.in:8080/brihaspati/servlet/brihaspati/
I can provide more info about it via mail. There is another project, but it’s on the intranet in my institute.

In case of any disambiguation please do tell me. I have decent experience in video plugin and script development, so I might have got some technical details wrong. Once again, I hope its not too late... Smile

Thanks
Aniket


RE: GSOC 2012 - Proposal - spiff - 2012-03-28 10:51

project proposals can still be registered; read here for how to register it officially.

in general; i like your idea and approach. i fear it might be a bit too big for a gsoc task, so maybe boil it down to some of the subtasks.


RE: GSOC 2012 - Proposal - aniket - 2012-03-28 12:02

(2012-03-28 10:51)spiff Wrote:  project proposals can still be registered; read here for how to register it officially.
Oh, sorry about that... I've done that now.

(2012-03-28 10:51)spiff Wrote:  in general; i like your idea and approach. i fear it might be a bit too big for a gsoc task, so maybe boil it down to some of the subtasks.
Umm... okay. Maybe I can split my project into the following:
  • Expanding the UPnP metadata fields in XBMC library so that all the useful fields are available. This can take care of the much needed support for like, rating, bookmark transfer. This part will require some tweaks in the XBMC's libraries.
  • Second I can work on JSON-RPC to update the server watch status of videos, bookmarks, rating etc. These will be transferred on user action on client to the server. The server can then update other clients, thus giving a unified view of the media library.

I believe this is a pretty doable target for GSOC timeline.
Please tell me if there is something missing or wrong here... Any suggestions welcomed...


RE: GSOC 2012 - Proposal - Montellese - 2012-03-28 13:02

(2012-03-28 12:02)aniket Wrote:  
  • Second I can work on JSON-RPC to update the server watch status of videos, bookmarks, rating etc. These will be transferred on user action on client to the server. The server can then update other clients, thus giving a unified view of the media library.

As an FYI on the JSON-RPC work concerning updating data in xbmc's database: Currently it is not possible to update any data through JSON-RPC but I have already done the necessary work to provide this functionality for movies, tvshows, episodes, musicvideos, artists, albums and songs. I just need to update & rebase that work and then I will present it in a pull request on github for merging. So some of the work on the JSON-RPC side in xbmc is already there. This however does not include any logic to trigger updates in other xbmc installations. It just provides the API to be able to update fields/attributes (like playcount, rating, lastplayed etc) of media items in xbmc's database.


RE: GSOC 2012 - Proposal - aniket - 2012-03-28 13:26

That's nice, then my second part is reduced to using the JSONRPC.NotifyAll function, I guess, if it can update all the related clients.


RE: GSOC 2012 - Proposal - spiff - 2012-03-28 14:23

that's better. point is having some subgoals so we can quantify it a bit. e.g. 2 out of 3 tasks finished etc.


RE: GSOC 2012 - Proposal - aniket - 2012-03-29 07:27

(2012-03-28 14:23)spiff Wrote:  that's better. point is having some subgoals so we can quantify it a bit. e.g. 2 out of 3 tasks finished etc.

okay

As for the UPnP metadata fields, I was going through XBMC wiki UPnP page, and found out about Platinum UPnP SDK. It says that the server code is written using this SDK. If this is so, then I can modify the existing (or add new) XBMC MediaServer functions try to improve the information sent by including the required metadata mentioned earlier. Do tell me if I am on the right track here?

Also what else would you like me to break down into subgoals as a part of the project?

Thx


RE: GSOC 2012 - Proposal - jmarshall - 2012-03-29 07:47

Yes - most of that is done in UPnP.cpp - take a nosy through and see how it's setup thus far. There's several fields that aren't yet transferred over correctly but are available in the library (and likely fit at least some standard upnp field name).


RE: GSOC 2012 - Proposal - aniket - 2012-03-29 12:14

Hmm.. I did that and from what I could see, there are lots of fields in VideoInfoTag and MusicInfoTag classes but only some of them are attached to the PLT_MediaObject in PopulateObjectFromTag function. Whereas nothing is attached for photos. This is done while building a media object in BuildObject function. CUPnP class then uses this function in UpdateState call to update the state of the media/folder objects, which is done every 500ms.
I guess what needs to be done is to insert the remaining tag info in PLT_MediaObject and then use it to update the server and clients.
Again, is this right? Also, can you elaborate what you mean when you say, fields aren't transferred over correctly, is there a bug or something else?

Thnx for the pointer...


RE: GSOC 2012 - Proposal - pecinko - 2012-03-29 18:20

I was just curious if this will be more like extension of existing functionality in XBMC or a separate optional application/daemon that could eventually be made to run on NAS?

I.e. will this be optional standalone "library backend" or this rather aims to provide XBMC to XBMC "metadata talk pipe".


RE: GSOC 2012 - Proposal - aniket - 2012-03-29 19:40

I was going through this thread here, its a little old, but gives some perspective as to how the development has taken place to handle the issue.
XBMC now ships with built in MySQL server, UPnP server and client and JSON-RPC. So I guess the way they want to handle this issue is through extending the existing functionality in XBMC. For instance using MySQL dbms allows sharing userdata across multiple XBMC systems and having UPnP + JSON-RPCs allows multiple clients to interact with each other and enables client side editing of metadata. I don't think running a separate daemon on NAS will be required, as we can accomplish the task from within XBMC library routines.
Also, I guess a portion of this project is about making it all transparent and effortless for the user too. So the user having many XBMC machines doesn't have to worry about keeping everything is sync. All of them communicate and keep themselves synced with each other.

Again, do correct me if I am wrong...

Thnx for the reply, it got me thinking...


RE: GSOC 2012 - Proposal - pecinko - 2012-03-30 14:48

Here are some links to some other threads that you may find helpful

http://forum.xbmc.org/showthread.php?tid=99297&highlight=xonx
http://forum.xbmc.org/showthread.php?tid=96649
http://forum.xbmc.org/showthread.php?tid=92310


RE: GSOC 2012 - Proposal - RockerC - 2012-03-30 15:15

Some great ideas there. I hope that you will make the UPnP part stay as much compatible with DLNA as it can, same as Plex now claim that they do in their media server software http://elan.plexapp.com/2012/03/29/this-aint-your-grandfathers-dlna/


RE: GSOC 2012 - Proposal - aniket - 2012-03-30 17:23

(2012-03-30 14:48)pecinko Wrote:  Here are some links to some other threads that you may find helpful

http://forum.xbmc.org/showthread.php?tid=99297&highlight=xonx
http://forum.xbmc.org/showthread.php?tid=96649

Oh nice threads there... That's quite similar to what the project will intend to do but again as an in-built XBMC feature, rather than an add-on or a plugin...

(2012-03-30 14:48)pecinko Wrote:  http://forum.xbmc.org/showthread.php?tid=92310
(2012-03-30 15:15)RockerC Wrote:  Some great ideas there. I hope that you will make the UPnP part stay as much compatible with DLNA as it can, same as Plex now claim that they do in their media server software http://elan.plexapp.com/2012/03/29/this-aint-your-grandfathers-dlna/

Yes, while extending UPnP functionality, keeping it DLNA complaint will be a priority, as DLNA standards are very widely used.
However, I'm not sure if something similar to what this post says is what is intended of the project. Neither do I think the creation of a new DLNA server like PMS is asked of the project... But yeah, basic idea of sharing of metadata info across multiple installations.

Again, do correct me where I am wrong...

Thanks for your input guys, it was rather useful... If there are more suggestions and inputs, please keep 'em coming... Smile

Oh, and just off the topic, the forum rules link in the signature of some members seems broken (404). Wasn't sure where to give this info...


RE: GSOC 2012 - Proposal - pecinko - 2012-03-30 17:47

Yup those two are python plugins and that third thread was general discussion about a possible solution.

I thought it might be of interest to you as those plugins were functional and that discussion have some posts with opinion of some of the devs.
Like this one http://forum.xbmc.org/showthread.php?tid=96649&pid=752370#pid752370

Just a thought from my side. Off I go now as am not able to help much more than this.