[Freeswitch-svn] [commit] r5302 - in freeswitch/trunk: conf src src/include src/mod/formats/mod_shout
Freeswitch SVN
anthm at freeswitch.org
Sat Jun 9 19:02:38 EDT 2007
Author: anthm
Date: Sat Jun 9 19:02:38 2007
New Revision: 5302
Modified:
freeswitch/trunk/conf/default_context.xml
freeswitch/trunk/src/include/switch_module_interfaces.h
freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c
freeswitch/trunk/src/switch_ivr_play_say.c
Log:
add adjustable buffering to mod_shout (see example in config file)
Modified: freeswitch/trunk/conf/default_context.xml
==============================================================================
--- freeswitch/trunk/conf/default_context.xml (original)
+++ freeswitch/trunk/conf/default_context.xml Sat Jun 9 19:02:38 2007
@@ -19,6 +19,16 @@
</condition>
</extension>
+ <extension name="9192">
+ <condition field="destination_number" expression="^9192$">
+ <!-- Maintain Buffer of 128k of audio (default is 64k) -->
+ <action application="set" data="stream_prebuffer=131072"/>
+ <!-- Play a stream -->
+ <action application="playback" data="shout://mp3.ihets.org/wfyihd132"/>
+ </condition>
+ </extension>
+
+
<!-- Example extension for require auth per-call. -->
<extension name="9191">
<!-- Match the destination digits of 9191 -->
Modified: freeswitch/trunk/src/include/switch_module_interfaces.h
==============================================================================
--- freeswitch/trunk/src/include/switch_module_interfaces.h (original)
+++ freeswitch/trunk/src/include/switch_module_interfaces.h Sat Jun 9 19:02:38 2007
@@ -221,6 +221,8 @@
int speed;
/*! the handle's memory pool */
switch_memory_pool_t *memory_pool;
+ /*! pre-buffer x bytes for streams */
+ uint32_t prebuf;
/*! private data for the format module to store handle specific info */
void *private_info;
char *handler;
Modified: freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c
==============================================================================
--- freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c (original)
+++ freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c Sat Jun 9 19:02:38 2007
@@ -65,6 +65,7 @@
int samplerate;
uint8_t thread_running;
uint8_t shout_init;
+ uint32_t prebuf;
};
typedef struct shout_context shout_context_t;
@@ -336,6 +337,10 @@
error_check();
+ if (context->prebuf) {
+ buf_size = context->prebuf;
+ }
+
/* make sure we aren't over zealous by slowing down the stream when the buffer is too full */
for (;;) {
error_check();
@@ -350,10 +355,11 @@
switch_mutex_unlock(context->audio_mutex);
if (used < buf_size) {
+ //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Buffered %u/%u!\n", used, buf_size);
break;
}
- switch_yield(1000000);
+ switch_yield(500000);
}
error_check();
@@ -556,6 +562,7 @@
InitMP3(&context->mp, OUTSCALE, context->samplerate);
if (handle->handler) {
context->stream_url = switch_core_sprintf(context->memory_pool, "http://%s", path);
+ context->prebuf = handle->prebuf;
launch_read_stream_thread(context);
} else {
if (switch_file_open(&context->fd, path, SWITCH_FOPEN_READ, SWITCH_FPROT_UREAD | SWITCH_FPROT_UWRITE, handle->memory_pool) !=
Modified: freeswitch/trunk/src/switch_ivr_play_say.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_play_say.c (original)
+++ freeswitch/trunk/src/switch_ivr_play_say.c Sat Jun 9 19:02:38 2007
@@ -505,6 +505,7 @@
char *ext;
char *prefix;
char *timer_name;
+ char *prebuf;
channel = switch_core_session_get_channel(session);
assert(channel != NULL);
@@ -512,6 +513,7 @@
prefix = switch_channel_get_variable(channel, "sound_prefix");
timer_name = switch_channel_get_variable(channel, "timer_name");
+
if (!file) {
return SWITCH_STATUS_FALSE;
}
@@ -552,6 +554,15 @@
fh->samples = 0;
}
+ if ((prebuf = switch_channel_get_variable(channel, "stream_prebuffer"))) {
+ int maybe = atoi(prebuf);
+ if (maybe > 0) {
+ fh->prebuf = maybe;
+ }
+ }
+
+
+
if (switch_core_file_open(fh,
file,
read_codec->implementation->number_of_channels,
More information about the Freeswitch-svn
mailing list