|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- This code is based upon code by Tim Potter.
-
- It is licensed under the MIT license at:
- http://opensource.org/licenses/mit-license.php
-
- I got a D-Link DSM-520 but I needed a UPnP Media Server to stream data
- with. I tried one, but it had issues running under FreeBSD's Linux
- emulation. Since I know Python, I went looking for a python server
- and found this code. The code was a good framework, so I expanded upon
- it.
-
- Tested devices and/or programs:
- Intel's Media Control Point and Media Renderer
- D-Link DSM-520
-
- The Intel tools are good for testing and are available at:
- http://www.intel.com/cd/ids/developer/asmo-na/eng/downloads/upnp/index.htm
-
- Either make a directory media and put the files there, or make a symlink
- named media to your media files. Either will work. Run it as:
- ./pymediaserv <localip> [ <http server port> ]
-
- Good Luck!
-
- John-Mark Gurney <gurney_j@resnet.uoregon.edu>
-
- Ideas for future improvements:
- Add res to the DVDTitle container to play the title, and for other
- containers that it makes sense for.
- Make the directory persistant so that the server's UUID can not
- change each run and we don't have to recreate the objects.
- Figure out how to rearchitect ContentDirectoryControl so I don't
- need to use doRecall. This may be helped by not necessarily
- figuring out all the children of a member just to fetch it.
- childCount isn't a required attribute.
- Autodetect IP address.
- Support sorting by other attributes.
-
- v0.x:
- Look inside MPEG-TS for TVCT and/or PAT and if there is more
- than one program, make it a container w/ the different
- programs.
- Add support for multiple res elements and automatic transcoding
- to either avi/xvid or mpeg2 using ffmpeg.
- Look inside DVDs and handle titles and chapters.
- Empty dirs w/ no content would disappear, and cause a short
- response to BrowseDirectChildren. The DSM-520 askes for one
- more than displayed, and uses the existant of the extra item
- as indication if there are more items.
- Understands zip and tar files now. It will dynamicly extract
- items, so you can zip up your jpegs and view them w/o having
- to unzip them. tar files can be gzip'd or bzip2'd.
- Each item now has an optinal content attribute, which if set is
- installed in the web server.
- Don't send 'foobar' when exiting, stops a traceback on another
- instance of PyMedS.
- v0.2:
- No longer require restarting to see new files/dirs in hierarchy.
- Add FSStorage which is a set of classes for handling filesystem
- objects, also handles updateID's.
- Make the root container customizable, so you don't end up with
- a single entry (like media) at the root. This lets us use a
- FSDirectory as the root and get auto-enumeration
- Support returning custom error codes, so that we can return 701
- No such object among others.
- Support deleting items, so we can remove them when no longer on
- the file system.
- Make Containers a subclass of list. This lets use populate
- childCount properly.
- Add required attributes to Storage* classes.
- Support custom container classes to addContainer.
- Add a few more custom mime-types.
- Sort listings by name for now.
-
- v0.1:
- Don't bind the UDP socket to the multicast address, so replies
- go out on our local IP.
- Send out notify requests when we register the services with SSDP.
- Send out byebye notifications when we are shutting down.
- Randomize the UUID for the server (this should be part of the
- saved state).
- Randomize the port, or optionally set it on the command line.
- Teach ContentDirectory.py the basics on handling Containers and
- generic browse support. You can addItem and addContainer, which
- each return either respective ObjectID.
- We already support partial chunking of responses, but we don't yet
- support filtering or sorting.
|