GeeXboX uShare
A free UPnP A/V & DLNA Media Server for Linux
This page is sponsored by Hosting.com and Top Hosting Center, enterprise level web hosting companies that specializes in business web hosting and cloud server technology.
uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server component that provides UPnP media devices with information on available multimedia files. uShare uses the built-in http server of libupnp to stream the files to clients.
GeeXboX uShare is able to provide access to both images, videos, music or playlists files (see below for a complete file format support list). It does not act as an UPnP Media Adaptor and thus, can't transcode streams to fit the client requirements.
uShare is written in C for the GeeXboX project. It is designed to provide access to multimedia contents to GeeXboX but can of course be used by any other UPnP client device. It should compile and run on any modern POSIX compatible system such as Linux.
By lack of spare time, motivation and interest, uShare development is currently discontinued (this may change though). Don't expect release anytime soon :-(
Latest release of uShare is 1.1a.
ChangeLog:
Support for XboX 360 dashboard Fall Update (.avi and .divx now are supported)
DLNA support is not enabled by default, as not mandatory.
Some configure script fixes and better support for cross-compilation.
Fixed network interface discovery on MacOSX.
Much more complete DLNA support through external libdlna.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Note that uShare links with libupnp, which is licensed under the terms of a modified BSD license (i.e. the original BSD license without the advertising clause). This license is compatible with the GNU GPL.
The following programs are required to build uShare:
GNU C Compiler (gcc), 2.95 or later.
The GNU C Compiler is part of the GNU Compiler Collection which can be downloaded from http://gcc.gnu.org/.
pkg-config.
pkg-config is a helper tool used when compiling applications and libraries.
It helps you insert the correct compiler options on the command line.
(see http://pkg-config.freedesktop.org/wiki/).
The following UPnP library is required to build and run uShare:
Linux SDK for UPnP Devices (libupnp), 1.4.2 or later.
The libupnp library is used to communicate using the UPnP protocol. libupnp can be downloaded from http://pupnp.sourceforge.net/.
The following DLNA library is required for proper DLNA support:
libdlna, 0.2.3.
The libdlna library is used to provides DLNA profiles informations. libdlna can be downloaded from http://libdlna.geexbox.org/.
Compile uShare by running configure and then make. This should produce an executable ushare in the src subdirectory, which can be used right away. No extra files need to be installed.
Example :
CFLAGS="-Os" ./configure --prefix=/usr
make
If you want to enable DLNA support, run:
./configure --enable-dlna
If you want to install uShare on your system, run :
make install-strip
This will copy the executable and manual page into their appropriate directories (/usr/bin and /usr/man/man1 in this example).
For more information regarding configure and make, see the INSTALL document.
At first you need to be sure that you have setup a multicast route for UPnP messages. If you don't but have a default route attributed, then this later will be used. Otherwise, simply declare a new route for UPnP multicasts (for example using eth0 interface) :
route add -net 239.0.0.0 netmask 255.0.0.0 eth0
uShare runs from the console only. It supports the usual --help option which displays usage and option information.
Options:
-n, --name=NAME Set UPnP Friendly Name (default is 'uShare')
-i, --interface=IFACE Use IFACE Network Interface (default is 'eth0')
-f, --cfg=FILE Config file to be used
-p, --port=PORT Forces the HTTP server to run on PORT
-q, --telnet-port=PORT Forces the TELNET server to run on PORT
-c, --content=DIR Share the content of DIR directory (default is './')
-w, --no-web Disable the control web page (enabled
by default)
-t, --no-telnet Disable the TELNET control (enabled by default)
-o, --override-iconv-err If iconv fails parsing name, still add to media contents (hoping the renderer can handle it)
-v, --verbose Set verbose display.
-x, --xbox Use XboX 360 compliant profile
-d, --dlna Use DLNA compliant profile (PlayStation3 needs this)
-D, --daemon Run as a daemon.
-V, --version Display the version of uShare and exit
-h, --help Display this help
uShare expects at least one directory argument (-c argument), specifying where multimedia files are stored. You should probably also use the -i option to specify which interface uShare should listen on.
You can also perform remote control of uShare UPnP Media Server through its web interface. This let you define new content locations at runtime or update the currently shared one in case the filesystem has changed.
The currently available uShare release is 1.1a.
Sources can be downloaded here.
Fedora Package
If you're using Fedora FC4 GNU/Linux distribution, you can also grab the binary for i386.
Development Tree
The latest uShare development tree can be grabbed using Mercurial, a revision control system, similar in purpose to tools such as CVS, SCCS, and Subversion. It is used to keep track of the changes made to a source tree and to help programmers combine and otherwise manipulate changes made by multiple people or at different times.
There are currently 2 ways of accessing the Mercurial tree: via command-line or web interface (to just have a look to some changes on a specific file, for example). You can directly access to the web interface with your browser from:
In order to access to Mercurial via command line, create and enter a new directory and do the following (be sure that you have installed the mercurial package).
To get a local copy of the uShare's Mercurial repository :
hg clone http://hg.geexbox.org/ushare
To update your local copy of the Mercurial, synchronizing with our server :
If you need to listen on more than one interface, you will have to start multiple instances of the media server.
uShare keeps some information on files in memory. If your multimedia collection is huge, this might be a problem.
DLNA implementation is not yet complete or perfect. Some files may not be streamed or recognized. The specifications themselves are pretty weak in terms of files support and thus, it's possible you won't ever be able to stream your files, even with a perfect implementation.