Skip to main content

Chrome Extension: iPlayer to XMBC

There's a Chrome extension called Play To XBMC which adds a little button that will send a YouTube, Vimeo, or CollegeHumor video to XBMC - provided you have the YouTube plugin installed. This is a lot more convenient that using XBMC to search directly, if you don't have a keyboard plugged into the XBMC box.

The XBMC iPlayer plugin suffers from the same problem that browsing/searching aren't easy without a keyboard, so I wondered if I could make a chrome extension that would do the same for iPlayer.

Chrome extensions are packages of javascript, html, and image files that get unpacked by Chrome when they're installed. You make a Manifest file (which is a JSON file) that tells Chrome what icons to include, what sort of package it is, etc. The Play To XBMC extension is a browser one - the button is always there. I made mine page specific - it only appears on valid iPlayer episode pages. You do this by putting in a javascript page that runs in the background every time a tab is refreshed. My one identifies the url by looking for "/iplayer/episode/".

Then I stole the innards from the other extension. It uses LocalStorage to hold the password, etc., and a jQuery ajax request to send the JSON-RPC commands to xbmc. To add an iPlayer episode you add to the playlist the url: "plugin://plugin.video.iplayer/?pid=<8 character program id>", then cause the player to open and start the playlist.


Problem: The first AJAX command in a group would go off, the others never.
Solution: I was triggering the functions from onclick eventlisteners on links, but it seems to be incredibly difficult to consume the event completely so that the link doesn't trigger - which it was doing, causing the page to refresh and the javascript to stop running. I replaced the links with spans - I'll just make them look like links with CSS, I guess.


Problem: The site is always returning 401, even when you log in with the correct password.
Solution: You need to explicitly ask for permission to access sites using the manifest.json (adding "http://*/" to the permissions array). This is what signals Chrome to allow posting and sending basic authentication information to a site that isn't the site of origin (which an extension doesn't have, since it's running in the browser).

Problem: XBMC plays the first second or two of the playlist, then exits. It appears that moving a video onto the playlist works well. You can manually start it from the playlist and everything works fine. But starting it from the JSON-RPC command doesn't work - it just exits after a second or two, leaving the file on the playlist. The Play to XBMC extension doesn't seem to have this problem, and I can't work out what's different.
Solution: None yet.

Comments

Popular posts from this blog

"How Do I Test It?" Proof Key for Code Exchange by OAuth2 Public Clients

Having adapted an example OpenID Connect server (built in Rails) to a production system, I need to add PKCE support so that it could be used securely to allow mobile systems to log in. OAuth2 (and therefore OpenID-Connect) isn't considered as secure on mobile devices because rogue applications on the mobile device can hijack the authorization code. Here I'll try to describe the thought process that goes into not the implementation, but the interpretation of the spec into a set of tests that will allow us to be reasonably confident that mobile clients will be able to connect. (Pleasingly, the first time the mobile integrators tried to connect with PKCE it worked perfectly, both with errors and successful paths). My implementation is in Ruby, of course, and my tests will be in RSpec with expectations, so some of the language might not be generic but the concepts should map to other languages / frameworks. I've marked the actual tests I needed in yellow with the word TEST:...

4Store with Snorql on Raspberry Pi

Problem I need to access triple-store data for a work thing, but the data I have to test with isn't in their (sesame) triple store yet. There are RDF files, though. Solution Install 4Store on a pi (I had one with a default Raspbian running because it's the mumble server). sudo apt-get install 4store ...then I set up the 4store with instructions from here : sudo 4s-backend-setup saws sudo 4s-backend saws 4s-httpd saws then import the RDF files with a convoluted command: curl --verbose --header 'Content-type: application/rdf+xml' --upload-file MSH_Thales_Trans.rdf --url 'http://localhost:8080/data/http%3A%2F%2Fwww.purl.org%2Fsaws%2Fontology%23' (for each file - the url is the saws url encoded, the .rdf bit was done for each file). Then fix the RDF, because rapper rejects it all. To validate the RDF I used this: http://www.rdfabout.com/demo/validator/ Okay, now I can see things on the pi: http:// <pi ip address...