FS-7514: add write to rtmp transparent wrapper

This commit is contained in:
Anthony Minessale 2015-03-09 20:26:00 -05:00 committed by Michael Jerris
parent c040b0ff0d
commit 41577304ad
1 changed files with 30 additions and 9 deletions

View File

@ -718,6 +718,7 @@ static switch_status_t vlc_file_open(switch_file_handle_t *handle, const char *p
char *ext = NULL;
switch_file_t *fd = NULL;
const char *realpath = NULL;
int is_stream = 0;
context = switch_core_alloc(handle->memory_pool, sizeof(*context));
context->pool = handle->memory_pool;
@ -725,10 +726,22 @@ static switch_status_t vlc_file_open(switch_file_handle_t *handle, const char *p
realpath = path;
if (switch_test_flag(handle, SWITCH_FILE_FLAG_VIDEO) && switch_test_flag(handle, SWITCH_FILE_FLAG_WRITE) &&
(ext = strrchr(path, '.')) && !strcasecmp(ext, ".mp4")) {
if (switch_test_flag(handle, SWITCH_FILE_FLAG_VIDEO) && switch_test_flag(handle, SWITCH_FILE_FLAG_WRITE)) {
if ((ext = strrchr(path, '.')) && !strcasecmp(ext, ".mp4")) {
realpath = path;
path = switch_core_sprintf(context->pool, "#transcode{vcodec=h264,acodec=mp3}:std{access=file,mux=mp4,dst=%s}", path);
} else if (handle->stream_name && !strcasecmp(handle->stream_name, "rtmp")) {
path = switch_core_sprintf(context->pool,
"#transcode{venc=x264{keyint=25},"
"vcodec=h264,"
"scale=1,"
"acodec=mp3,"
"ab=16,"
"channels=2,"
"samplerate=44100}:standard{access=avio,"
"mux=flv,"
"dst=rtmp://%s}", path);
}
}
context->path = switch_core_strdup(context->pool, path);
@ -740,6 +753,10 @@ static switch_status_t vlc_file_open(switch_file_handle_t *handle, const char *p
);
if (switch_stristr("://", context->path)) {
is_stream = 1;
}
if (!switch_test_flag(handle, SWITCH_FILE_FLAG_VIDEO)) {
switch_buffer_create_dynamic(&(context->audio_buffer), VLC_BUFFER_SIZE, VLC_BUFFER_SIZE * 8, 0);
switch_mutex_init(&context->audio_mutex, SWITCH_MUTEX_NESTED, context->pool);
@ -842,7 +859,7 @@ static switch_status_t vlc_file_open(switch_file_handle_t *handle, const char *p
context->pts = 0;
}
if (switch_test_flag(handle, SWITCH_FILE_FLAG_VIDEO)) {
if (!is_stream && switch_test_flag(handle, SWITCH_FILE_FLAG_VIDEO)) {
if (switch_file_open(&fd, realpath, SWITCH_FOPEN_WRITE | SWITCH_FOPEN_CREATE | SWITCH_FOPEN_TRUNCATE,
SWITCH_FPROT_UREAD | SWITCH_FPROT_UWRITE, handle->memory_pool) == SWITCH_STATUS_SUCCESS) {
switch_file_close(fd);
@ -1645,12 +1662,15 @@ SWITCH_STANDARD_APP(capture_video_function)
uint32_t offset = 250;
uint32_t bytes;
const char *tmp;
const char * opts[25] = {
*vlc_args,
switch_core_session_sprintf(session, "--sout=%s", path + 6)
};
const char * opts[25] = { *vlc_args };
int argc = 2;
if (!strncasecmp(path, "vlc://", 6)) {
opts[1] = switch_core_session_sprintf(session, "--sout=%s", path + 6);
} else {
opts[1] = switch_core_session_sprintf(session, "--sout=%s", path);
}
context = switch_core_session_alloc(session, sizeof(vlc_video_context_t));
switch_assert(context);
memset(context, 0, sizeof(vlc_file_context_t));
@ -2446,6 +2466,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_vlc_load)
vlc_file_supported_formats[argc++] = "mp4"; /* maybe add config for this mod to enable or disable these */
vlc_file_supported_formats[argc++] = "mov";
vlc_file_supported_formats[argc++] = "m4v";
vlc_file_supported_formats[argc++] = "rtmp";
file_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_FILE_INTERFACE);
file_interface->interface_name = modname;