set_shortname( N_("Standard"))
set_description( N_("Standard stream output") )
set_capability( "sout stream", 50 )
- add_shortcut( "standard" )
- add_shortcut( "std" )
- add_shortcut( "file" )
- add_shortcut( "http" )
- add_shortcut( "udp" )
+ add_shortcut( "standard", "std", "file", "http", "udp" )
set_category( CAT_SOUT )
set_subcategory( SUBCAT_SOUT_STREAM )
sout_stream_sys_t *p_sys;
char *psz_mux;
- char *psz_access=NULL;
+ char *psz_access;
char *psz_url=NULL;
char *psz_bind;
char *psz_path;
config_ChainParse( p_stream, SOUT_CFG_PREFIX, ppsz_sout_options,
p_stream->p_cfg );
- if( !strcmp( p_stream->psz_name, "http" ) )
+ psz_access = var_GetString( p_stream, SOUT_CFG_PREFIX "access" );
+ if( EMPTY_STR(psz_access) )
{
- psz_access = strdup("http");
- }
- else if (!strcmp (p_stream->psz_name, "udp"))
- {
- psz_access = strdup("udp");
- }
- else if (!strcmp (p_stream->psz_name, "file"))
- {
- psz_access = strdup("file");
- }
-
- var_Get( p_stream, SOUT_CFG_PREFIX "access", &val );
- if( *val.psz_string )
- {
- free( psz_access );
- psz_access = val.psz_string;
- }
- else
- {
- free( val.psz_string );
+ if( !strcmp( p_stream->psz_name, "http" ) )
+ {
+ psz_access = strdup("http");
+ }
+ else if (!strcmp (p_stream->psz_name, "udp"))
+ {
+ psz_access = strdup("udp");
+ }
+ else if (!strcmp (p_stream->psz_name, "file"))
+ {
+ psz_access = strdup("file");
+ }
}
psz_mux = var_GetNonEmptyString( p_stream, SOUT_CFG_PREFIX "mux" );
psz_bind = var_GetNonEmptyString( p_stream, SOUT_CFG_PREFIX "bind" );
psz_path = var_GetNonEmptyString( p_stream, SOUT_CFG_PREFIX "path" );
- if( psz_bind ) psz_url = psz_bind;
- if( psz_url && psz_path )
+ if( psz_bind && psz_path )
{
- if( asprintf( &psz_url,"%s/%s",psz_url,psz_path ) == -1 )
+ if( asprintf( &psz_url, "%s/%s", psz_bind, psz_path ) == -1 )
psz_url = NULL;
- free( psz_path );
}
+ else if( psz_bind )
+ {
+ psz_url = psz_bind;
+ psz_bind = NULL;
+ }
+ free( psz_path );
var_Get( p_stream, SOUT_CFG_PREFIX "dst", &val );
- if( *val.psz_string )
+ if( *val.psz_string )
{
free( psz_url);
psz_url = val.psz_string;
p_sys = p_stream->p_sys = malloc( sizeof( sout_stream_sys_t) );
if( !p_sys )
{
+ free( psz_access );
+ free( psz_mux );
+ free( psz_bind );
free( psz_url );
return VLC_ENOMEM;
}
{ "avi", "avi" },
{ "ogg", "ogg" },
{ "ogm", "ogg" },
+ { "ogv", "ogg" },
+ { "flac","raw" },
+ { "mp3", "raw" },
{ "mp4", "mp4" },
{ "mov", "mov" },
{ "moov","mov" },
{ "wav", "wav" },
{ "flv", "ffmpeg{mux=flv}" },
{ "mkv", "ffmpeg{mux=matroska}"},
+ { "webm", "ffmpeg{mux=webm}"},
{ "", "" }
};
const char *psz_ext = strrchr( psz_url, '.' ) + 1;
- int i;
msg_Dbg( p_this, "extension is %s", psz_ext );
- for( i = 0; exttomux[i].ext[0]; i++ )
+ for( int i = 0; exttomux[i].ext[0]; i++ )
{
if( !strcasecmp( psz_ext, exttomux[i].ext ) )
{
else
{
msg_Err( p_stream, "no access _and_ no muxer (fatal error)" );
+ free( psz_bind );
free( psz_url );
free( p_sys );
return VLC_EGENERIC;
else
{
msg_Err( p_stream, "no mux specified or found by extension" );
+ free( psz_access );
+ free( psz_bind );
+ free( psz_url );
free( p_sys );
return VLC_EGENERIC;
}
psz_access, psz_mux, psz_url );
free( psz_access );
free( psz_mux );
+ free( psz_bind );
free( psz_url );
free( p_sys );
return VLC_EGENERIC;
sout_AccessOutDelete( p_access );
free( psz_access );
free( psz_mux );
+ free( psz_bind );
free( psz_url );
free( p_sys );
return VLC_EGENERIC;
if ( vlc_getaddrinfo ( VLC_OBJECT(p_stream), dhost, dport, &hints, &res) == 0)
{
memcpy (&dst, res->ai_addr, dstlen = res->ai_addrlen);
- vlc_freeaddrinfo (res);
+ freeaddrinfo (res);
}
if (vlc_getaddrinfo ( VLC_OBJECT(p_stream), shost, sport, &hints, &res) == 0)
{
memcpy (&src, res->ai_addr, srclen = res->ai_addrlen);
- vlc_freeaddrinfo (res);
+ freeaddrinfo (res);
}
char *head = vlc_sdp_Start (VLC_OBJECT (p_stream), SOUT_CFG_PREFIX,
free( psz_access );
free( psz_mux );
+ free( psz_bind );
free( psz_url );
if( !sout_AccessOutCanControlPace( p_access ) )