[icecast] Multiple Mountpoints Problem

Mark D. Scudder mark at markscudder.org
Tue Jul 9 10:53:56 PDT 2002



Hello,

I've searched far and wide on the net and the only thing I've come up
with is that no one has ever had this problem.

I'm running Icecast 1.3.12 and the latest liveice on a Slackware 8.1
box.  The idea here is that I need to stream a live source in multiple
bitrates.  I am having a problem that is just about going to send me
back to Shoutcast.

I have set up two ENCODER_STREAM_SETs in my liveice.cfg, one on
mountpoint live24, one on mountpoint live48 (I've tried different names
too, like 24 and 48, low and hi, etc).  If the option mount_fallback is
set to 1, connecting to *any* mountpoint on the icecast server will play
a stream with whatever parameters are set in ENCODER_STREAM_SET 0,
*even* if I connect to the mountpoint specified in ENCODER_STREAM_SET 1.

If I set mount_fallback to 0, and then try to connect to the icecast
server, *NO* streams work, even if I connect to the mountpoints
specified in the ENCODER_STREAM_SET lines.

If I may, let me include my icecast.conf and my liveice.cfg.  I'm
starting to wonder how anybody does this at all; these problems are so
strange and I don't have confidence that I'm going to get an answer,
because it seems the question has never been asked or answered before.

Thanks in advance for any help you can offer.  Included config files
follow.

-Mark

**********ICECAST.CONF*****************
# This be a comment, I like comments.
# To use this file, copy it to etc/icecast.conf in the icecast base
directory

########################################################################
########
# I suggest you read this file carefully, and don't do anything silly
# cause the configuration file parser is pretty lame.
# If not stated otherwize, you can change these while the server is 
# running (through the admin console). Or by changing this file
# and using the rehash command (or (if supported) sending SIGHUP)
# Please use the admin console though, cause that's what its there for
:)
########################################################################
########

############### Server Location and Resposible Person
##########################
# Server meta info, please fill out these.  
# They get displayed when listing directories, streams, and 
# if the client supports it, among the other stream headers.
# You can put anything here, it's just for show.
###############

location Radio Free Binghamton - WHRW 90.5FM - Binghamton University
rp_email webmaster at whrwfm.org
server_url http://www.whrwfm.org

########################### Server Limits
######################################
# These describe the maximum number of simultaneous connections allowed.
# When reached, the server will refuse access.
# There is a builtin bandwidth measuring tool inside the icecast server,
# and when icecast thinks that it is using more than "throttle" MB/s,
then
# no clients or sources will be allowed until the bandwidth usage goes
back
# down below the limit. Use this with caution, since the bandwidth
measurement
# is in no way an exact science.
###########################

max_clients 30
max_clients_per_source 30
max_sources 10
max_admins 2
throttle 10.0

########################## Stream Meta Data
####################################
# This is a experimental feature, at best. 
# When it does not work, it will put the whole stream out of synk on the
client
# side, and you will get a big mess.
# use_meta_data controls whether this icecast server will use title
streaming at
#               all. It's turned off by default, cause it creates chirps
in the
#               stream if you're not careful.
# streamtitletemplate is a the template for creating the title that gets
sent to
#                     the client and the directory server. %s will be
#                     substituted for the actual filename.
# streamurl is the default url for each stream.
# nametemplate is a template for the name of each stream.
# desctemplate is a template for the description of each stream.
##########################
use_meta_data 0
streamurllock 0
streamtitletemplate %s
streamurl http://yp.icecast.org
nametemplate %s
desctemplate %s

<p>######################## Mountpoint fallback
###################################
# By default, if a user requests a stream that is not found, this user
will be
# given the default stream instead. The default stream is per default
the oldest
# stream on the server, but this can be changed with the priority value
in the
# 'modify' command. 
# If you don't want the user to get the default mount, but instead a
# HTTP 404 Stream Not Found, then set this to 0
########################

mount_fallback 0

######################### Server passwords
#####################################
# Unless you've compiled icecast with crypt support,
# i.e with --with-crypt as an argument to the configure script,
# then these are in cleartext. If you _do_ have crypt support, then
# you have to create a crypted version of the password. You can do this
# with the included mkpasswd.c program. Just compile it with
# "gcc -o mkpasswd mkpasswd.c", perhaps with the -lcrypt option.
#########################

http_admin 1

encoder_password xxxxx
admin_password xxxxx
oper_password xxxxx

######################## Directory servers
#####################################
# A directory server is a "meta-server" where you, for free, can list
# your own icecast server. This is a great way of getting more
listeners.
# The touch_freq is how often to "update" the directory server with
information
# from your server. (e.g number of listeners, stream info, etc..)
########################

icydir yp.shoutcast.com
#icydir yp.breakfree.com
#icydir yp.musicseek.net
#icydir yp.van-pelt.com
#icydir yp.radiostation.de
#directory yp.icecast.org
#directory yp.mp3.de
touch_freq 5

############# Server IP/port configuration (IMPORTANT)
#########################
# If no hostname is specified, icecast will listen on all available
interfaces,
# i.e INADDR_ANY. This is probably what you want.
# If you want icecast to _only_ listen on a specified ip, then change
the 
# "hostname" parameter. The "port" parameter is rather self-explanatory.

# As of icecast 1.3, all connections use port 8000. Admins, encoders,
clients, 
# the whole thing. So no more messing with 3 different ports in the
firewall 
# rules.
# The server_name can currently ONLY be specified here, and ONLY when
you start
# the server. Changing it later on will not have the desired effect.
# The server_name specifies the hostname of the server, don't set it to
an ip, 
# and don't even THINK about setting it to a hostname not pointing to
your ip.
# - WARNING - WARNING - WARNING - (important, get it?)
# It is VERY important that this server_name does actually resolv to the
ip you
# are running your server at. If not, BAD THINGS<tm> will happen.
# E.g localhost is definately probably not what you want :)
# Using your ip will probably work.. but it will look nicer with your
hostname.
# The problem is that if you specify something that doesn't resolve to
yourself,
# then virtual host support will get fscked up, and default server
action
# might not work either.
# Also, changing the port here will not affect the server when doing a
'rehash'
# since binding to a port is done only once, when the server is started.
# server is started.
# Users on dialup connections with dynamic ip:s are in trouble here, I
know.
# You will just have to live without the virtual hosts support, cause
there is
# no portable way of getting all the ip:s the process is binding to.
Either
# edit this file before starting icecast and fill in the current ip, or
just
# live with it. Setting the value to "dynamic", will tell the icecast
server
# that there is no reliable hostname for this machine.
#
# you can now use multiple ports.  the default port is the first one
defined.
# define PORT, and PORT+1 for shoutcast compatibility.
#############

# hostname 192.168.1.1

port 8000
#port 8001

# server_name www.whrwfm.org

####################### Directory server options
##############################
# You can now force the directory server to use the server_name value
instead
# of the originating ip. For most people this is unnecessary, since it
is the
# same. But for people behind proxies, this should be very useful.
# Set it to 1 if you want to force use of the server_name variable.
#######################

force_servername 0

######################## Main Server Logfile
##################################
# This is the file where icecast prints all the information about
# connections, warnings, errors, etc...
# You cannot change this in the admin console, but changing it here
# and then rehashing the server will work.
# logfiledebuglevel is the debugging level for all output to the main
logfile.
# consoledebuglevel is the debugging level to the icecast console.
# accessfile is the file where all connects/disconnects goes
# usagefile is a file for periodic bandwidth and usage information goes
########################

logfile icecast.log
accessfile access.log
usagefile usage.log
logfiledebuglevel 0
consoledebuglevel 0

########################## Reverse Lookups
####################################
# Set this to 1 if you want ip:s to be looked up (using reverse lookup)
# or 0 if you just want the ip:s (which is slightly faster)
##########################

reverse_lookups 1

############################ Console mode
#####################################
# Use 0 if you want stdin to become a local admin console with log
tailing
# Use 1 if you want stdin to become a local admin console
# Use 2 if you just want the console to become a log window
# Use 3 if you want the icecast server to be launched in the background
(not available for Win32)
############################

console_mode 3

########################### Client Timeout
####################################
# (How to deal with clients when no encoder is connected)
# A negative value means keep them forever
# 0 (zero) means kick them out instantly
# X > 0 means keep them X seconds
###########################

client_timeout 5

######################### Kicking clients
#####################################
# If set to 1, then clients whose source has disconnected will
# be kicked. If set to 0, they will simply be moved to another
# stream. This only has an effect if client_timeout is <= 0.
#########################

kick_clients 0

###################### Static file directory
##################################
# This enables the http-server file streaming support in icecast.
# If you don't want to go through the trouble of setting up apache
# or roxen or whatever, then you can just specify a directory here,
# and then http://your_server:port/file/file.mp3 will be equivalent
# to /staticdir/file.mp3
# The http server support is of course very limited, don't try to 
# do anything fancy. Also, only .mp3 files will be displayed.
######################

#staticdir c:\windows\desktop
staticdir /usr/local/icecast/static

############################# Templates
######################################
# the icecast server uses templtes to format output for list.cgi and
# various errors.  you can specify the directory that these are read
from
# please use absolute paths if possible
#############################

templatedir /usr/local/icecast/templates

############################# Statistics
######################################
# The icecast server dumps statistics to a file on a regular basis.
# You can specify how often (stats_time), and to what file (stats_log)
# StatsTime (how often to dump stats, in seconds)
# 0 (zero) means to not dump stats
# X > 0 means dump stats every X seconds to the file specified by
stats_log
#############################

logdir /usr/local/icecast/logs
stats_log stats.log
statshtml_log stats.html
stats_time 60

############# Aliases (including virtual host support)
########################
# In icecast servers prior to the 1.3 release, you could run a icecast
# server as a relay for another icecast server, simply acting as a 
# client on the other server and serving the local clients. This was
# of course a neat way of increasing the number of possible listeners
# for your broadcast. You could build a tree-like structure of relays
# and broadcast to 1000 listeners without problem with the originating
# stream on a cable modem or whatever.
# In icecast 1.3.0 and above, we make this procedure much simpler.
# If you want to relay a stream from another server, simply add an 
# alias for that server. Say you want to relay the broadcast originating
# from my machine (laika.linux.tm:8000/laika), on your machine, do this:
# alias laika http://laika.linux.tm:8000/laika
# What happens is that when a listeners connects to your server and
# requests the /laika stream, then your icecast server will connect
# as a client to my machine, and then feed my stream to the listener.
# All subsequent requests for /laika will use the same feed (i.e only
# one connect will be made to my machine). Icecast will automagically
# shut the link from my machine down when no one is listening. I.e
# no bandwidth will be wasted.
# The old functionality (i.e adding a more or less static relay) is
still
# there, but you have to do it from the admin console. Just do
# relay pull http://laika.linux.tm:8000, and that will be accessible as
# http://your_machine:port/laika.linux.tm:8000/ (you can change this
with
# the -m option to relay pull.
# There is also a possibity to do it the other way around, starting at
# the originating server. Just do "relay push <source_id> host:port",
and
# your stream will be relayed to the remote server.
# In theory, this should enable virtual host support, cause you can
# specify an alias like so:
# alias http://virtual.host.com:port/whatever /something
# This will make all requests to virtual.host.com:port/whatever use the
# stream /something. This is not really thorougly tested, but it should
# work if your server_name is correctly set, and the client is sending
# the valid Host: <host:port> http header.
#############

#alias radiofri http://195.7.65.207:6903 

############################ Kick Relays
######################################
# How long to keep aliased sources when no clients are left listening to
it.
############################
kick_relays 10

############################ Transparent proxy
################################
# This is somewhat equivalent to making _all_ request to aliased
sources. So
# instead of adding an alias for all streams in the world, turn on the
# transparent proxy support. Using this on a server that has streams of
it's
# own can be quite tricky, and then, as usual it is _very_ important
that
# the server_name is correct. 
# Most mp3 playing clients have support for a http proxy 
# (afaik x11amp and winamp do, anyway). If listeners set your machine as
this
# proxy, and you turn on transparent_proxy, then when a client requests
# http://whatever.com:port/whatever, then your icecast server will
connect
# to whatever.com and feed the whatever-stream to the client. All
subsequent
# request for this stream will use the same feed, just as if it was an
alias.
# When running icecast with your own broadcasts, then you should turn
this off,
# or anyone can bring your network down with a lot of relaying connects.
# Don't turn this on if you don't have a server_name set
############################
transparent_proxy 0

<p>######################## Access Control Lists
##################################
# Perhaps you don't care who connects to your server, but I guess most
people
# do. Icecast has 2 different ways of keeping people out. The first is
using
# libwrap (tcpd, tcp wrappers, whatever you want to call it). It is a
separate
# library written by Wietse Venema that over the years has become more
or less
# a security standard in Unix. It should compile on every sane and
unsane unix
# platform, and perhaps other platforms as well, I don't know.
# libwrap uses the files hosts.deny and hosts.allow, usually found in
/etc
# or /usr/local/etc. You probably have to be root to edit these files.
# Try the man pages for tcpd and hosts_access for more information.
# There are 4 different icecast control thingies to use in
hosts.deny/allow.
# First just "icecast", which controls _all_ connections, and kick in
before
# anything is written or read on the socket. If a connection is denied
here
# then it's bye bye. If it is allowed then depending on the type of the 
# connection (admin/client/source), the controls "icecast_client", 
# "icecast_admin", "icecast_source" describe who gets in.
# So to deny all clients except those matching *.se, add
# "icecast_client: ALL EXCEPT *.se" to hosts.deny. There are millions of
# variations on how to build a complete defence, and it's quite simple
too.
# libwrap is a very powerful tool, consult the manpages for more
information.
####
# The second way (which is always available) is using icecast's internal
# acl lists. The functionality is the same, but it is not as powerful
when it
# comes to configuration and flexibilty as libwrap.
# You can specify acl rules either here in icecast.conf, or using the
# admin console. The syntax in icecast.conf is:
# allow <all|client|source|admin> <hostmask>
# deny <all|client|source|admin> <hostmask>
# So, using the same rule as above (allowing only clients from *.se)
# deny <client> *
# allow <client> *.se
# When using the internal acl rules, you need to specify a policy.
# This rule kick in when no allow or deny rule affects a connection.
# If you set acl_policy to 0, then connections who are not allowed by
any
# allow rule will be denied, and the other way around if you set it to
1.
#########################

acl_policy 1
#deny all *
#allow all *.ryd.student.liu.se

########################################################################
########

<p><p>*****************LIVEICE.CFG************************
# liveice configuration file
# Use this as a guide to what the options do....

# basic options
SERVER localhost
PORT 8000
PASSWORD xxxxx

<p># Which encoder to use - choose one - you may need to set a suitable
# sampling frequency and birate.
#
#  Recommended Encoders
#
# USE_MP3ENC  use fraunhofer's mp3 encoder: money + CPU = best quality
# USE_LAME3  Use the currenct versions of lame (www.sulaco.org) 
# USE_GOGO Hacked/Optomised Lame - Lower quality, higher speed
# USE_XING_BETA - actually it's illegal to use this....
# USE_L3ENC - Fraunhofer's original encoder. registerd version only.
#
# Recommended for kernel hackers only
#
# USE_XING - uses the XING mp3 encoder - you need a special kernel
module to
# make it work....
# USE_XING_VBR - Implement VBR streams... no popular
#
# Not recommended (low quality ISO source...)
# USE_SCREAMER uses the version of LAME from Isaac Richard's screamer
# USE_AJ_ENCODER Andreas Johannsen's encoder
# USE_BLADE *DOESN at T WORK* Don't even think about it
# USE_OLD_LAME3 lame311  versions 3.01 to 3.11
#
#
# If you're having problems - specify the full path to the encoder

USE_LAME3 /usr/local/bin/lame

#
# You can manually set other command line options using this
# e.g. manually set high quality mode in lame
ENCODER_ARGS -h

# SOUNDCARD is enabled by default - use NO_SOUNDCARD with mixer mode
# if you don't actually have a soundcard in the computer producing the 
# mp3 source 
# NO_SOUNDCARD doesn't work with simple mode.
# *Don't* mess around with the clock on the computer - it'll confuse it
# I'm not looking into a more complicated solution just yet.
#there are no command line equivalents for these
SOUNDCARD
#NO_SOUNDCARD

# lets you specify another device to connect to
SOUND_DEVICE /dev/dsp

#use full duplex mode on soundcard      -f/-h
# most drivers dont' support full duplex -  dont' complain if it breaks
#FULL_DUPLEX 
HALF_DUPLEX

#
#audio format
# Don't be too greedy - any moron asking for 44100Hz, Stereo at 32kbit 
# should be shot
#
SAMPLE_RATE 22050
BITRATE 24000

MONO
#STEREO

# Encoding Quality - this is a general quality feature which covers
various
# switches on the encoder - I've scaled things into the range 0-100 
# reducing the quality reduces the CPU requiremnets
# It relies on me coding command line parameters.....
ENCODING_QUALITY 30

# Variable bitrate Quality - only for USE_XING_VBR
# approximate data rates (tested agains Annie Nightingale's radio show 
# 44100Hz 16 bit, mono.)
# these are per channel estimates - double them for stereo...
# 0  roughly 48Kbit
# 50 roughly 70kbit
#100 roughly 96kbit 
# if you reduce the sampling rate to 22050 then the bitrate is reduced
also...
# e.g. q=0 => 28kbit per channel
#VBR_QUALITY 1

<p># login / connect format
# 
# Icy login == old styl shoutcast == sucky - use only if talking to 
# a stupid (i.e. shoutcast) server

#ICY_LOGIN

#
# x-audiocast - much better idea - use for icecast servers
# specify a mountpoint too.
#
X_AUDIOCAST_LOGIN
MOUNTPOINT live24

#
# Stream metadata
#
# name# name                          -n
NAME Radio Free Binghamton - WHRW 90.5FM - Binghamton University - A
Live simulcast of Binghamton University's 2000-watt FM stereo radio
station - If you hear something cool that you can't hear anywhere else,
we've done our job!  www.whrwfm.org

# genre                        -g
GENRE alternative/progressive

# public flag                  -x
PUBLIC 1

# URL                           -u
URL http://www.whrwfm.org

#password                       -P
PASSWORD xxxxx

#description - only valid in x-audiocast systems
DESCRIPTION Live simulcast of Binghamton University's 2000-watt FM
stereo radio station - If you hear something cool that you can't hear
anywhere else, we've done our job!

#
# LiveIce Modes
#
# No mixer - simple mode uses line-in on soundcard
NO_MIXER

# esd mode - reads from esdmon
#ESDMON_MODE

# Shout mode - load the playlist and run in sequence thourgh it
#SHOUT_MODE

# Mixer mode - complicated mp3 mixer 
#MIXER

#
# some modes need a playlist
#
# PLAYLIST playlist

# if you want to decode mp3 you need a version of mpg123 lying around.
DECODER_COMMAND mpg123

#
# Stream recording
# 
# local file for recording
#SAVE_FILE local_filename.mp3
#
# request the remote server to record the data
#REMOTE_DUMPFILE remote.mp3

#
# Sometimes you may want to set a time limit on operation
#
#DURATION 3600

#
# If you want to send metadata (e.g. titles) to the server - set the
delay here
# the number is in minutes - don't try specifying fractions.
UPDATE_DELAY 2

<p>#
#if you use the mixer you can record and replay events.
#
#MIX_CONTROL_MANUAL
#MIX_CONTROL_AUTO
#MIX_CONTROL_LOGGED
#CONTROL_FILE mix_command

#
#  You can log every track played to a file
#
#TRACK_LOGFILE track.log

# and even specify the format 
#LOGFILE_FORMAT %t %T  %f %F %a %n %b %u

#
# update script can be executed at every track change...
# Not well documented - in fact not documented at all
#UPDATE_SCRIPT

# while this sets the debugging level
# set this to 10 if ytouhave problems and send scott the output ;-)
VERBOSE 0

ENCODER_STREAM_SET 0
MOUNTPOINT live24

ENCODER_STREAM_SET 1
SAMPLE_RATE 32000
BITRATE 48000
MONO
MOUNTPOINT live48

<p>--- >8 ----
List archives:  http://www.xiph.org/archives/
icecast project homepage: http://www.icecast.org/
To unsubscribe from this list, send a message to 'icecast-request at xiph.org'
containing only the word 'unsubscribe' in the body.  No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.



More information about the Icecast mailing list