[Freeswitch-dev] adding support for incoming streaming audio
Mark D. Anderson
mda at discerning.com
Thu Mar 8 18:04:50 EST 2007
I'd like to have a streaming audio source (not just playing a local file)
for users while they are parked or waiting for a conference to start.
In digging into FS it seems there are several ways this
might be approached. Of course this is based on only a superficial
understanding of the FS internals.
But I've come up with 6 (count them, 6) possibilities:
1) hack the "playback" application.
Right now, the lookup of driver in switch-core.c is by file suffix
(with no override in xml conf).
Currently the only real format module is mod_sndfile.
(The string constants for metadata like SWITCH_AUDIO_COL_STR_TITLE
are conveniently set to be identical to the enum used by libsndfile.)
It could be done by hacking mod_sndfile, or instead by
making a new format driver, say "mod_url".
libsndfile does not support mp3 (and won't), and is oriented around local files.
So a mod_url driver would be better, with support for some suffixes
like .pipe or .m3u or .mp3. It would need to do content-type sniffing
in some cases.
One issue is that it seems that mod_playback is blocking til completion.
There is a timer in switch_ivr_play_file; it would be necessary to invert
control there to allow the processing to proceed without the file ending.
Pros: most useful; wherever a local file is used, a remote could be used instead.
Cons: non-trivial amount of hacking.
2) Use an external process to convert streaming audio into sip.
For example, using mjua or pjsua as sip clients, along with some
command-line streaming audio client such as streamripper.
Pros: no change to FS required
Cons: lots of moving parts, and the SIP gateway utility will probably require some hacking.
3) implement a "mod_shout" as an endpoint for shoutcast/icecast protocol
Pros: fits in well with FS architecture
Cons: requires understanding FS internals concerning threading, buffering, etc.
4) implement a "mod_rtsp" as an endpoint.
This would mean I'd have to be satisfied with supporting only
rtsp streaming audio, not shoutcast/icecast streaming audio.
Pros: In theory there wouldn't be much to do, since there is already RTSP
support in the FS stack.
Cons: requires underestanding FS internals *and* RTSP streaming audio
5) hack mod_conference to do stream-in just like record-out, as a thread.
[I'm not sure why mod_conference does it that way, rather than at the core
switch level (which *also* has session recording ability) -- isn't the point
of a softswitch framework that it can allow
for arbitrary combinations of modules? Shouldn't there be a way to
supply an arbitrary channel as a member?]
Pros: relatively easy to do by blindly copying the session record case.
Cons: specific to conferencing, and makes mod_conference even bulkier.
6) implement mod_park with specific support for streaming audio
[right now mod_park is just an empty stub.]
Pros: standalone so easier to implement
Cons: limits its usefulness to just that "application"
More information about the Freeswitch-dev
mailing list