Monday, March 7, 2011

Streaming music with gnump3p and Linux - mp3, ogg, movies


If you have a big collection of music, you can’t have in all your computers, so you’d better have it only in one of them and share it with the others.
There are a lot of ways to do that, you can use Samba, NFS, or other means to share you drive with others, and thus your music collection, but a better way IMHO, is to share it using a streaming server.
Streaming media
According to Wikipedia:
Streaming media is multimedia that is constantly received by and presented to an end-user while being delivered by a streaming provider. The name refers to the delivery method of the medium rather than to the medium itself. The distinction is usually applied to media that are distributed over telecommunications networks, as most other delivery systems are either inherently streaming (e.g., radio, television) or inherently non-streaming (e.g., books, video cassettes, audio CDs). The verb ‘to stream’ is also derived from this term, meaning to deliver media in this manner. Internet television is a commonly streamed medium.
Live streaming, more specifically, means taking the media and broadcasting it live over the Internet. The process involves a camera for the media, an encoder to digitize the content, a media publisher where the streams are made available to potential end-users and a content delivery network to distribute and deliver the content. The media can then be viewed by end-users live.
In our case, this basically means, that the files does not need to be downloaded in order to play them, and they will flow over the network connection from the server to the computer with the mp3 player software. This “flow” will occur while the music is playing on the other side of the server.
The software we will use to stream the music is gnump3d
From its homepage
GNUMP3d is a streaming server for MP3s, OGG vorbis files, movies and other media formats.
And they also assure the server is highly secure, with these three aspects in mind:
  • Nobody should be able to browse your filesystem, except that specific part which you make your server root
  • Nobody should be able to crash the server, so that you can’t use it. (A denial of service attack).
  • Nobody should be able to trick the server into running code of their choosing
This being said, let’s go directly to the installation and configuration of gnump3d

Streaming music with gnump3d

Installation
Arch Linux
pacman -Sy gnump3d
Slackware
Install if from slackbuilds
I’ve not tested in other distributions but chances are that your package tool, can install if for you, if not you can download the last version from here, and install it like its homepage recommends.

PREREQUISITES
GNUMP3d has only one requirement - a working Perl installation with the fork() function implemented.
In practice this means some for of Unix system, or a Microsoft Windows system with a very recent version of ActiveState’s Perl port.
INSTALLATION
GNUMP3d installation should require no more than the following:-
make install
This will install the software in /usr/bin, with the configuration files in /etc/gnump3d/

Configuration
The configuration is /etc/gnump3d/gnump3d.conf and it is the only file you need to edit, the simpliest one could be:
port = 80
#Default: port =  8888
root = /home/user/mp3collection
#Defaul: root = /home/mp3
#
logfile = /var/log/gnump3d/access.log
#
log_format = $connected_address - $user [$date] "GET $REQUEST" $HTTP_CODE $SERVED_SIZE "-" "$USER_AGENT"
#
errorlog = /var/log/gnump3d/error.log
#
user = nobody
#
allowed_clients = 10.1.1.0/24
# Default: allowed_clients = all
#
always_stream = 1
#
advanced_playlists = 1
#
theme = Tabular
##
theme_directory = /usr/share/gnump3d/
##
#
directory_format =  $DIR_NAME $NEW$SONG_COUNT$DIR_COUNT[$RECURSE]
##
new_format = New
##
new_days   = 7
#
#Default: file_format =  $SONG_FORMAT[Info] [Download]
#
#As I do not want to offer the option do download the song, but only to hear it, I modify the above line, and take the Download link out. I understand that this is not really secure, but for the standard user it will work.
#
file_format =  $SONG_FORMAT[Info]
#
song_format = $TRACK - $ARTIST - $ALBUM - $SONGNAME [ $GENRE - $LENGTH / $SIZE ] $NEW
# Default to sorting by the track number, due to popular.
sort_order = $TRACK
#
plugin_directory = /usr/lib/perl5/5.10.1/gnump3d/plugins
#
mime_file = /etc/gnump3d/mime.types
#
file_types = /etc/gnump3d/file.types
#
now_playing_path = /var/cache/gnump3d/serving
#
tag_cache = /var/cache/gnump3d/song.tags
#
shoutcast_streaming = 1
#
use_client_host = 1
##
#  End of gnump3d.conf
####
Few more tweaks
If you want to tweak it a little bit more, you can implement the downsampling, this is useful if you plan to stream over the internet, because if have your music from iTunes like me, you have notices that the files are really big at 256 Kbps, and that may not work very well over the Internet, but it is great for the Local Network.
First install a software capable to down sample the files, such as lame.
Arch Linux
pacman -Sy lame
Debian
apt-get install lame
Note: You need multimedia repository, enabled in you /etc/apt/sources.list file.
Slackware
Use slackbuilds once again, here is the link
OK, now that lame is installed, you need to enable the feature in the server.
downsample_enabled = 1
Add that line to the /etc/gnump3d/gnump3d.conf file.
Then, add these lines, to decide which clients will have its songs downsampled
downsample_clients = ALL
no_downsample_clients = 10.1.1.0/24
That will downsample for all expect the local network users.
You can also downsample to all users
downsample_clients = ALL
no_downsample_clients = NONE
Finally, add these other lines to define the lever of downsampling
downsample_high_mp3   = /usr/bin/lame  --mp3input -b 56 $FILENAME -
downsample_medium_mp3 = /usr/bin/lame  --mp3input -b 32 $FILENAME -
downsample_low_mp3    = /usr/bin/lame  --mp3input -b 16 $FILENAME -
And the default quality:
default_quality       = medium
When the clients access the server using their browser, 

No comments: