mod_shout
0. About
This module allows one to play local and remote MP3 files at any sample rate.
This module also needs to be built (see 1. Build mod_shout
section below) and loaded (in modules.conf.xml
, see Modules) for other facilities (such as mod_dptools: playback, mod_conference, etc.) to be able to handle MP3 files.
1. Build mod_shout
1.1 Install dependencies
libvorbis
and development librarieslibogg
and development libraries
On Debian:
apt-get install libvorbis0a libogg0 libogg-dev libvorbis-dev
On CentOS 5.x:
yum install libvorbis libvorbis-devel libogg libogg-devel
On CentOS 6.x:
yum install libshout-devel lame-devel libmpg123-devel
1.2 Enable module in build
Remove hash tag (#) in build/modules.conf.in source directory:
formats/mod_sndfile
formats/mod_shout <--- NEW
#languages/mod_perl
1.3 Configure and make
./configure && make install
1.4 Debugging
If mod_shout
is not working, try the following:
TODO These instructions may be outdated. For example, libshout
is only included under the win32 directory.
1.4.1 Configure libshout
directly
Rather than relying on the overall configure script to invoke this, go to the src/lib/libshout
directory and run configure directly. If you get an error like:
checking for libogg... not found
checking for VORBIS... checking for libvorbis... not found
configure: error: requisite Ogg Vorbis library not found
1.4.2 Delete lib directories
Also, try deleting both the libs/libshout-2.2.2 and libs/lame-3.97 directory and rerunning make.
2. Load mod_shout
2.1 Enable module in runtime
Edit conf/autoload_configs/modules.conf.xml
:
<load module="mod_native_file"/>
<!--For icecast/mp3 streams/files-->
<load module="mod_shout"/> <------- NEW
conf/
refers to the main FreeSWITCH configuration directory. To find its exact location on your system:
$ fs_cli -x 'eval $${conf_dir}'
/etc/freeswitch_
2.2 Load the Module
From the CLI, run load mod_shout
3. Capabilities
2.1 Play
Fast Forward / Rewind bugs
Certain things, such as fast-forward and rewind, might not work, especially if the MP3 is "badly encoded".
If these features are needed, one thing to try is to decode the MP3 to a WAV, and re-encode it back to an MP3, in order to cleanse it of errors. If this still does not work, consider converting it to a WAV, and using it in that format.
See Playing/Recording External Media for instructions on how to play an MP3 file into a conference call.
2.1.1 Local MP3 Files
Can play local MP3 files at any sample rate (8khz, 16khz, 44.5khz) in mono/stereo. Re-sampling happens on the fly.
Re-sampling can be very CPU-expensive.
2.1.2 Remote MP3 Files
session.streamFile("shout://some.server.com/file.mp3", "")
2.1.3 Icecast Streams
Can play icecast streams.
TODO Add example.
2.1.4 Shoutcast streams
<extension name="shout">
<condition field="destination_number" expression="^750$">
<action application="answer"/>
<action application="playback" data="shout://scfire-dll-aa02.stream.aol.com:80/stream/1074"/>
</condition>
</extension>
<extension name="moh_for_bridges">
<condition field="destination_number" expression="^(15145555555)$">
<action application="set" data="hold_music=shout://scfire-dll-aa01.stream.aol.com:80/stream/1018"/>
<action application="bridge" data="sofia/default/$1@1.2.3.4"/>
</condition>
</extension>
2.1.4.1 Using shoutcast stream for music-on-hold (MOH)
To use shoutcast for MOH, do the following:
If you just use hold_music=shout://<url>
, you will have issues after the first time you place the call on hold.
- Create a folder that contains a single file called
something.loc
with the URL of the shoutcast stream
(e.g.,shout://theserver:8111/the_stream.mp3
) - Edit
conf/autoload_configs/local_stream.conf.xml
to contain a stream that points to the folder you just created.
<directory name="moh/shout" path="$${base_dir}/sounds/music/shout">
<param name="rate" value="8000"/>
<param name="shuffle" value="true"/>
<param name="channels" value="1"/>
<param name="interval" value="10"/>
<param name="timer-name" value="soft"/>
</directory>
- Set your hold_music variable to point to the local stream that you just created.
That is, from the above example, it will be
local_stream://moh/shout
in this case. - Tweak the volume parameters if the hold music is too loud via
conf/autoload_configs/shout.conf
<configuration name="shout.conf" description="mod shout config">
<settings>
<!-- Don't change these unless you are insane -->
<!--<param name="decoder" value="i586"/>-->
<param name="volume" value="0.7"/>
<!--<param name="outscale" value="8192"/>-->
</settings>
</configuration>
2.1.5 Using mod_shout for TTS with online services
Using mod_shout
for TTS is not recommend in a live environment due to lack of caching.
See Via mod_shout using online TTS section in TTS for examples.
2.2 Record
Can record to
- local MP3 files
- icecast and/or shoutcast streams.
2.2.1 Recording to Icecast server
To record to Icecast server from your conference or your call:
<action application="record" data="shout://source:pass@10.10.10.10:8000/stream.mp3"/>
For conference, I do it from console:
conference 3001-10.10.10.10 record shout://source:pass@10.10.10.10:8000/stream.mp3