HME (Home Media Ecosystem) is new with Windows Media Player 11. This feature allows a Windows-based system to serve streaming media to client devices, which can be Windows Vista systems or other embedded devices (such as an Xbox 360). HME is very useful for embedded applications, as it turns Windows Media Player into the core of a set-top-box system. HME is available for Windows XP Embeded as of the Windows XP Embedded Update Rollup 1.0 release. This article shows how to build and configure an XP Embedded image that can act as an HME server.
Building the Image
It is fairly straightforward to build an image with HME: just build an XP Embedded image that includes the Windows Media Player 11 and the Winlogon components. All other dependencies will be brought in upon dependency resolution, including the new Windows Media Format Runtime 11 component, which contains the WMPNetworkSvc service. The service is implemented in wmpnetwk.exe and shown as “Windows Media Player Network Sharing Service” under Service administration.
When the image is built and passes a successful FBA, you’ll be able to confirm that the service is installed on your image by seeing this line in the FBA log:
[FBALaunch] C:\Program Files\windows media player\WMPNetwk.exe install (ExitCode: 0x0)
Enabling the service
Booting into the image, HME is not enabled by default. To enable HME, just share some media from the embedded box, by following the instructions at http://www.microsoft.com/windows/windowsmedia/player/faq/sharing.mspx, under “how do I turn on media sharing?”.
If you have sc.exe on your image (from the Service Command Line Tool component), you’ll be able to confirm that HM is running by using the following command:
C:\> sc query WMPNetworkSvc
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
You can also use sc.exe to programmatically enable the service (use “sc start”).
Important Note: You will NOT be able to enable HME on an image that has the Minlogon component configured. The HME service must be configured to run logged on as “NT AUTHORITY\NetworkService” (it is so by default), and never to run as SYSTEM (or “local system account”).
What is shared?
The service allows remote systems on the same subnet to access all media on the server’s Media Library (as understood by Windows Media Playe). In that manner, you control what is shared by adding and removing media from Windows Media Player’s library.
This is very similar to regular Windows file sharing, except that there is no authentication, since it is meant to work in a trusted environment (such as that of a LAN in a private home). Access to the server is blazingly fast, compared to traditional Windows file server.
A quick test for the server is to plug a Windows Vista (it must be Vista, as the Windows XP version of WMP11 does not have an HME client) on the same subnet, and observe that the media library on the remote computer shows as an additional node under “library”:
By clicking on that node, the client is able to browse and play media on the server.
CODECs and transcoding
It is important to notice that media can only be played on a client if the client has the CODECs to play that media. Windows Media Player’s HME system has built-in CODEC negotiation and transcoding – such that media is converted on the server before streaming so that it matches one of the CODECs installed on the client. That process, however, only works if both client and server share at least one common CODEC for the type of media being streamed. So you’ll want to carefully evaluate your usage scenarios, and pre-install CODECs on the XP Embedded image to meet client-side expectations.
HME is an important feature of Windows Media Player, which is sure to find its way into embedded applications. XPe’s Windows XP Embedded Update Rollup 1.0 makes it fairly easy to configure and use HME on Windows Embedded systems.