22 Copyright (c) 2009, 2010, 2011 Roku Inc. All rights reserved.
Figure 6: Application Console Output
9.0 Top Development Tips for the Roku Platform
• Make sure you capture all of the events sent by the roVideoScreen or you may miss
important playability information.
• Know the Remote Control Codes for special screens:
o Dump Core: Home 5x, Up, Rew 2x, FF 2x
o Debug Info on screen: Home 5x, Rew 3x, FF 2x
o Channel Version Info: Home 3x, Up 2x, Left, Right, Left, Right, Left
o Developer Settings Page: Home 3x, Up 2x, Right, Left, Right, Left, Right
• The Developer Settings Page is necessary for enabling developer mode on your box.
• All file paths are prefixed by the device (currently pkg or tmp) and using the naming
convention: pkg:/filename.txt. Even file URLs must use this convention:
file://pkg:/filename.txt.
• Always use a screen facade object when launching your application so that it appears to
the user that your channel launches immediately and avoids screen flicker when exiting.
(See the simplevideoplayer sample application for a commented implementation of the
technique)
• You can use the theme attributes of roApplicationManager (see Component Reference)
to create a new UI skin for your channel.
• When using rendezvous style registration and account linking, be sure to store the linking
information in the device registry and not on your servers. We require that users are able
to do a “Factory Reset” and be confident that no personally identifiable information is
associated with the device. This is not possible if you have saved permanent serial
number information on your servers.
• We are limited in the types of video content supported on the device. We currently
support .mp4, .mov, and .m4v files with H.264/AAC encoding as well as unencrypted
WMV and HTTP Live Streaming.
• We only support .wma and .mp3 audio files in the audio player.
• Be sure to use a unique key for each application you publish and reuse this key each
time you update your application using the “rekey” option. This ensures that all versions
of your application will have access to the same registry data and avoid causing users to
re-link after an update.
• When using the slide show component, sometimes a high resolution image may take a
while to download. A good trick to provide quick feedback to the user is to put an image
in your package (so it’s not downloading) that may have your logo, etc… but informs the
user that the slideshow is playing it’s just “Retrieving…”. This slide could be the first slide
in your slideshow so that feedback to the user is instant and the slideshow never appears
“hung”.
• We require that your web servers support range requests. If they do not, you may run into
content that is not playable, or large images that do not display. The data will appear as a
corrupted file format to our components, as the first block may be resent by the web
server when we expect data at a particular range or offset.
• The screens are displayed in a LIFO (stack) order. If this behavior is causing your screen
to flicker (perhaps you wanted to pop two screens after you are done with the current
one) there is a Close() method in the screen interface of all the screen and dialog
components that deletes the screen out of the display stack. An example might be
coming out of a Registration or Search page to a Springboard screen. From the
Springboard screen, you might want to exit to your main screen, not the registration
screen or search screen.
Example:
searchScreen = CreateObject(“roSearchScreen”)
REM in a real app, you would setup this search screen…