Kodi Community Forum

Full Version: GSOC Proposal: Streaming for Android remote client
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Project Information:
  • Summary:
    This project aims to improve the remote client for android devices by adding new features to the existing application and by fixing some of the bugs reported in the project bug tracker.
    Also the project tackles the battery consumption problem caused by Wi-Fi and proposes an alternative solution using Bluetooth.

  • Benefits:
    This project will improve interactions between the user and Xbmc. Most people already have a smart phone so they don't have to invest into new hardware. An application that allows remote control of the Media player may be of great interest to an user.
    Wi-Fi is a big battery consumer and an alternative solution may be preferred by some users.

  • What will the project focus on:
    The project will focus on adding extra functionality and also on solving some of the current features bugs. The important parts from the projects are Android (both presentation and business part) and the API used by the web service to communicate with the media player.

  • Goals:
    Primary Goal: Enable Media Streaming to device.
    Secondary Goal: Download media locally to device's SD card, Improve existing user interface
    Optional Goal: Bluetooth connectivity, proof of concept.

  • How will I achieve this:
    In the first week I will get accustomed with the project by fixing some minor bugs and understanding the architecture of the project.

    After this ramp-up period I will extend the Web Service API to allow streaming of media files. Android Media player accepts URLs to be set as data source so the web service has to provide the data stream from the file and export it to a connecting host ( Remote client). I have already done something similar by streaming files over SMB protocol. Once the media input stream is available to the client I can either stream the files remotely or copy them locally on SD card.
    I will then create a user interface to allow local file browsing and media streaming, that fits with the rest of the application.

    I would like to improve the existing UI by fixing some of the high priority bugs and enhancements posted in the issue tracker.

    I would like to offer an alternative to Wi-Fi, which is a battery drainer, by connecting via Bluetooth instead. To implement this feature I will have to create a Connection Handler that accepts Bluetooth connection over Serial Port Protocol (SPP) and a Message Adapter that translates the messages received over Bluetooth to the Web Service. This will be implemented only as a proof of concept, and the mobile device will have limited functionality (remote control only) with this connection type. I have some prior experience with Bluetooth API on an android device.

  • Timeline:
    June 17 – June 23: Ramp up period. Small bug fixes to get familiar with the project.
    June 24 – July 7: Extend JSON API to allow streaming over http.
    July 8 – July 21: Creating User Interface for streaming media files.
    July 22 – July 28: Download media locally Option, user interface
    July 29 – August 11: Stability period. Bug fixing
    August 12 – August 26: Bluetooth concept
    August 26 – September 1: Stability period. Bug fixing
    September 2 – September 8: Documentation
    September 9 – September 16: Overhead period (holidays, unforeseen problems)

  • What does it touch in XBMC:
    Android-xbmcRemote project and the Web Service.

  • Requirements:
    In order to complete this project the developer will need to have a firm understanding of Object Oriented Programming, Java and Android API. Also the developer will need to know basic SQL and how to interact with JSON-RPC API.

  • Possible Mentors:

Personal Information:

Name: Cristian Ichimescu
Email: [email protected]

Background Info: I am student at University Polytechnic of Bucharest, Faculty of Automatic Control and Computers. I am in my second year of Master of Science majoring Internet Engineering Systems.

Computer skills and knowledge:
Object Oriented Programming, Semantic web, Adaptive and Collaborative Systems, Multiple Agent Systems, Information Retrieval Systems, Android API, Design Patterns, Artificial Intelligence, Database Usage, Kernel Programming, Communication Protocols.

If you have any further questions or feedback to offer please contact me.

I am looking forward to collaborating with you,
I submitted my proposal on http://www.google-melange.com/gsoc/homep...e/gsoc2013 before the deadline ended. I also posted my proposal here in order to get feedback and more information.

Best Regards,
Cristian Ichimescu
Can you be more specific about the "Extend JSON API to allow streaming over http" part?
What does JSON-RPC have to do with streaming? You can already get the paths to the media files through JSON-RPC and use the /vfs handler of the webserver to access those files.

Furthermore a few days ago I merged a PR that implements HTTP Range support for our webserver which makes it possible to seek in files provided by the webserver. So theoretically you don't need to know about any other protocol than HTTP and just pass the player the URL of XBMC's webserver and the file you want to access and XBMC will take care of whatever it needs to read the file and then pass it on through HTTP. TBH I haven't tried it on an android phone but it works through VLC.
I would like to use the JSON-RPC to obtain the URL of a media file. I did not know that you already implemented the HTTP range support.
Mostly in that time frame I would like to be able to stream any media file to android and be able to control the stream (play, pause, fast forward).
Android media player has support for HTTP streaming
OK. JSON-RPC already provides the "file" property for all the playable media items and using Files.PrepareDownload you can get the path that you need to request on the webserver to get the file data. Basically it's always
http://<ip>:<port>/vfs/<url-encode(file path)>

With the HTTP Range support you should be able to achieve buffering, seeking, pausing, resuming etc and could also support resumable download for local storage (in case the user forgets that he's downloading a movie to his phone).

I can't say much about the Bluetooth part. I think elupus added that to the code.
Thanks for the information. It will come in handy when developing this feature