Create USB apps? Release notes? Updates?

Where is there a tutorial on how to create the USB apps?

Also, where is there the new version of the release notes? Any other cool updates?

Thank you.

Version 2.02.32

Resolved Issues

ļ‚· Supports Miracast. For list of compatible device, visit products.wd.com/miracast

ļ‚· Supports BBC iPlayer, BBC News and BBC Sport (UK only)

ļ‚· Supports GRID UI user interface theme

ļ‚· Supports add shortcut to home page (Grid theme only)

ļ‚· Supports auto play app

ļ‚· Supports Downloads (HTTP, FTP, P2P, NZB)

ļ‚· Supports apps on USB storage. To learn more, visit http://www.wdc.com/wdtvsdk/

ļ‚· Supports search feature at the Grid UI home screen from the WD IR remote

ļ‚· Supports Flixster & Rotten Tomato ratings in the video browser UI

ļ‚· Supports new services: AnyClip, BBC iPlayer (updated), BBC News, BBC Sport, Bric-A-Bloc, CafĆ© Noir, Cartoon Keepsakes, Cultorama, Dorado Films, Film Movement, Horoscopes by Kelli Fox - Astrologer Daily, HOTLIST, Howdini, Kino Lorber, Metatube, English, Metatube Espanol, Midnight Pulp, Myx TV, NetFit Free, Olena TV, PRO Classic TV, Saddle Up!, Westerns, The Bold and The Beautiful, The Directorā€™s Chair, The Man Channel, The New Content (TNC), Threshold +, uInterview, Viaway

ļ‚· Updated WD TV End-User License Agreement (EULA)

ļ‚· Resolved resume point for movies after power cycling WD TV

ļ‚· Resolved no sound for DVD ISO files when DVD Menu is set to off

ļ‚· Resolved SOMA.FM stations not playing in Tunein app service

Yes ā€œSDKā€ here http://www.wdc.com/wdtvsdk/ But its only 5 pdf with general descriptionā€¦ Need real working example of USB app and HTML5 server part or something like this. Now only texts. Need example.

Has anyone managed to create a working app yet using the example as a template?

I have the directory structure

/apps/USB_APP1/images/sbsondemand.png

Ā  Ā  Ā  Ā  Ā  Ā  Ā  Ā  Ā  Ā  Ā  Ā  Ā  Ā  Ā  Ā ./manifest.json

but its not visible on the WDTV.

I mean, even if it doesnā€™t work, if the file structure and the format are correct it should at least show up?

This is what I have so farā€¦

{
"id":"E10099",
"type":"browser",
"title":"SBS On Demand TV",
"version":"1.00.00",
"author":"Jo Blow",
"author_information":"joblow@gmail.com",
"publish_date":"2014/08/12",
"description":[{ 
            "LanguageCode":"en","Description":"SBS On Demand TV app" 
                    }],
"changelog":"",
"launch":" http://www.sbs.com.au/ondemand",
"launch_args":"",
"daemon":"",
"daemon_args":"",
"requirements":{"network":"1","cookie":"1","navigation_type":"" ,"cehtml_key","1","backdoor":"","redirect_times",""},
"app_option_image":"image/sbsondemand.png",
"app_icon_image":"images/sbsondemand.png",
"region_limitation":["AU"],
"app_category":["MOVIE_TV","FEATURED"],
"user_agent":"",
}

The example from the SDK PDF isnā€™t valid JSON - the separator after cehtml_key and redirect_times should be a colon instead of a comma. So the manifest.json file should look like this:

{
"id":"E10099",
"type":"browser",
"title":"SBS On Demand TV",
"version":"1.00.00",
"author":"Jo Blow",
"author_information":"joblow@gmail.com",
"publish_date":"2014/08/12",
"description":[{ 
            "LanguageCode":"en","Description":"SBS On Demand TV app" 
                    }],
"changelog":"",
"launch":" http://www.sbs.com.au/ondemand",
"launch_args":"",
"daemon":"",
"daemon_args":"",
"requirements":{"network":"1","cookie":"1","navigation_type":"" ,"cehtml_key":"1","backdoor":"","redirect_times":""},
"app_option_image":"images/sbsondemand.png",
"app_icon_image":"images/sbsondemand.png",
"region_limitation":["AU"],
"app_category":["MOVIE_TV","FEATURED"],
"user_agent":"",
}

The app should at least appear now, although it doesnā€™t actually work.

Yes, an example app that actually displays and plays some media would be nice.

Thanks for that. It does show up, but causes an immediate reboot.Ā 

I guess I am going to have to do a bit more research.

On the plus side, their example now shows up and I enabled the backdoor browser, but canā€™t even test that till I find my spare K400 keyboard.

Hello.

I got this working in my url by inserting a space between the slideshowĀ  and **" (See below)Ā **using the adjusted JSON file that included the colon and not comma.

All up the changes needed for me were:

  1. Change image/ to images/

2)Ā The separator after cehtml_key and redirect_times should be a colon instead of a comma.

  1. Placing a space before the last " in the launch command ie:Ā ā€œlaunchā€:" http://mypolice.qld.gov.au/moreton/cctv-slideshowĀ  " ,

I could not get the http://www.sbs.com.au/ondemand working. Ā The device would auto restart.

With my url, I have set the app to launch on device start and it works perfectly.

Hope this helps.

Cheers.

1 Like

Cool. I set my location to farnorth, I have some friends up there, I hope they are not up to any mischief.

Its very slow though, have you figured out how to speed up the slideshow on the remote?

Also gotĀ  http://iview.abc.net.au/ to work without crashing. It is just the web page, not an ā€œappā€, and pretty unusable until I find my wireless keyboard.

I was looking at some of my Chrome extensions manifest.json files, to see if I can get any clues there. I wish WD would provide a bit more information in their SDK documentation.

1 Like

Hi.

There doesnā€™t appear to be a way to speed up the slideshow, and yes you are correct, it is slow.

However the native stream is set to 10 second intervals when viewed via a normal computer. Ā Iā€™ve found that the WD SMP device will cache the images and then settle down to 10 second intervals to mirror the primary site.

If the network were to drop, the cache maintains and the images continue to be displayed on a 10 second rotation.

My only question at this stage, given the above display purposes, is once the images are altered on the main site, does the WD SMP update with the new set of images.

I wonder if there is a flag I can set for the page to auto refresh after so many seconds.

Cheers.

Iā€™ve had some success using a html page on a site that is a wrapper for my local web cam, but so far no luck putting the localised version of index.htm in the directory structure.

Iā€™ve tried having the index.htm at the /apps level, at the same level as my manifest.json, and in its own sub directory, similar to how the images directory works. None of these has worked. The supplied SDK is pretty limited in explaining this.

If you were pointing to an external web site that you owned, and you wanted to do refreshes, then something like this would do it:

<script type="text/JavaScript">
<!--
function timedRefresh(timeoutPeriod) {
	setTimeout("location.reload(true);",timeoutPeriod);
}
// -->
</script>
</head>

<body onload="JavaScript&colon;timedRefresh(300000);">

Ā This is set for 15 minutes.

I downloaded the GPL source code for 2.02.31_G and had a look to see if I could find any manifest.json files. There were just a few, and I was at least able to determine some more SDK values used in the manifest.json files.

For ā€œtypeā€, there is either ā€œbrowserā€ or ā€œnativeā€. Maybe there are more?

For ā€œnavigation_typeā€ there is ā€œ0ā€, ā€œ1ā€, the word ā€œSPATIALā€, so maybe also the word ā€œGENERALā€ for ā€œ0ā€ ?

For ā€œregion_limitationā€ there is also the word [ā€œALLā€]

For ā€œapp_categoryā€ there is [ā€œALL_APPSā€]Ā 

So you can see that there must be a complete SDK reference out there which is provided to third party/commercial developers, which is not included in the download for us lowly consumer/hackers.

Has anyone been able to find out anything more?

Also additional app_categories, I guess this is how they show up in the Services menu.

$ find . -type f -exec grep app_category {} \; -print
	"app_category":["NEWS_WEATHER"],
./src/libs/app_accuweather_native/manifest.json
	"app_category":["ALL_APPS"],
./src/libs/app_filedownloader_native/manifest.json
	"app_category":["ALL_APPS"],
./src/libs/app_files/manifest.json
	"app_category":["PHOTO"],
./src/libs/app_flickr_native/manifest.json
	"app_category":["MUSIC"],
./src/libs/app_music/manifest.json
	"app_category":["NEWS_WEATHER"],
./src/libs/app_newsfeed_native/manifest.json
	"app_category":["PHOTO"],
./src/libs/app_photos/manifest.json
	"app_category":["PHOTO"],
./src/libs/app_picasa_native/manifest.json
	"app_category":["ALL_APPS"],
./src/libs/app_usb_app/manifest.json
	"app_category":["MOVIE_TV"],
./src/libs/app_videos/manifest.json

Ā Also a couple of new image types:

$ find . -type f -exec grep picasa {} \; -print
	"app_option_image":"images/services_option_picasa.png",
	"app_icon_image":"images/services_icon_picasa.png",
	"app_small_logo":"images/small_app_picasa.png",
	"app_large_logo":"images/large_app_picasa.png",
./src/libs/app_picasa_native/manifest.json

paulmcg wrote:

Iā€™ve had some success using a html page on a site that is a wrapper for my local web cam, but so far no luck putting the localised version of index.htm in the directory structure.

 

I was able to get local html pages to load by removing the spaces from around the filename. The ā€œrootā€ directory for local files appears to be the directory for your app i.e. the same level as the manifest file.

With the following directory structure:

\apps
   \MY_APP manifest.json
      \images logo.png \foo
        bar.html

 This statement successfully launches bar.html:

"launch":"foo/bar.html"

Ewe Beauty!

Works perfectly now, which is a bit weird, since for the slideshow example earlier you needed the space, and for external sites index.html it didnā€™t seem to matter.

I left the backdoor open, and the URL shows as

ā€œfile:///tmp/media/usb/USB1140/2AE2-3B1C/apps/2_BIRDS/htdocs/index.htmlā€

which is interesting as I may be able to navigate in the filesystem a bitā€¦

i made an app, using this site http://view47.com/ i randomlly googled searching for streaming movies, as a test, got the site to load perfectly on the wdtv, but wasnt able to navigate it at all. tried plugging in a usb mouse, didnt get a mouse pointer or anything.

so, what type of ā€˜appsā€™ are we actually able to create, since it seems we arent able to just point to a url?

Firstly, you would have to setĀ ā€œnavigation_typeā€:ā€œ1ā€ in order to get spatial navigation, e.g. with a mouse.

Secondly, for an external web site, your content would have to be very simple, maybe a wrapper written in HTML5 for a snapshot or slideshow. You canā€™t just point to a website that uses flash and SWF files and expect it to work, as I found out with my earlier SBS Ondemand attempt. (which caused the WDTV to reboot)

According the the SDK documents the WDTV uses the QT Webkit browser for html and javascript, and the browser accepts html5 tags. Your best option would be to build a local web page on the USB that is a wrapper to the particular video files that you want to view using HTML5.

I couldnā€™t find the code for a lot of the apps, e.g. ABC iView or BBC player, in the GPL source, so they are obviously proprietary, built and compiled specially for the SigmaDesigns SMP8670 SOC media processor. At least you can download the toolchain from WD if you want to compile your own app.

Here is my local webcam site on the USB which works OK. manifest.json

{
"id":"E10002",
"type":"browser",
"title":"Bird Cam local",
"version":"1.00.00",
"author":"Paul",
"author_information":"",
"publish_date":"2014/08/13",
"description":[{
"LanguageCode":"en","Description":"Bird Cam 192.168.0.99 test app"
}],
"changelog":"",
"launch":"htdocs/index.html",
"launch_args":"",
"daemon":"",
"daemon_args":"",
"requirements":{"network":"1","cookie":"1","navigation_type":"1"
,"cehtml_key":"1","backdoor":"1","redirect_times":""},
"app_option_image":"",
"app_icon_image":"",
"region_limitation":[""],
"app_category":["",""],
"user_agent":"",
}

Ā The index.html that it refers to is pretty basicā€¦

<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<title>Bird Feeders</title>
</head>
<body bgcolor="#4D6B7F">
<h1 align="center">Bird Feeders, front yard</h1>
<table border="0" cellpadding="10" cellspacing="0" width="100%">
<tr>
<td bgcolor="#4D6B7F" align="center" valign="middle">
<script language="JavaScript" type="text/javascript">
function reload() {setTimeout('reloadImg("refresh")',1000)};
function reloadImg(id)
{
var obj = document.getElementById(id);
var rand = Math.random();
obj.src="http://192.168.0.99:8081/snapshot.cgi?user=test&pwd=test&next_url=birds.jpg&t="+rand;
}
</script>
<img src="http://192.168.0.99:8081/snapshot.cgi?user=test&pwd=test&next_url=birds.jpg&t=" name="refresh" id="refresh" onload='reload()'></td>
</tr>
<tr>
	<iframe name="control1" border=0 width=0 height=0></iframe>
	<iframe name="control2" border=0 width=0 height=0></iframe>
	<iframe name="control3" border=0 width=0 height=0></iframe>
	<iframe name="control4" border=0 width=0 height=0></iframe>
	<iframe name="control5" border=0 width=0 height=0></iframe>
	<iframe name="control6" border=0 width=0 height=0></iframe>
	<iframe name="control7" border=0 width=0 height=0></iframe>
	<iframe name="control8" border=0 width=0 height=0></iframe>
<td colspan="4" align="center">
<a href="http://192.168.0.99:8081/decoder_control.cgi?command=31&user=test&pwd=test" TARGET="control1">Bird Feeders</a>|<a href="http://192.168.0.99:8081/decoder_control.cgi?command=33&user=test&pwd=test" TARGET="control2">Driveway</a>|
<a href="http://192.168.0.99:8081/decoder_control.cgi?command=35&user=test&pwd=test" TARGET="control3">Garden</a>|
<a href="http://192.168.0.99:8081/decoder_control.cgi?command=37&user=test&pwd=test" TARGET="control4">Left</a>
<a href="http://192.168.0.99:8081/decoder_control.cgi?command=39&user=test&pwd=test" TARGET="control5">Centre</a>|<a href="http://192.168.0.99:8081/decoder_control.cgi?command=41&user=test&pwd=test" TARGET="control6">Right</a>|
<a href="http://192.168.0.99:8081/decoder_control.cgi?command=43&user=test&pwd=test" TARGET="control7">Steps</a>|
<a href="http://192.168.0.99:8081/decoder_control.cgi?command=45&user=test&pwd=test" TARGET="control8">Porch</a>
</td>
</tr> </table>
</body>
</html>

Ā Of course I also have to used the SDK of the web camā€¦

Anyway, hope this helps. There is a lot of stuff out there, various forums, etc. which may be useful.

1 Like

I was also able to create a local web page on the USB with the content fromĀ 

https://developers.google.com/youtube/iframe_api_reference

and it played perfectly.

can you include 2 lauch in manifest.json?

can some post working example os USB apps?

please share?