I am in the process of finalizing a media management module, which is modular, easily extensible, and capable of presenting different media types in multiples of ways.
As it stands, media can be uploaded and specified to be either a node or a file. The original file is stored in a private storage area (best not located with the webserver directory), and derivatives (which are generated via a series of transformations, such as cropping, watermarking of image files) can be either public or private. In the case they are private, they are served via the drupal installation reading the file from the private storage area. In the case they are public, they perform the same was as a cached image file, somewhat similar to the imagecache module.
There are default viewers for various media types, which are organized around the extension it has. For instance, I have jw_player functioning for FLV files, 1pixelout for MP3s, and ordinary display of images for JPG, PNG and GIF extensions.
Since the transformations, presenters and extensions are all modular, it is possible to quickly add more functionality quickly. Also, each media file can have meta data stored with it, including licensing, authorship, or other things. (Although at the moment, there doesn't exist a way to modify this through administration settings).