diff --git a/src/include/switch_module_interfaces.h b/src/include/switch_module_interfaces.h index e0a5c2019e..7ca027d913 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 b944625b14..4b928019ac 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 3d3bd8282a..141fcdc394 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.c index 46ee5390b9..aff9442d78 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) {