Remote controlling the Apple TV using DAAP

Since we’re had quite a few requests for the possibility to use Unified Remote with an Apple TV I started looking in to how this could be done. My first instinct was to look into the possibility of compiling the server for Apple TV. However this proved to be too much of a hassle and would require the user to jailbreak his or her Apple TV. All in all not really an option.

This left me stuck without ideas until a colleague pointed out that Apple has their own remote control app, maybe it can control the Apple TV. True enough, it had the option for remote controlling Apple TVs and I started digging in to how that worked.

What I found, using Wireshark for packet sniffing and a whole lot of Google Fu, was that it uses the same protocol as for remote controlling iTunes, a version of DAAP (Digital Audio Access Protocol) called DACP (Digital Audio Control Protocol). Apparently this protocol is far from well documented, so using Wireshark as well as some 5-10 years old Google Code Wiki articles I set out to investigate how the protocol worked.

A project called daap-client for Android had a very helpful article explaining some of the inner workings of the protocol. Basically it’s a very simple binary protocol over HTTP that uses tags to determine the data type of each packet. The packets look like this:

Tag (4 bytes) Length (4 bytes) Data

Now this leads to some interesting findings. First of all the fun fact that Length is always present, meaning that for instance a 32-bit integer has Length 4 (Just in case you happen to forget the length of an int) and in order to send a single byte you need 8 bytes overhead in the form of a Tag and Length = 1.

The other interesting thing is that this raises the question: How do we interpret the data? Obviously it has something to do with the tag but if you take a closer look at the tags provided by the article mentioned earlier the tags aren’t direct definitions of the data type contained in the packet. Instead there is a table in which one can look up the data type connected to a certain tag, however the table in the article lacked quite a lot of the types used by a more recent version of iTunes.

To figure out what tags correspond to what type I wrote a simple decoder based on the info I had. By pointing it to a computer running iTunes and fetching the URL /content-codes I managed to print out all content codes in a neat and orderly fashion. Based on this a dictionary of each tag and its corresponding data type could be constructed.

To conclude, we have made some progress as to integrating Apple TV support in to the server but now comes the really challenging part, actually sending data, keeping a session and finding out how the protocol actually works. Stay tuned for more!

Our new iPhone and iPad app

As most of you may know by now our app for iPhone, iPad and iPod Touch is now out in the wild (In case you missed it, you can grab it here). The point of this post is to highlight some of the features in this app but before I do that, let me take a few moments to introduce myself.

My name is Richard Simko and I’ve been working with the iPhone app since the summer of 2013, some of you may have been in touch with me through our beta program (Thanks a lot for all the help testing there!). It’s great fun working with this type of app and I hope to hear from even more of you in the future.

New User Interface

Back to the app, the first major thing is that we’ve really focused on making the app feel at home on Apple’s operating system, iOS. As a result we decided to completely overhaul the UI compared to what is used to look like on Android. You’ve seen a few examples of it here previously and it’s also a part of the latest beta builds for Android but our iOS-app is the first to actually launch with this new UI. Among other things we added a slide-in menu which handily let’s you switch between different functions in the app, we improved the server manager to be even easier to use, and we added a completely new guide to get you up and running in no time. We also added some neat new features to the keyboard, allowing you to use more advanced keys when using the keyboard (Such as Ctrl, Alt, Esc, Tab etc.).

Left menuExtended keyboard

New purchasing options

Another great thing we did with this new app is to do away with the full and free versions as separate apps. Instead we offer it as an in-app purchase, not only making it easier for you to upgrade but combined with the other in-app purchases it’s a lot easier for you to tailor the app to your needs. One of these in-app purchases are the remote unlock tokens. Each token allows you to have one remote of your choosing unlocked forever. For example if you’re only interested in one of the premium remotes, you no longer have to unlock the entire full version, instead you can simply buy an unlock token and unlock the specified remote. You are free to switch between remotes as many times as you like and your unlocked remotes stay unlocked forever.  Our goal with this is to make it easier for you to tailor the app to your needs. Right now this, along with the Extended Keyboard, are the only purchases you can make apart from the full version but stay tuned for more.

In-app purchases

Mac server

We know that many iPhone and iPad owners also have a Mac and of course we want you to be able to fully enjoy all the features of Unified Remote. Because of this we now have the server application available for Mac. While it’s still in beta it’s still quite stable and works great (I use it myself a lot). To check it out head over to our download page and grab it.

Plans for the future

In addition to all these great features there is more to come soon! First of all we’re looking in to some more advanced features for the remote list which will allow you to sort in different ways, search the list, filter it and so on. The second thing is adding a menu for quickly switching between remotes, similar to the quick switch between servers in the right menu. We also have some plans for an exciting event this weekend which we will publish more info about really soon.

Roadmap 2014

Those of you that have been following our development news will know that we have a lot going on right now. We are currently working on three different major releases simultaneously. We’re working extremely hard to get these finished as soon as possible, but we want to ensure high quality products by not rushing to release. Below is a quick summary of what we’ve been working on for the past few months, what the current status is, and what our roadmap for 2014 looks like.

Unified Remote for Android

The next major version of our Android app will be a significant improvement. Our main focus has been improving and optimizing the user experience. We’ve also put a lot of effort into customization. We’ve completely overhauled the app navigation and improved core functionality such as keyboard & mouse remote control, server management, widgets and quick actions editors.

At the moment we are working on finishing the last few features and getting rid of bugs. We have not announced any release date for the next version of the Android app simply because we do not want to make promises that we can’t keep. The same goes for our other releases.

Our roadmap at the moment is to release a beta within the next 1-2 months. We will then continue with the beta until we feel that the quality and satisfaction is up to our standards. If all goes well, the beta hopefully won’t last very long.

Unified Remote for iOS

Over the past few months we have been making very good progress with Unified Remote for iOS. We are currrently in an early beta phase where a limited group of testers are able to try out the app and give us feedback. There are still a few important features that need to be added, but overall the beta is going well.

Our roadmap at the moment is to continue with the beta until all the core features have been implemented and until the quality and satisfaction is up to our standards. Our goal at the moment is to have a first version ready for public release within 1-2 months.

Unified Remote Server

The next major version of Unified Remote Server is by far the biggest change. We have completely re-written the entire server software and re-implemented all of the remotes. The reason for this is that the current version of the server was developed for Windows only. By re-writing the server we were able to choose a different approach and target a much broader range of platforms including (but not limited to): Windows, Mac OS X, Linux. We are even working on providing servers built specifically for embedded devices such as Raspberry Pi and Arduino.

The other major change in the next version is that we are completely opening up the remote implementations. By embedding a powerful scripting engine we are able to provide a framework for developing remotes that can be used by both us and our users that are interested in creating their own remotes, or modifying our remotes to suit their needs.

At the moment the new server is available as a Developer Preview, intended for those who want to try out the new scripting functionality. We are currently working on finishing up the last core features before we are able to release an alpha or beta version.

Our roadmap at the moment is to release an alpha or a beta within the next 1-2 months. The beta is likely to continue for at least a few months due to the broad range of hardware and software that we want to support. Therefore our goal is release the new server as a parallel release until we feel that we can completely replace the v2 server.

Conclusion

As stated, we have a lot going on right now, and we are still a tiny team! With the work we are doing we hope that we can grow our team during 2014 so that can we provide more features and quicker releases. But, in the meantime, please be patient and if all goes as planned we should have betas of all 3 releases available within 1-2 months. The best way to support us is to purchase the full version of our Android app, or join the beta testing groups. Thanks, and have a great 2014 everyone! :)

Widgets and Quick Actions

Most of the major changes in V3 have been shown. The last important aspect that we’re still working on is the customization experience. For V3 we will be introducing a completely new editor for creating Widgets and Quick Actions. We’ve also improved the configuration/preview screens for these. More information about the new editor will be coming soon.

2013-12-24 09.40.452013-12-24 09.42.25 

Merry Christmas to you all! :)

New Remotes Screen

For V3 we’ve made some improvements to the remotes screen. There are now 4 different lists available: All Remotes, Most Used Remotes, Recent Remotes, and Recent Actions. The idea is to make it easier to find the remote you might be looking for. The Recent Actions list also makes it easy to send commonly used actions quickly.

Screenshot_2013-12-16-09-41-02 Screenshot_2013-12-16-09-41-15

Our plan is to add more lists in the future. For example, we plan on adding a Favorites list as well, where you can choose exactly what you want to include. We also want to make the screen more customizable in general as well. For V3 you will at least be able to select your “default” list, but we also plan to include an option to reorder the lists as well in the future.

 

New Server Manager

Another core feature that we have made some improvements to is the Server Manager. Our goal was to make it quicker and easier to find and add servers in the app. One of the changes we’ve made is to combine to the list of saved servers and the list of detected servers into one screen. Previously these were in two separate screens.

2013-12-09 12.43.29 2013-12-09 12.43.22

The first section shows the list of saved servers. This includes servers added from the automatic detection and from adding manually. The second section shows a live list of servers that are automatically detected. They can easily be added to the list of saved servers by pressing them. Hitting the plus button in the action bar takes you to the screen to add a server manually. Also, as mentioned in a previous blog post, you will now be able to easily switch between servers using the left side menu, accessible from all the main app screens.

Keyboard and Media

For V3 we’ve invested some time into improving the core functionality of Unified Remote. One of the most used features is Basic Input (mouse and keyboard) control for your computer. To make this better, we’ve added a new keyboard bar that lets you access the special keys on your computer, in any remote. The keyboard bar shows up automatically when you open up the standard keyboard on your device.

2013-12-02 09.33.16 2013-12-02 09.33.22

Besides adding an extra keyboard bar, we’ve also added a media bar. The media bar shows up by pressing the “media” key in the button bar at the bottom of the remote (the music symbol). This gives you quick access to basic media keys, and system volume control, in any remote. So now you’ll be able to control your music/video playback easily from anywhere in the app :)

2013-12-02 09.33.30

Improved App Navigation

Navigation is one of the biggest changes we’re making in the new V3 app. Our aim is to make it easier and faster to navigate around in the app. We decided to go for the popular side menu design which combines the dashboard items and a quick change server list. The menu can be accessed from any remote. We’re also adding other features to make it even easier to navigate around in the app.

2013-11-24 13.18.16