[Icecast-dev] grabbing raw PCM from ices2
pmy at virginia.edu
Sun May 31 12:42:41 PDT 2009
I'm running Ices 2.0.1 in conjunction with Icecast 2.3.1 (on gentoo
linux) to generate a live ogg stream for radio station WTJU
(http://wtju.net/). In addition to encoding and streaming live audio,
we'd like to record our broadcasts to disk for archival. I know that
ices has a "savefile" feature, but that isn't so useful, because the
file being written simply grows without bound for as long as ices
continues to run. That might be ok if the file could be periodically
truncated to its beginning (rather than to its end), but I don't know
any way of doing that on an open file. Also, the savefile feature writes
the encoded data, but we'd prefer to have access to the raw PCM for
later encoding to FLAC. (Ices is getting its data from an ALSA device;
maybe there's some way of tapping ALSA directly? Anyway...)
What would be useful for us is some sort of audio FIFO by which other
processes could tap ices' incoming PCM stream, without fear of filling
the disk partition with a single ever-growing file. I have implemented
such a FIFO as a simple circular buffer, where each "cell" in the buffer
is a file of fixed maximum size. As each file is filled with PCM data to
its maximum, ices moves on to the next, and round and round it goes.
Synchronization with reader processes is achieved with file locking.
Seems to work. Shared memory might be another way to do this.
If anyone is interested, I'm willing to supply a set of diffs.
ITC Unix Systems Support
University of Virginia
More information about the Icecast-dev