My Media - Your Music and Video on the Roku DVP

My Media

A simple personal media server and channel for streaming your music, video, and photo collection to your Roku

MyMedia is a “private channel” which means you install it by clicking on a link instead of finding it by browsing through the Roku channel store. The installation of MyMedia is a bit more involved than most of the private channels you encounter because it requires that special software be running on both your Roku (the channel) and your personal computer (the MyMedia server.) Stick with it and soon you’ll be listening to your music collection, watching your own movies, and browsing your own photos all streamed to your television through your Roku.

Add the channel to your Roku!

This is the place to ask questions if you have any! You can tell from the length of this thread that quite a few people use MyMedia and they love to help each other out.

You can also check out our wiki and our Frequently Asked Questions page.

Features so far:

  • Stream MP3’s and WMA’s from your Windows, Mac, or Linux computer over your local network to your Roku DVP.

  • Music is organized on your Roku using the same directory system you have on your desktop.

  • MP3 ID3 tags provide metadata about the music

  • Album art is displayed where available.

  • Video (See encoding instructions in later posts)

  • Uses your existing organization scheme. Just tell it where you keep your Music and Video.

  • Music Shuffle / Loop forever

  • Playlists

  • Photo Browsing

  • All open source. Artists, developers, testers, and writers are all welcome to join in and lend a hand to make this the media player we all want it to be.

Enjoy!
-Brian

Stop reading now unless you’re interested in installing MyMedia in developer mode instead of using the private channel mechanism

Ok, you’re still reading. I guess you want to do things the hard way. MyMedia is an open source project that encourages contributions from the community. As such, we also have a process to help you install MyMedia in developer mode so that you can tweak the channel code and contribute changes back to the community. If you’re interested in doing this, follow these instructions:

Download it Here and follow the instructions at that page to get things set up.

Technical development group
http://groups.google.com/group/mymedia-roku-developers/

Main GitHub Page
http://github.com/netguy204/roku_media_server/

EDIT: Moved Video from being a planned feature to being a deployed feature.

EDIT: Added link to developers group.

EDIT: Changed download link to direct link

EDIT: Changed name to My Media (from My Music)

EDIT: Added Mac link, photo browsing is official planned feature now

EDIT: Updated primary links to point at new project page

EDIT: Tips n’ hacks link

EDIT: Retooled now that we’re a private channel

For those of you who have gotten this working for Windows, here’s how to automate the web server startup.

How to start the Python web server automatically
This can be done with a simple batch file. First, you should add en environment variable for your Python installation so that you can call the python.exe file from anywhere. To do this, modify the PATH statement in your environment variables to include this:

c:\python26

To add environment variables in Windows 7 & Vista:
Right-click My Computer and then click the Advanced system settings link. Click the Environment variables button. In the System Variable section, select the PATH item and click the Edit button. At the end of this string, add a semicolon and then your new variable for Python.

Now, assuming that your Roku Media Player files are in a folder named roku_media_player, create a batch file like this:

cd c:\roku_media_player\server
python rss_server.py

Save it as “roku_start.bat” to and double-click it to start your web server.

So you’ve noticed that the command windows stays open?
Here’s how to run this without showing the command window (invisible mode)
Create another file that looks like this:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "c:\Python26\roku_start.bat" & Chr(34), 0
Set WshShell = Nothing

Save this file as “roku_start.vbs”. When you launch this .VBS file, it will call the .BAT file you made above, but will not show the command window.

Now, how do I get this to run each time I start my computer?
Easy. Just put the roku_start.vbs (or a shortcut to it) into your Windows Startup folder.

Windows Startup folder locations
Windows 7 + Vista
NOTE: The all users Startup folder is a hidden system folder located at:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

Windows XP
C:\Documents and Settings\All Users\Start Menu\Programs\Startup

How do I stop the Python web server if I can’t see the command window?
Normally, you could use CTRL+C to stop the web server, but without a command window, this isn’t possible. Just open Windows Task Manager and on the Processes tab, sort the list to fine the process called Python. Select it and then hit the End Process button to stop the web server.

I noticed personal video in the planned features. Any idea on a timeline for that?

thanks

I got the channel installed on Roku. Server is running… I can connect to http://:8001/feed from another PC. Server IP address is correct on the roku.

The channel hangs on “retrieving…”

Could spaces in the music path cause problems? Anything else to check?

EDIT: Spaces in the path is the problem. Even enclosed in quotes.

“C:\Documents and Settings\Doug\My Documents\My Music” doesn’t work but C:\Music does. Could be the path with spaces is too long also.

dougrb:

I’m surprised that the path with spaces was the problem. I’ll give that some more testing but I’m glad you got it working in the mean time. I think a few other testers have been successful with spaces in their music path. I know, on linux, that spaces work provided I don’t enclose the path in quotes.

Other than that it sounds like your up in running. Did I understand you correctly? Does everything seem to be working?

srankin:

The major technical issue I’m still working through in my head is the best way to help everyone get their media into the correct format. The Roku player is very particular about supported video formats and everyone’s favorite DivX isn’t on the list.

The most ideal scenario would be to translate any video compression (within reason) in real-time to the format that the Roku expects. That way you don’t have to spend a lot of time converting your video to yet another format and waste space storing it in that format. One of our users has done some speed testing going from DivX to H264+AAC (the preferred Roku format) and reported that the process was very slow and not suitable at all for real time.

Second most ideal scenario is that we put together a tool using one of the great catch-all libraries (avisynth comes to mind) that will automate converting your collection into the Roku format. Then everyone can schedule an overnight or several day batch job to get their stuff converted and go from there.

Finally, I could just take a weekend and get the player ready to handle H264+AAC format video and leave it up to everyone else to solve the conversion problem.

Timeline: Don’t know yet. Still some improvements to be made in the music player and I want to focus on that right now. I’ll keep you posted.

I use spaces in the path. Be sure not to use quotes, even with spaces. Are you using the springboard.py GUI file to do the install?

I initially didn’t use quotes and then figured I might need them. I did try a shorter path name with spaces C:\My Music Test and it works.

dougrb:

Using your original setup (with the long path and spaces) were you able to browse and drill down into your collection when you connected to the server using your web browser?

If so, then this could be some limitation in path length in the client that we need to know about.

AHHH… that’s what the server page is supposed to look like. Here’s what I get with the problem path name. I don’t see any way to add file attachments. I’ll try a cut and paste but it might be ugly (not like it’s that pretty in HTML).

<class ‘eyeD3.tag.TagException’> at /feed
Multiple PCNT frames not allowed.Python C:\Documents and Settings\Doug\Desktop\netguy204-roku_media_server-a66bfac\server\eyeD3\tag.py in __loadV2Tag, line 1358
Web GET http://localhost:8001/feed

Traceback (innermost first)
C:\Documents and Settings\Doug\Desktop\netguy204-roku_media_server-a66bfac\server\eyeD3\tag.py in __loadV2Tag

raise TagException(str(ex)); …
â–¶ Local vars
C:\Documents and Settings\Doug\Desktop\netguy204-roku_media_server-a66bfac\server\eyeD3\tag.py in link

padding = self.__loadV2Tag(f); …
â–¶ Local vars
C:\Documents and Settings\Doug\Desktop\netguy204-roku_media_server-a66bfac\server\rss_server.py in file2item

if not tag.link(fname): …
â–¶ Local vars
C:\Documents and Settings\Doug\Desktop\netguy204-roku_media_server-a66bfac\server\rss_server.py in getdoc

items.append(file2item(os.path.join(base,file), config, curr_image)) …
â–¶ Local vars
C:\Documents and Settings\Doug\Desktop\netguy204-roku_media_server-a66bfac\server\rss_server.py in GET

return getdoc(config.get(“config”, ‘music_dir’), config).to_xml() …
â–¶ Local vars
C:\Documents and Settings\Doug\Desktop\netguy204-roku_media_server-a66bfac\server\web\application.py in handle_class

return tocall(*args) …
â–¶ Local vars
C:\Documents and Settings\Doug\Desktop\netguy204-roku_media_server-a66bfac\server\web\application.py in _delegate

return handle_class(cls) …
â–¶ Local vars
C:\Documents and Settings\Doug\Desktop\netguy204-roku_media_server-a66bfac\server\web\application.py in handle

return self._delegate(fn, self.fvars, args) …
â–¶ Local vars
C:\Documents and Settings\Doug\Desktop\netguy204-roku_media_server-a66bfac\server\web\application.py in process

return self.handle() …
â–¶ Local vars
Response so far
HEADERSVariable Value
Content-Type ‘application/rss+xml’

BODY

Request information
INPUT

No data.
COOKIES

No data.
METAVariable Value
app_stack [<web.application.application instance at 0x00E12350>]
fullpath u’/feed’
headers [(‘Content-Type’, ‘application/rss+xml’)]
home u’http://localhost:8001
homedomain u’http://localhost:8001
homepath u’’
host u’localhost:8001’
ip u’127.0.0.1’
method u’GET’
output u’’
path u’/feed’
protocol u’http’
query u’’
realhome u’http://localhost:8001
status ‘200 OK’

ENVIRONMENTVariable Value
ACTUAL_SERVER_PROTOCOL ‘HTTP/1.1’
HTTP_ACCEPT ‘text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, /;q=0.1’
HTTP_ACCEPT_CHARSET ‘iso-8859-1, utf-8, utf-16, *;q=0.1’
HTTP_ACCEPT_ENCODING ‘deflate, gzip, x-gzip, identity, *;q=0’
HTTP_ACCEPT_LANGUAGE ‘en-US,en;q=0.9’
HTTP_CACHE_CONTROL ‘no-cache’
HTTP_CONNECTION ‘Keep-Alive, TE’
HTTP_HOST ‘localhost:8001’
HTTP_TE ‘deflate, gzip, chunked, identity, trailers’
HTTP_USER_AGENT ‘Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10’
PATH_INFO ‘/feed’
QUERY_STRING ‘’
REMOTE_ADDR ‘127.0.0.1’
REMOTE_PORT ‘9818’
REQUEST_METHOD ‘GET’
SCRIPT_NAME ‘’
SERVER_NAME ‘localhost’
SERVER_PORT ‘8001’
SERVER_PROTOCOL ‘HTTP/1.1’
SERVER_SOFTWARE ‘CherryPy/3.1.2 WSGI Server’
wsgi.errors <open file ‘’, mode ‘w’ at 0x00A540C0>
wsgi.input <web.wsgiserver.SizeCheckWrapper object at 0x00E64C70>
wsgi.multiprocess False
wsgi.multithread True
wsgi.run_once False
wsgi.url_scheme ‘http’
wsgi.version (1, 0)

I installed the latest version. WMAs play great. The artwork looks great.

CURRENT REQUESTS:
Artist Name/Album/Track displayed while songs are playing.
Pause function.

…and that’s all I need.

I feel like Steve Martin in the Jerk:

http://www.youtube.com/watch?v=1el59ig9AK8

Here’s another point that might be obvious to many if not most (but wasn’t instantly obvious to me), but if you are running the media server on your PC, you should probably assign that PC a static IP address.

Think I did something wrong right of the bat. :confused:

Followed the troubleshooting tips and I can’t get to http://localhost:8001/feed. I do see a Tk window with a big button saying “Stop Server.â€

Quirk report:

The client cannot handle non-standard english characters. So if you are trying to open a folder with (for example) an album with Spanish language songs with accents and special characters you will not be able to open the folder. Also, if you are trying to access an artist folder with a special character (like, I’m guessing Mötley Crüe) you will not be able to even access the artist folder.

The quick solution is obvious: just rename a couple files and you are good to go.

Is it possible to run the server on Mac OS X in its present form? And if so, can I configure it using springboard.py? I have launched springboard.py and have figured out most of the settings (need to check the Roku MAC address to find the IP), but I haven’t yet clicked the “Launch Server” or “Install Client” buttons.

dougrb:

Looks like the ID3 library (the code that figures out the artist and album names) wasn’t able to handle one of your mp3’s and took down the server in the process. I’ve added some error checking that will make it skip the problem mp3 an keep going. If you run springboard_debug.bat or launch_server_debug.bat it will print out which MP3 it skipped. This is in the latest version at the usual place.

nrao1:

My first guess is that springboard can’t find the files for the client and server in the usual places. Did you extract the entire zip first and then run springboard? It assumes that all the client code will be in a folder called client and that folder at the same level as another folder called server. The server folder must contain all of the python code.

Try extracting the zip again – make sure you extract everything in it and keep it in the same directory layout it is in the zip – and then run springboard again.

hammerpocket:

You’ll be our first OS X tester and since it sounds like you’ve managed to run springboard I’d say it will likely just work! It shouldn’t hurt anything to try. I do all my development on Linux which (at a filesystem / kernel) level, has a lot more in common with OS X than Windows. Your chances are good.

The easiest way to get your Roku IP address is by going to the settings page on your device. Also, once you put your Roku into developer mode it will tell you its IP address. Springboard won’t be able to install the channel unless your Roku is in development mode.

wizzy1291:

Good catch! I’d like to fix this. If you go to the album that has special characters using your browser and click on the song does it play?

I’m trying to figure out if the Roku just can’t handle it or if it’s something at the server.

wizzy1291:

I’ve added your requests to the issue tracker under feature requests.

http://github.com/netguy204/roku_media_server/issues

On the Artist Name/Album/Track request: What happens right now is that when the player cycles to the next song it highlights the currently playing song and displays the song name and the artist underneath. Is that what you see? For WMA’s I don’t extract the metadata yet (haven’t figured out how to) so all you’ll see for those is the file name.

What’s your ideal scenario for displaying this information?

Okay, I made my first attempt with OS X. Client appears to have loaded correctly (shows up anyway), but when I choose it I only get “retrieving…” forever. I’ve double checked the ip addresses in the springboard. I need to look back over the thread to see if anything else is relevant. Any troubleshooting suggestions?