Unbuffered music on hold
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2811 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
ec8a80b070
commit
4f51ef7ab7
|
@ -5,3 +5,5 @@
|
||||||
;default => quietmp3:/var/lib/asterisk/mohmp3
|
;default => quietmp3:/var/lib/asterisk/mohmp3
|
||||||
;loud => mp3:/var/lib/asterisk/mohmp3
|
;loud => mp3:/var/lib/asterisk/mohmp3
|
||||||
;random => quietmp3:/var/lib/asterisk/mohmp3,-z
|
;random => quietmp3:/var/lib/asterisk/mohmp3,-z
|
||||||
|
;unbuffered => mp3nb:/var/lib/asterisk/mohmp3
|
||||||
|
;quietunbuf => quietmp3nb:/var/lib/asterisk/mohmp3
|
||||||
|
|
|
@ -75,6 +75,7 @@ struct mohclass {
|
||||||
int destroyme;
|
int destroyme;
|
||||||
int pid; /* PID of mpg123 */
|
int pid; /* PID of mpg123 */
|
||||||
int quiet;
|
int quiet;
|
||||||
|
int single;
|
||||||
pthread_t thread;
|
pthread_t thread;
|
||||||
struct mohdata *members;
|
struct mohdata *members;
|
||||||
/* Source of audio */
|
/* Source of audio */
|
||||||
|
@ -107,7 +108,7 @@ static int spawn_mp3(struct mohclass *class)
|
||||||
char *argv[MAX_MP3S + 50];
|
char *argv[MAX_MP3S + 50];
|
||||||
char xargs[256];
|
char xargs[256];
|
||||||
char *argptr;
|
char *argptr;
|
||||||
int argc;
|
int argc = 0;
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent *de;
|
struct dirent *de;
|
||||||
dir = opendir(class->dir);
|
dir = opendir(class->dir);
|
||||||
|
@ -115,16 +116,20 @@ static int spawn_mp3(struct mohclass *class)
|
||||||
ast_log(LOG_WARNING, "%s is not a valid directory\n", class->dir);
|
ast_log(LOG_WARNING, "%s is not a valid directory\n", class->dir);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
argv[0] = "mpg123";
|
argv[argc++] = "mpg123";
|
||||||
argv[1] = "-q";
|
argv[argc++] = "-q";
|
||||||
argv[2] = "-s";
|
argv[argc++] = "-s";
|
||||||
argv[3] = "--mono";
|
argv[argc++] = "--mono";
|
||||||
argv[4] = "-r";
|
argv[argc++] = "-r";
|
||||||
argv[5] = "8000";
|
argv[argc++] = "8000";
|
||||||
argv[6] = "-b";
|
|
||||||
argv[7] = "2048";
|
if (!class->single) {
|
||||||
argv[8] = "-f";
|
argv[argc++] = "-b";
|
||||||
argc = 9;
|
argv[argc++] = "2048";
|
||||||
|
}
|
||||||
|
|
||||||
|
argv[argc++] = "-f";
|
||||||
|
|
||||||
if (class->quiet) {
|
if (class->quiet) {
|
||||||
argv[argc++] = "4096";
|
argv[argc++] = "4096";
|
||||||
} else
|
} else
|
||||||
|
@ -498,8 +503,10 @@ static int moh_register(char *classname, char *mode, char *param, char *miscargs
|
||||||
strncpy(moh->class, classname, sizeof(moh->class) - 1);
|
strncpy(moh->class, classname, sizeof(moh->class) - 1);
|
||||||
if (miscargs)
|
if (miscargs)
|
||||||
strncpy(moh->miscargs, miscargs, sizeof(moh->miscargs) - 1);
|
strncpy(moh->miscargs, miscargs, sizeof(moh->miscargs) - 1);
|
||||||
if (!strcasecmp(mode, "mp3") || !strcasecmp(mode, "quietmp3") || !strcasecmp(mode, "httpmp3")) {
|
if (!strcasecmp(mode, "mp3") || !strcasecmp(mode, "mp3nb") || !strcasecmp(mode, "quietmp3") || !strcasecmp(mode, "quietmp3nb") || !strcasecmp(mode, "httpmp3")) {
|
||||||
if (!strcasecmp(mode, "quietmp3"))
|
if (!strcasecmp(mode, "mp3nb") || !strcasecmp(mode, "quietmp3nb"))
|
||||||
|
moh->single = 1;
|
||||||
|
if (!strcasecmp(mode, "quietmp3") || !strcasecmp(mode, "quietmp3nb"))
|
||||||
moh->quiet = 1;
|
moh->quiet = 1;
|
||||||
strncpy(moh->dir, param, sizeof(moh->dir) - 1);
|
strncpy(moh->dir, param, sizeof(moh->dir) - 1);
|
||||||
moh->srcfd = -1;
|
moh->srcfd = -1;
|
||||||
|
@ -596,7 +603,7 @@ static void ast_moh_destroy(void)
|
||||||
ast_log(LOG_DEBUG, "mpg123 pid %d and child died after %d bytes read\n", moh->pid, tbytes);
|
ast_log(LOG_DEBUG, "mpg123 pid %d and child died after %d bytes read\n", moh->pid, tbytes);
|
||||||
close(moh->srcfd);
|
close(moh->srcfd);
|
||||||
moh->pid = 0;
|
moh->pid = 0;
|
||||||
}
|
}
|
||||||
moh = moh->next;
|
moh = moh->next;
|
||||||
}
|
}
|
||||||
ast_mutex_unlock(&moh_lock);
|
ast_mutex_unlock(&moh_lock);
|
||||||
|
|
Loading…
Reference in New Issue