can you drop a core file and see where its stuck?On Jun 23, 2017, at 6:57 PM, Guillermo Ruiz Camauer <grcamauer@gmail.com> wrote:I have created a small utility program based on fs_encode which will take ALL files in a directory and convert them from .WAV to .G729 and .PCMU formats. The utility is called wavBatchEncode and takes just a directory path as an argument.This program was working very well until I upgraded FreeSwitch. Now the program seems to hang when it tries to write out the first converted files. I have to KILL the program from another terminal. It leaves 2 0 byte files with .PCMU and .G729 extension.I have run through a GIT bisect to find where things broke. The last working version is Version 1.6.16 git ae1cdce 2017-04-11.The first broken version is38621e47bad3b63f03a0a27f6ca9ed 92f6969032. I then used GIT DIFF to see if I could see what had happened. There are very few modifications between these two commits:root@fs3:/usr/src/freeswitch.git# git diff ae1cdce 38621e47bad3b63f03a0a27f6ca9ed 92f6969032 diff --git a/src/include/switch_module_interfaces.h b/src/include/switch_module_ interfaces.h index e0a5c20..7ca027d 100644--- a/src/include/switch_module_interfaces.h +++ b/src/include/switch_module_interfaces.h @@ -329,6 +329,11 @@ typedef struct switch_mm_s {switch_video_profile_t vprofile;switch_video_encode_speed_t vencspd;uint8_t try_hardware_encoder;+ int scale_w;+ int scale_h;+ switch_img_fmt_t fmt;+ char *auth_username;+ char *auth_password;} switch_mm_t;/*! an abstract representation of a file handle (some parameters based on compat with libsndfile) */diff --git a/src/mod/applications/mod_av/avformat.c b/src/mod/applications/mod_av/ avformat.c index b944625..4b92801 100644--- a/src/mod/applications/mod_av/avformat.c +++ b/src/mod/applications/mod_av/avformat.c @@ -906,7 +906,7 @@ SWITCH_STANDARD_APP(record_av_function) char codec_str[256];const AVCodecDescriptor *desc;- if (!strncmp(data, "rtmp://", 7)) {+ if (!strncmp(data, "rtmp://", 7) || !strncmp(data, "rtsp://", 7)) {fmt->video_codec = AV_CODEC_ID_H264;fmt->audio_codec = AV_CODEC_ID_AAC;}@@ -1694,9 +1694,20 @@ static switch_status_t av_file_open(switch_file_handle_t *handle, const char *pa return SWITCH_STATUS_GENERR;} else if (handle->stream_name && (!strcasecmp(handle->stream_name, "rtmp") || !strcasecmp(handle->stream_ name, "youtube"))) { format = "flv";- switch_snprintf(file, sizeof(file), "rtmp://%s", path);++ // meh really silly format for the user / pass libav.....+ if (handle->mm.auth_username && handle->mm.auth_password) {+ switch_snprintf(file, sizeof(file), "rtmp://%s pubUser=%s pubPasswd=%s flashver=FMLE/3.0", path, handle->mm.auth_username, handle->mm.auth_password);+ } else {+ switch_snprintf(file, sizeof(file), "rtmp://%s", path);+ }++ } else if (handle->stream_name && !strcasecmp(handle->stream_name, "rtsp")) { + format = "rtsp";+ switch_snprintf(file, sizeof(file), "rtsp://%s", path);}+ext++;if ((context = (av_file_context_t *)switch_core_alloc(handle->memory_pool, sizeof(av_file_context_t))) == 0) { @@ -1783,7 +1794,7 @@ static switch_status_t av_file_open(switch_file_handle_t *handle, const char *pa if (fmt->video_codec != AV_CODEC_ID_NONE) {const AVCodecDescriptor *desc;- if ((handle->stream_name && (!strcasecmp(handle->stream_name, "rtmp") || !strcasecmp(handle->stream_ name, "youtube")))) { + if ((handle->stream_name && (!strcasecmp(handle->stream_name, "rtmp") || !strcasecmp(handle->stream_ name, "rtsp") || !strcasecmp(handle->stream_ name, "youtube")))) { if (fmt->video_codec != AV_CODEC_ID_H264 ) {fmt->video_codec = AV_CODEC_ID_H264; // force H264@@ -2525,6 +2536,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_avformat_load) supported_formats[i++] = "av";supported_formats[i++] = "rtmp";+ supported_formats[i++] = "rtsp";supported_formats[i++] = "mp4";supported_formats[i++] = "m4a";supported_formats[i++] = "mov";diff --git a/src/mod/applications/mod_av/mod_av.c b/src/mod/applications/mod_av/ mod_av.c index 3d3bd82..141fcdc 100644--- a/src/mod/applications/mod_av/mod_av.c +++ b/src/mod/applications/mod_av/mod_av.c @@ -93,7 +93,7 @@ int mod_av_lockmgr_cb(void **m, enum AVLockOp op)static void log_callback(void *ptr, int level, const char *fmt, va_list vl){switch_log_level_t switch_level = SWITCH_LOG_DEBUG;-+ return;/* naggy messages */if (level == AV_LOG_DEBUG || level == AV_LOG_WARNING) return;diff --git a/src/switch_core_file.c b/src/switch_core_file.cindex 46ee539..aff9442 100644--- a/src/switch_core_file.c+++ b/src/switch_core_file.c@@ -177,6 +177,14 @@ SWITCH_DECLARE(switch_status_t) switch_core_perform_file_open( const char *file, fh->mm.try_hardware_encoder = switch_true(val);}+ if ((val = switch_event_get_header(fh->params, "auth_username"))) { + fh->mm.auth_username = switch_core_strdup(fh->memory_pool, val); + }++ if ((val = switch_event_get_header(fh->params, "auth_password"))) { + fh->mm.auth_password = switch_core_strdup(fh->memory_pool, val); + }+if ((val = switch_event_get_header(fh->params, "fps"))) { float ftmp = atof(val);if (ftmp > 0.0f) {(END)I believe that it is the changes in switch_core_file.c that break my utility program, but I can't be sure. Just o add some detail, I have a Digium TCE400 card in my system which handles the G729 conversion.I have no idea of what those auth_username and auth_password parameters are, but that seems to break things for me. Any idea of what I can do to get things working again?I have created a PasteBin with the code of my fs_encode derived utility: https://pastebin.freeswitch.org/view/a3d64c69 It is pretty short.
____________________________________________________________ _____________
Professional FreeSWITCH Consulting Services:
consulting@freeswitch.org
http://www.freeswitchsolutions.com
Official FreeSWITCH Sites
http://www.freeswitch.org
http://confluence.freeswitch.org
http://www.cluecon.com
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch- users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/ options/freeswitch-users
http://www.freeswitch.org