[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