Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


Airplay server for Roku

Subscribe to updates I use trimeplay

Statistics on trimeplay

Number of watchers on Github 51
Number of open issues 5
Main language Brightscript
Open pull requests 0+
Closed pull requests 0+
Last commit over 6 years ago
Repo Created about 7 years ago
Repo Last Updated over 2 years ago
Size 388 KB
Organization / Authorthetrime
Page Updated
Do you use trimeplay? Leave a review!
View open issues (5)
View trimeplay activity
View on github
Book a Mock Interview With Me (Silicon Valley Engineering Leader, 100s of interviews conducted)
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating trimeplay for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)


Airplay server for Roku.

Somewhat experimental at this stage. Probably usable if you're willing to ignore a few problems. If you have a Roku, you can try it by going to https://owner.roku.com/add/2XQQN but be aware that the version installed here may lag behind the version in git!

Things that work:

  • Viewing photos
  • Changing the photo you are looking at
  • Stopping photo viewing
  • Viewing videos from the Video app. Only ones without DRM!
  • Starting videos mid-stream
  • Viewing videos from third parties, such as youtube (Again, only without DRM)
  • Pausing and resuming video
  • Stopping videos
  • Playing some videos from websites such as PBS.org (whether it works depends on the format of the video somewhat)

What does not (because either it never will or I have no interest in doing it)

  • Anything with DRM
    • That includes mirroring, surprisingly! That's a shame really: I might try and get mirroring off the never-to-be-done list, but it seems unlikely to happen :(
  • Slideshow transitions (Don't care)
  • Music (not really interested. The protocol is very complicated, which is surprising given how simple video is?)

What doesn't work but should (ie, bugs)

  • the screensaver will still come on if you're looking at a photo. I don't know if this is a bug or a feature?

What could be done

  • I should probably send a packet out if the channel exits to kill the airplay announcement. Can I, though? It doesn't look like there is any opportunity
  • Eval() may be able to be used to catch some errors at the expense of making everything much slower. Might still be fast enough? Maybe I can call Eval() on the top level?

What I haven't tested

  • Connecting more than one iDevice at once. It will probably just crash/freeze/choke in some other way


Copyright (C) 2013 Matt Lilley

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

Some rants about BrightScript

I'm amazed at the quality of applications people CAN produce using this language. It has a few nice features, but is astonishingly lacking in some really central areas.

  • I cannot believe that I can't get the duration of a video out of an roVideo{Player,Screen}. That just beggars belief.
  • It's a shame that a media-centric device cannot give me more information about MP4 streams in general. I had to write an MP4 decoder from scratch to parse the files and get out the timescale and duration.
  • I'm disappointed that everything is coerced to a float. It makes integer arithmetic risky at best. I had to write an arbitrary-precision arithmetic module to get the duration of a video, since I was asking the http server for larger and larger ranges of data, and eventually I ended up crossing a bit boundary and getting negative integers. Yes, I had to write my own functions to ADD TWO NUMBERS TOGETHER RELIABLY. Wow. Just, wow.
  • It's bizarre that str(3) returns 3 and not 3. I know that there's 3.toStr(), but only because it is mentioned in an example on the Brightscript Reference Page. Not because it was documented. The roFloat page (which itself is a challenge to find) says that ifFloat only implements GetFloat and SetFloat. It doesn't actually say what these functions do, though.
  • There is no easy way to find out the status of a socket. I don't know why this is so hard: There are a million functions you have to call to check the statuses, and sockets seem to never return true to isConnected(), even when they clearly are.
  • There's also no easy way to find out that your connection has been dropped. I still can't figure out if this is even possible!
  • I misspelled invalid as invlaid once, and validation succeeded, but the entire system crashes when it executes it.
trimeplay open issues Ask a question     (View All Issues)
  • about 4 years Does this work with Mac Yosemite?
  • over 4 years Doesn't work for iOS 9.2
  • almost 6 years Doesn't work for iOS 8
  • over 6 years Dont work for iOS7
trimeplay list of languages used
Other projects in Brightscript
Powered by Autocode - Instant Webhooks, Scripts and APIs
Autocode logo wordmark