RadioParadise HD Plugin for Windows Media Center

So I’ve become a big fan of RadioParadise.    It’s a listener supported, commercial free radio station which plays a great mix of new, old and eclectic rock, with a random mix of everything else when they feel like it.  Actually, it’s best explained if you just go there and listen.  I also have a shortcut on my phone and it’s the only music I listen to in the car now.

So I’m a fan of the music, but the cool thing they’ve added this year is an HTML 5 192K HD feed along with a photo slide show called RadioParadise HD.    The photo’s are all high resolution, meant to seen on the big screen, but the really cool thing is that they are uploaded by the community, so if you have some high quality 16×9 photos, you can upload them and potentially see your own pics there.

So, obviously, a Media Center Plugin is needed so you can use your remote to bring up the music and slide show.    A couple things you’ll need.

  1. IE9:   Since the HD player is implemented in HTML 5, you’ll need IE 9, Firefox or Chrome.    I tried all three and (surprisingly) had the best experience with IE 9 as far as running in kiosk mode and resizing correctly.    Chrome has security issues being launched from WMC and FF seems to crash after running the feed for a few hours.
  2. Autohotkey: An extremely cool and easy to use scripting utility.   Used to turn off the screen saver and hide the mouse.
  3. nomousy: A utility from the autohotkey community to hide and restore the mouse upon exit
  4. Media Center Studio: To build the plugin.

First, install Autohotkey and cut & paste the following script into a file called rplaunch.ahk (or you can just download my pre-built binary from here):

; Disable Screen Saver
DllCall(“SystemParametersInfo”, Int,17, Int,0, UInt,NULL, Int,2)
; Hide the mouse
Run, C:\bin\nomousy.exe /hide
; Run IE in kiosk mode pointing to the rphd stream
RunWait, “C:\Program Files\Internet Explorer\iexplore.exe” -k http://radioparadise.com/rphd.php
; Show the mouse
Run, C:\bin\nomousy.exe
; Enable Screen Saver
DllCall(“SystemParametersInfo”, Int,17, Int,1, UInt,NULL, Int,2)

Obviously, you should change the file to point to where you installed nomousy, or just install it in C:\bin as I did.   Then just right click on the .ahk file and select “Compile”.    You should now have an rplaunch.exe binary.   Put this in C:\bin as well.

Now run Media Center Studio.    Warning, the UI here is a little obtuse, so just follow these steps:

  1. Once you start the app, click on the “Start Menu” icon on the main toolbar (my version has a blank icon)
  2. Now click on the Entry points expansion button in the lower left hand corner
  3. Now click on the “Start Menu” tab at the top, and you should see something like this:
  4. Now Click the “Application” icon, and fill it out as follows.   Note I put my rplaunch.exe in a location with no spaces in the directory names.    I can’t swear that a location with a space doesn’t work, but it was on of the variables I eliminated during my testing.
  5. To get the Back and MediaStop buttons to exit the app for you, press the green “+” button, and then press the keys on your keyboard/remote:
  6. Hit the disk icon in the upper left (Save), close the tab and you should be returned to the Start Menu.   The new app should show up in the Entry points list.
  7. Drag and Drop your new app from the Entry Points to the location on the Start Menu you desire.   Hint: The TV and Movies row is not editable by default, so put this in the Music row, or go read this thread.
  8. Hit Save again and restart Media Center.

BTW:  Here’s the icon I used as well.

If anyone is willing to package this all up into an installable (or even give me instructions) I’d be happy to provide a download site.

Enjoy.

Hulu update and quick Media Center Studio fix

I just received a comment on an old Hulu/AutoHotKey fix I had done sometime ago to get a better resolution for Hulu streaming.    Seeing this, it occurred to me that since then, Microsoft made some changes that broke Media Center Studio.   Searching the  Australian Media Center Community (which has a couple interesting projects you won’t find on TGB) there are a number of work-arounds suggested, but I found this one the easiest to implement:

Edit C:\ProgramData\Microsoft\eHome\Packages\MCEClientUX\dSM\StartResources.dll with a binary editor (gvim) and replace these two references to dSM:

xmlns:Movies = “data://dSM!SM.Movies.xml”
xmlns:TV = “data://dSM!SM.TV.xml”

with

xmlns:Movies = “data://ehres!SM.Movies.xml”
xmlns:TV = “data://ehres!SM.TV.xml”


This should work fine until Microsoft update replaces the DLL, then you just need to make the change again. If editing a binary file is a little too much for you, you’re welcome to try my modified version, though your mileage may vary.   If Windows Update changes the file, shoot me a note and I’ll update the DLL on my site.

Finally, the reader was also nice enough to include two Hulu images to use for creating the icons.

Jumbo Frames, iSCSI and Disabling Nagle

So the new project (which I get to spend about 15 minutes a week on) has been to remove the mechanical harddisk from my HTPC and have it run completely silently off the SSD.   The first stage was purchasing the ReadyNAS NV+.  2TB drives have dropped below $100 so a NAS device with 1Gb networking was the no brainer solution.

Given I have two ATI CableCARD tuners (which BTW are no longer being made or supported by ATI), I needed to make sure the network and NAS had enough bandwidth and performance to write two simultaneous HD streams, while reading a third.  Now in theory, with a 1Gb network, you should be able to get roughly 100MB thoughput, unfortunately the real world doesn’t work that way.

My initial testing using Lan Speed Test (more on that later) showed I was getting around 24MBps writes and 45MBps reads.  (Remember big Bs are Bytes and little bs are bits.  8 bits to a byte)  So looking at my Comcast HD recordings, it turns out Fox is broadcasting 1920×1080 MPEG2 at around 14Mbps.   This isn’t that bad.  Note that DirectTV uses MPEG4 at around 5Mbps.  Since mp4 delivers better quality at lower bit rates,  the DirectTV advertisements aren’t lying when they say the picture is better.   For comparison, a typical DVD is MPEG2 @ 9.8Mbs and a BlueRay is MPEG4 at 40Mbps.   So if you haven’t figured it out yet, HD can really mean anything you want.

But the answer is if you want to record 2 HD TV channels from Comcast, you need about 2MBps per stream, or really just 4MBs, but you definitely want to have some head room, and there’s also the need to play DVD images back from the drive

I was hoping to get a little better than 25% of maximum throughput so started looking for solutions.    The first thing I poked at was the Nagle’s algorithm attributes.    This basically tells the TCP stack to gather all the small requests in to one big one before sending.     Turns out gamers want to disable this feature to make sure every keystroke/click is sent the moment they enter it, and not let things batch up on the network card.    For media streaming, you want the opposite behavior, but you’re rarely sending small data packets anyways.    But just for kicks, I set the following registry settings

HKLM/SYSTEM/CurrentControlSet/services/Tcpip/Parameters/Interfaces/{nicid}/

GlobalMaxTcpWindowSize = 0x01400000 (DWORD)
TcpWindowSize = 0x01400000 (DWORD)
Tcp1323Opts = 3 (DWORD)
SackOpts = 1 (DWORD)
TcpAckFrequency = 4 (DWORD)
TcpDelAckTicks = 2 (DWORD)

And ran this command:

C:\ netsh interface tcp set global rss=disabled chimney=disabled autotuninglevel=disabled congestionprovider=none

Mostly from recommendations from this iSCSI site (more on that below):

Basically I’m saying the opposite.   Package up as many small bits as possible into larger ones to avoid the overhead.  Difficult to measure the differences here, but I’m recording them here for myself in case I run into problems.   Though, it turns out there is another TCP feature along the same lines that does help with streaming media and was much more noticeable.

I had already done all the cache optimizations possible on the ReadyNAS, and configured it for Raid 0 since I really don’t need redundancy for recorded TV shows and I’m using Amazon S3 for offsite backup as described here.   One of the features I found on the ReadyNAS was support for TCP Jumbo Frames.   So it turns out the standards the Internet still runs on today were defined over 30 years ago.   Given the reliability of Ethernet at the time, the designers decided that 1500 bytes was the largest amount of data to be communicated in each packet so if the receiver didn’t get the packet, the resend wouldn’t be so large.    In today’s home gigabit switched networks, collisions and data corruption are almost unheard of.  So rather than waste all the CPU & interrupt time splitting and joining small packets, you just build one big one.   This is also a bit more efficient because each packet also requires header and footer  information describing where it should be delivered to.   Unfortunately, because everyone has to follow a standard, the largest the Jumbo Frame packet goes to is 9K, but that’s still almost a 4x increase in the data delivered with the same header and footer used for the original frame size.

So I started looking at the configuration for the on-board network adapter on my Intel P35.  No Jumbo Frame option, but this I found this note:

Note: The Intel PRO/1000 PL Network Connection supports jumbo frames in Microsoft* Windows* operating systems only when Intel® PROSet for Windows Device Manager is installed.

Cool!  So Installed Intel ProWin and still couldn’t find the JF option.   Do a little more research and find this:

The following gigabit LAN components included with Intel® Desktop Boards do not support jumbo frames:

  • Intel® 82566DM Gigabit Ethernet Controller
  • Intel® 82566DC Gigabit Ethernet Controller

Eeeekk! My motherboard chipset doesn’t support jumbo frames!    So it was off to Amazon to see how much a 1Gb PCIe Network card with JF support would set me back.    Since 1GB is not longer the bleeding edge (they now have 10Gb NIC over Cat6),  this Startect card was just under $25.    This also allowed me to do some real world performance testing between the two use Lan Speed Test:

HW

Intel 82566DC

StarTech ST1000SPEX

SMB Read MB/s

48.05

45.8

SMB Write MB/s

24.28

33.43

So I’m pleased with the 30% speed improvement on write.   I read somewhere that JFs aren’t used for reads, hence there wasn’t any significant difference there.    So I’m all set right?   Oops, wait a minute.   It turns out that Windows Media Center won’t record to a network drive.    This is part of the DRM associated with CableCARD, which I’ve ranted about before.   It turns out the new ATI BIOS relaxed OCUR standards addressed most my CableCARD concerns.  This left two possible solutions:

  1. Record to the SSD and use DVRMSToolbox to move the recordings to the NAS (after commercial detection)
  2. Use iSCSI rather than SMB (Microsoft File Sharing)

Once again, going back to 30 years, there were a couple competing standards for attaching disk drives to computers.    Once of these was called SCSI and was championed by Apple and Sun (as well as many others).    SCSI had a bit high level command structure and some interesting chaining features that are similar to today’s USB features.   PCs meanwhile were using IDE interfaces which have evolved in their own direction.    Fast forward 30 years, and have these network cables which are now as fast as those big thick SCSI cables, so why not send the SCSI protocol over that?   Now you have iSCSI.

So the cool part is, you use iSCSI, and Windows thinks the drive is a local SCSI drive, not a remote NAS drive.     Of course, since I bought the cheaper ReadyNAS NV+ rather than the latest and greatest ReadyNAS Ultra, iSCSI support was not yet built in.   Enter the OpenSource world to the rescue.    Since the ReadyNAS NV+ is basically a little Sparc machine running Linux, Stephan at http://whocares.de/ ported the Linux iSCSI Target daemon.    If you go this route, be sure to check out his support page which was a little tricky to find.    In short, the original directions pointed you to the wrong config file, as I explain here:

Downloaded and installed 1.4.20.2. After following the instructions verbatim, I realized my target was not being created and spent a lot of time searching the net for the cause of this message:
iscsi_trgt: iscsi_target_create(131) The length of the target name is zero

I finally came back here and read all the comments. The problem the whole time was ietd.conf needs to be /etc/ietd, not /etc like the instructions say. 🙁

Hopefully google will find this comment for the next guy who comes along.

I mention a couple other quirks on the support page, but the above is the only one that matters.   So back to performance testing via Lan Speed Test:

Protocol

iSCSI

SMB

Read MB/s

21.05

45.8

Write MB/s

191.28

33.43

Whoa, check that out!    More than 6x improvement in write performance!    In fact, it now writes almost twice as fast as the theoretical network maximum… umm… wait-a-second….   That’s probably not right…

A little more investigation showed that because Windows considers it a SCSI drive, there’s lots of local caching going on which was fooling Lan Speed Test.    Using Blackmagic’s Disk Speed Test (which also won’t work on a network drive), write speeds were around 14MB/s.    So the freeware implementation of iSCSI leaves a bit to be desired performance wise.    There may be some other things you could do via direct device access and later versions of iSCSI, but I decided to go back to the DVRMSToolbox solution.

So I’m actually pretty happy with the current solution where I record to a temporary directory on the SSD and then move the file over to the NAS.   This also allows the Dragon Global Showanalyzer to work on the files locally rather than scanning them over the network.

HW

Intel 82566DC

StarTech ST1000SPEX

SMB Read MB/s

48.05

45.8

SMBWrite MB/s

24.28

33.43

Couple Interesting Finds

Hanging out in Santa Cruz this weekend, using the new hammer drill to bore through some tile and concrete floor. Quite pleased with the result. Found a couple other things that I need to follow up on this week.

  1. Microsoft Silverlight 4 It looks like they added the h261 hardware accelleration in this release, just like Adobe is doing with Flash 10.x.   The one thing Microsoft likes about Apple these days is Steve Jobs telling everyone Flash sucks, but I don’t think we’ll see Silverlight on the iPAD anytime soon.
  2. oishiiunko on TGB just posted a link to his Remote Control application for WM 6.5!   He’s now officially my new hero.   I’ve already installed it on the Tilt 2, but of course, I can’t do anything else until I get back home and install WMC Controller on the HTPC.    I can see some late nights and low contracting productivity  coming this week.
  3. Speaking of gigs, I just finished a little HTPC R&D project for a customer.   I’m considering posting a version of the results on Amazon’s Listmania to see if I get some more traffic back to here.
  4. So I used the proceeds from #3 to order  a MSI ATI Radeon HD5450 1 GB DDR3 VGA/DVI/HDMI PCI-Express Video Card R5450-MD1GH from Amazon.   Two things about this card.   The most important is I’ll finally be able to send the TrueHD audio track from a BluRay Disc to my receiver.   In short, the studio’s insist on a 100% hardware encryption/decryption scheme for the audio track on a BD, so you need a complete hardware solution to play it.   My recommendation to anyone else is just buy a $99 BD Player and get on with your life.   That said, Intel has just released a processor line that will do it, along with ATI and Nvidea.   This ATI card is only $70.   It doesn’t have any of the fancy 3D engines (actually, I think the 3D is slower than my current card) but aside from the TrueHD bitstreaming, it also has DDR3 SRAM, which runs cooler than DD R2 and hence doesn’t need a fan.   The only remaining noise after installing the SSD is the fan on the ATI 4850, which I now know is much more graphics card than I needed.   I’ll see if I can resell it on EBay, since this is still a decent gaming card.
  5. Finally, I also game across a Windows Services Hacking article on hack7mc.   This will be another time sync, but it will be nice to free up some memory on Windows and get the boot and response time just a little bit faster.

That all should keep me busy for a while (not to mention I’m doing another LCD screen mounting and install for another customer this week).   If you know anyone looking for help setting up their Home Theater, Flat Screen or HTPC, please send them my way.