mirror of https://github.com/asterisk/asterisk
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4675 65c4cc65-6c06-0410-ace0-fbb531ad65f31.2-netsec
parent
7568d9a4ef
commit
5ad345f6b0
@ -0,0 +1,37 @@
|
||||
rawplayer is a simple C applet to stream raw music files in place of mpg123
|
||||
|
||||
INSTALL
|
||||
|
||||
compile the .c file and install:
|
||||
gcc -O2 rawplayer.c -o /usr/bin/rawplayer
|
||||
|
||||
|
||||
|
||||
Converting MP3 to RAW
|
||||
|
||||
Make track01.mp3 into track01.raw with sox (if compiled with mp3 support).
|
||||
sox -c 1 track01.mp3 -t raw -r 8000 -c 1 -s -w track01.raw
|
||||
|
||||
Otherwise, use whatever app to turn track01.mp3 into track01.wav then use sox on the wav.
|
||||
sox -c 1 track01.wav -t raw -r 8000 -c 1 -s -w track01.raw
|
||||
|
||||
|
||||
Once you have the raw files put them in any dir on your system (eg /var/lib/asterisk/holdmusic_raw).
|
||||
and set up a class in musiconhold.conf like so:
|
||||
|
||||
[classes]
|
||||
default => custom:/var/lib/asterisk/holdmusic_raw,/usr/bin/rawplayer
|
||||
|
||||
|
||||
This is the most efficient way to implement moh because no cpu usage is required to
|
||||
explode the very compressed mp3 data then downsample the music to the 8khz mono on the fly
|
||||
instead the data is already stored on the disk in the format that asterisk needs it to be
|
||||
and the player does little more than pick up frames from the file and hand them to right
|
||||
to the asterisk pipe where the audio is shared into all the channels who require it.
|
||||
|
||||
|
||||
If you have cpu to spare and want a simple mp3 solution consider the format_mp3 from
|
||||
asterisk-addons and the files based moh.
|
||||
|
||||
|
||||
|
@ -0,0 +1,38 @@
|
||||
/*
|
||||
Rawplayer.c simple raw file stdout player
|
||||
(c) Anthony C Minessale II <anthmct@yahoo.com>
|
||||
*/
|
||||
|
||||
#define BUFLEN 320
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
static int deliver_file(char *path, int fdout) {
|
||||
int fd = 0, bytes = 0;
|
||||
short buf[BUFLEN];
|
||||
|
||||
if ((fd = open(path,O_RDONLY))) {
|
||||
while ((bytes=read(fd, buf, BUFLEN))) {
|
||||
write(fdout, buf, bytes);
|
||||
}
|
||||
if(fd)
|
||||
close(fd);
|
||||
} else
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int x = 0, fdout = 0;
|
||||
fdout = fileno(stdout);
|
||||
for (;;)
|
||||
for (x = 1; x < argc ; x++) {
|
||||
if(deliver_file(argv[x], fdout))
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in new issue