GSoC - Unified PVR Frontend

One common GUI front-end that can control multiple PVR/DVR/HTPC back-ends


 * Student: Alcoheca
 * Primary mentor: JMarshall
 * Backup mentor: elupus


 * IRC: #xbmc-pvr on freenode for development and testing discussion.

= The source of this new concept = The original idea for this concept was initially posted in this XBMC feature suggestions forum thread: Since then many similar and related ideas have been discussed in these other XBMC forum threads:
 * http://forum.xbmc.org/showthread.php?t=28918
 * http://forum.xbmc.org/tags.php?tag=unified+pvr

= GSoC proposal for 2008 = This is a discussion about a proposal for XBMC's Google Summer of Code 2008

Current Draft
The application below was submitted 30/03/2008. Since then I've been concentrating on my Uni work (will be all finished by 2nd week of May 2008), and the qualification task (libnemesi integration to use inside XBMC's in-house video-player).

Reports to follow in the relevant forum threads: http://forum.xbmc.org/tags.php?tag=unified+pvr

Name
Alasdair Campbell (IRC & XBMC Community Forum username: alcoheca)

E-Mail
Username@gmail.com

Project Title
One common GUI front-end to control multiple PVR/DVR/HTPC back-ends

Project Synopsis
Bring platform independent, full-featured digital TV facilities to XBMC. XBMC is the leading user application in the convergence between music, video, the internet and home entertainment. Starting out on the Xbox platform, XBMC has since been ported to the Linux, Mac OSX and Windows platforms. My proposal is to bring one aspect which until now has been missed in XBMC to fruition: Digital TV playback & recording scheduling facilities, and specifically, implementing control over the popular MythTV backend. Because of the limited time, only support for MythTV will be within the remit of this proposal, however APIs will be created to allow other programmers to easily add support for their favoured PVR application as a client 'plugin' for this API in XBMC without having to understand the internals of XBMC. It is not the intention to include actual recording, schedule downloading and clash avoidance functions in this project - there are many applications already excelling in this area. Rather, XBMC shall provide a universal front-end to these applications and offer a more complete home entertainment system to it's end-users.

Project Tasks
To being about these features in XBMC requires three general tasks:
 * 1) Design and implement the Graphical User Interface (GUI) for this feature. Most of this work shall be on an EPG (Electronic Programme Guide) that is intuitive, responsive, modular, and extensible; scaling well from the smallest screen size (4:3 NTSC) to the largest (1080p HD). Users will also need notification of scheduled recordings, any schedule clashes, problems with the server (reception quality, low disk space etc.). The EPG shall be stored in a SQL database, alongside current databases of video and music collections.
 * 2) Design and implement a PVR Client API to allow user created application-dependent 'plugins' to facilitate communication between the XBMC front-end and the user's PVR back-end server, access functions for the internal EPG database.
 * 3) Make an exemplar 'plugin' to control the MythTV backend server for the above described PVR Client API for XBMC, (as XBMC already have a basic MythTV client the code for it will be reused, extended and modified to fit the PVR Client API as a 'plugin').

Project Benefits
Many people (the author included) view the ability to control their PVR server software as a sorely missing feature from XBMC. While all of the current PVR applications offer front-ends and interfaces, quite often these are poorly designed, unsuitable for non-technical users and are generally poor at playing other media types. XBMC will offer a user friendly, powerful and unified access point for the user's television viewing along side their other stored media.

Project Tasks in Detail
The Graphical User Interface is a crucial element to this proposal. The GUI comprises of the EPG, Now & Next channel switcher, programme information on-screen display (OSD) and the Settings page.

The EPG will offer a grid view of the upcoming channel schedules, with the bulk of the screen taken up with this view. Space will need to be utilized to it's fullest in order to provide a workable view for people with standard definition 4:3 displays. The grid will scale gracefully for all screen sizes (It's the authors intention for this addition to XBMC to be as inclusive as possible). The programme's genre (when available) will be highlighted by colour, with icons being used to indicate tasks set to perform on those programs (record, automatic viewing, commercial stripping etc.). Additional programme information will be retrievable with ease. The ability to search through programme titles & genres will be present along with some simple status reports from the server (recording minutes available, reception quality and other pertinent issues). The programme schedules, list of recording timers and status messages will be retrieved from the database in real-time.

The dedicated SQL database for the EPG meta data shall be stored in separate SQL database file, (XBMC already features SQLite with existing separate databases for videos and music).

The Now & Next Channel Switcher is just an easy way to flick through what's currently on other channels while tuned to a particular channel. This involves a small OSD window showing the names of current and upcoming programmes along with the ability to rotate through the channels with the remote control. The Programme Information Page will take this form too and will show the 3 of 4 line synopsis which is available from most sources of programme listings. This window could also be used for warning messages that the user needs to be made aware of quickly – lack of space on recording server, total loss of communication etc.

The PVR Client API is the link between the GUI and the recording server. The API is what encourages the support for multiple PVR applications. Initially, a MythTV based client will utilize this API to update the database, translate requests to and from the PVR server, push updates to the OSD & EPG and set-up the video and audio streams to the internal FFMpeg based player. With this modularisation, developers inexperienced with XBMC internals will be able to include support for their specific applications with relative ease. It's worthwhile noting that this allows internals changes to the XBMC code without the plugins needing to be updated. It's imperative that the design of this API, it's access functions and data types are well thought out in advance in order to reduce the amount of reworking of plugins that would need to be done if there were changes to the API. It's hoped that in the future, this API will allow individual plugins to add custom commands and fields to the GUI.

The bulk of the user configurable settings will concern the plugin - changing settings on the server, choosing options for content delivery etc. These settings will be incorporated into the existing settings screens.

Project Timetable
This is an aproximate roadmap of the tasks to do.
 * 1) Publish my goals to the XBMC community and try to get some feedback and suggestions on my plans. I will get familiar with the specific XBMC internals that I require for my work. (until mid of June)
 * 2) Implement features in the order they are specified above. That means that I will begin with the implementation of the EPG and the Now & Next Channel Switcher GUI parts, continue with SQL database and the PVR Client API, and then finally convert the MythTV client into a 'plugin' for this API. I will try to implement things so that they can be used despite they are not completely finished. (until beginning or mid of August)
 * 3) Testing of all features with the help of the XBMC community. This will begin as soon as one component is finished and should be completed by the end of August.

Candidate Details
I'm a student of the University of the West of Scotland (formally the University of Paisley) studying a BSc Hons. in Computer Games Technology. Originally from the Outer-Hebrides, I've now lived in the city of Glasgow for 9 years.

I've a strong affinity for XBMC and open source software in general, a proud advocate for the movement and it's values. I see myself having more and more of an involvement in the open source/free software community as my programming ability grows. I also hope to become permanently involved in the development of XBMC, partly to satisfy my own wants from a home entertainment system and also as I value the work done already and wish to contribute to the project's legacy. I'm committed, hard-working and would relish the opportunity to work with and learn from professional programmers. Outside of computers, I have hobbies that I like to turn to now and again: drumming, cycling and fiddling with electronics ranking highly. I also have interests in the arts, politics and sociology.

= Proposed List of Outcomes = A wish-list of features, not necessarily being implemented during the summer of code, but ones that I would like to see incorporated in the long run. Please add what you want, but discussing before actually removing anything
 * Live TV
 * Pause Live-TV (time-shift)
 * Rewind Live-TV (N minute ring buffer). Application dependent.
 * Now/Next OSD w/Channel Logos
 * Program Synopsis (Info button)
 * Recording TV
 * Live-TV recording (automatic inclusion of ring buffer if enabled)
 * Recording another channel easily through NOW/NEXT OSD
 * TV Recordings integrated into Video Library


 * Viewing Recorded Programs
 * Storing the Programme synopsis in the db
 * Simple editing - set in/out markers, remove commercial breaks. (These would be performed on the backend at scheduled time, or on manual request)


 * Electronic Programme Guide (EPG)
 * Fluid layout with full support for small screens.
 * Support for channel 'Bouquets'
 * Genre highlighting by colour
 * Visual indicators embedded in EPG - (Rec status, conflicts, already viewed/recorded (for all those repeats), series link etc.)
 * Search by genre/keyword


 * Listen to AM/FM/DVB radio channels
 * In lieu of MHP support, digital radio channels could bring up web scrapped info


 * Miscellaneous
 * It would be great if the individual backends could populate the GUI with specific features i.e. VDR could give options to 'Strip all commercials', apply 'Taste' filters. Not sure how realistic this is.
 * Full support for universal remote controls

= Related Links =

XBMC community forum discussion threads

 * Unified EPG and PVR API discussions:
 * One unified PVR/DVR/HTPC front-end (client GUI) - concept and ideas discussion
 * EPG (TV-guide) - developers coding discussion
 * Skinning the EPG - skinners discussion
 * Back-end server clients discussions:
 * MythTV
 * MediaPortal
 * Linux VDR
 * Microsoft Windows Media Center
 * SageTV
 * EyeTV
 * HTS TVheadend
 * Dreambox/Dbox2
 * HDHomeRun
 * HAVA Wireless HD
 * IRC: #xbmc-pvr on freenode for development and testing discussion.

= Development - Latest = Quite a few people have expressed an interest in working on this project, and now that there's a branch based on the linux/windows/osx sourcetree, anyone that way inclined should be able to download and see how things are currently implemented. There should be a fair bit of work done in the next couple of weeks so remember to check for updates. Comments are probably too thin on the ground so if you have trouble understanding anything send me an email, or even better post a question on this page's discussion tab. Also come chat on IRC: #xbmc-pvr on freenode for development and testing discussion.

Code checkout

As of October 2012, PVR support has been merged into upstream master.

Previously the PVR development code was a separate branch at:

git clone git://github.com/opdenkamp/xbmc.git

In even older history, the previously documented SVN repository has not been active since January 2011. It is still available at:

svn co http://xbmc.svn.sourceforge.net/svnroot/xbmc/branches/unified-pvr/