I've written a music server for Android. The app is free and in the market. You can find it here:
https://market.android.com/details?id=earlmagnus.androidhme
I don't have a lot of options for testing a variety of environments, so if you have trouble with it, please let me know by posting here. I know, for example, there may be a Bonjour/Rendezvous issue with the app and S2s... it's not clear yet if that's my code, the environment the S2 is in, or an imperfect of understanding of the required service description on my part.
Here is the description in the market:
Have an Android device with lots of MP3s? Have a TiVo connected to your home sound system? Now you can stream MP3s from your phone or tablet to your TiVo over WiFi.
How it works:
Start the application to start the music server. Shortly after starting, the application will tell you its service has been published and, at that point, "Music on Android Device" should appear in the "Music and Photos" menu of your TiVo, near the bottom. Select that menu item to begin browsing your music.
The top-level directory will show two or three entries. You can browse by Album or by Playlist. On versions of Android that provide Album Artist information -- Gingerbread/2.3.3 and higher -- you can also browse by Artist. You can start playback from the Artist, Album, Playlist, or individual track level. Because the top three entries are "virtual" rather than physical directories, you cannot start playback from there.
The back button will exit the application an shut down the server. If you want to do other things on your device while the server is running, hit the home button. You can return the application to the fore by tapping its icon or its line in the notification area.
The Application interface will display the Album, Artist, Track and Album art for the track being sent to the TiVo. If no album art is available, the "TiVo Guy" will be shown.
The menu button will enable you to set the name of the device that should appear in the TiVo's menu. It will let you chose the behavior of the server when the TiVo tell it you have left the music interface -- exit or remain running. You have the option of using beacon or mDNS for discovery. Beacon will be more reliable on Android and is the default. If you change preferences, the server will restart.
Clicking ads (and supporting the developer) will not interfere with playback.
Known Issues:
Although Android supports a number of audio formats, the TiVo supports only MP3. Only MP3s will be played.
The MP3s must be on an SD card. Unfortunately, Android makes one choose to fetch music information from internal or external storage. Since internal storage tends to be limited, I use external. If there is demand, I will provide a preference in a later version.
Shuffle is not well supported. The TiVo protocol expects the server to be able to support a repeatable random sequence of tracks and provides a "seed" to facilitate that repeatability. The database used by Android cannot use the seed, so it cannot provide a repeatable random sequence of tracks. As a result, the current implementation is a bit of a hack. I'm working on a solution.
The TiVo sometimes will not properly advance tracks, especially if you have used the channel up/down buttons to advance tracks. This problem exists even when using the official TiVo Desktop. If you have that problem, use the "skip to tick" button (->|)to advance or left-arrow out to the track listing and play from the desired point instead.
Seek has not yet been implemented. Fast forward and rewind are disabled.
Some home networks with multiple routers or range extenders may have "accidental" subnets. If the Android device and the TiVo are on different subnets, they will not find each other.
Be aware:
The server will prevent the device from sleeping as long as it is running. You can shut off the screen, but WiFi and an awake CPU will consume power. If you do shut the screen off, performance of switching between tracks or browsing may be somewhat degraded. You will probably want the device to be docked or otherwise plugged in while running the server.