Commit a2dd9177 authored by Jean-Paul Saman's avatar Jean-Paul Saman

Add Icecast support to profiles.

parent 7b3eb71e
...@@ -121,14 +121,20 @@ enum { I_VB, I_AB, I_CHANNELS, F_SCALE, B_SOVERLAY, PSZ_VC, PSZ_AC, PSZ_SC, ...@@ -121,14 +121,20 @@ enum { I_VB, I_AB, I_CHANNELS, F_SCALE, B_SOVERLAY, PSZ_VC, PSZ_AC, PSZ_SC,
PSZ_VE, PSZ_AE }; PSZ_VE, PSZ_AE };
struct sout_transcode_t struct sout_transcode_t
{ {
int i_vb, i_ab, i_channels; int32_t i_vb;
int32_t i_ab;
int32_t i_channels;
float f_scale; float f_scale;
vlc_bool_t b_soverlay; vlc_bool_t b_soverlay;
char *psz_vcodec; char *psz_vcodec;
char *psz_acodec, *psz_scodec, *psz_venc, *psz_aenc; char *psz_acodec;
char *psz_scodec;
char *psz_venc;
char *psz_aenc;
char *psz_additional; char *psz_additional;
int i_params; sout_param_t **pp_params; int32_t i_params;
sout_param_t **pp_params;
}; };
void streaming_TranscodeParametersApply( sout_transcode_t *p_module ); void streaming_TranscodeParametersApply( sout_transcode_t *p_module );
...@@ -136,9 +142,13 @@ void streaming_TranscodeParametersApply( sout_transcode_t *p_module ); ...@@ -136,9 +142,13 @@ void streaming_TranscodeParametersApply( sout_transcode_t *p_module );
enum { PSZ_MUX, PSZ_ACCESS, PSZ_URL, PSZ_NAME, PSZ_GROUP }; enum { PSZ_MUX, PSZ_ACCESS, PSZ_URL, PSZ_NAME, PSZ_GROUP };
struct sout_std_t struct sout_std_t
{ {
char *psz_mux, *psz_access; char *psz_mux;
char *psz_url, *psz_name, *psz_group; char *psz_access;
int i_params; sout_param_t **pp_params; char *psz_url;
char *psz_name;
char *psz_group;
int i_params;
sout_param_t **pp_params;
}; };
void streaming_StdParametersApply( sout_std_t *p_module ); void streaming_StdParametersApply( sout_std_t *p_module );
...@@ -150,7 +160,8 @@ struct sout_display_t ...@@ -150,7 +160,8 @@ struct sout_display_t
/* Duplicate */ /* Duplicate */
struct sout_duplicate_t struct sout_duplicate_t
{ {
int i_children, i_conditions; int i_children;
int i_conditions;
sout_chain_t **pp_children; sout_chain_t **pp_children;
char **ppsz_conditions; char **ppsz_conditions;
}; };
...@@ -201,27 +212,63 @@ struct streaming_profile_t ...@@ -201,27 +212,63 @@ struct streaming_profile_t
sout_chain_t *p_chain; sout_chain_t *p_chain;
}; };
/** struct for holding account information needed to access the services */
struct streaming_account_t
{
char *psz_username; /*< username of account */
char *psz_password; /*< password of account */
};
/**************** GUI interaction *****************/ /**************** GUI interaction *****************/
/** struct to hold user interface information */
struct sout_gui_descr_t struct sout_gui_descr_t
{ {
/* Access */ /* Access types */
vlc_bool_t b_local, b_file, b_http, b_mms, b_rtp, b_udp, b_dump; vlc_bool_t b_local; /*< local access module */
char *psz_file, *psz_http, *psz_mms, *psz_rtp, *psz_udp; vlc_bool_t b_file; /*< file access module */
int i_http, i_mms, i_rtp, i_udp; vlc_bool_t b_http; /*< http access module */
vlc_bool_t b_mms; /*< mms access module */
vlc_bool_t b_rtp; /*< rtp access module */
vlc_bool_t b_udp; /*< udp access module */
vlc_bool_t b_dump; /*< dump access module */
vlc_bool_t b_icecast; /*< icecast access module */
char *psz_file; /*< filename */
char *psz_http; /*< HTTP servername or ipaddress */
char *psz_mms; /*< MMS servername or ipaddress */
char *psz_rtp; /*< RTP servername or ipaddress */
char *psz_udp; /*< UDP servername or ipaddress */
char *psz_icecast; /*< Icecast servername or ipaddress*/
int32_t i_http; /*< http port number */
int32_t i_mms; /*< mms port number */
int32_t i_rtp; /*< rtp port number */
int32_t i_udp; /*< udp port number */
int32_t i_icecast; /*< icecast port number */
/* Mux */ /* Mux */
char *psz_mux; char *psz_mux; /*< name of muxer to use in streaming */
/* Transcode */ /* Transcode */
vlc_bool_t b_soverlay; vlc_bool_t b_soverlay; /*< enable burning overlay in the video */
char *psz_vcodec, *psz_acodec, *psz_scodec; char *psz_vcodec; /*< video codec to use in transcoding */
int i_vb, i_ab, i_channels; char *psz_acodec; /*< audio codec to use in transcoding */
float f_scale; char *psz_scodec; /*< subtitle codec to use in transcoding */
int32_t i_vb; /*< video bitrate to use in transcoding */
int32_t i_ab; /*< audio bitrate to use in transcoding */
int32_t i_channels; /*< number of audio channels to use in transcoding */
float f_scale; /*< scaling factor to use in transcoding */
/* Misc */ /* Misc */
vlc_bool_t b_sap, b_all_es; vlc_bool_t b_sap; /*< send SAP announcement */
char *psz_group, *psz_name; vlc_bool_t b_all_es;/*< send all elementary streams from source stream */
int i_ttl; char *psz_group; /*< SAP Group name */
char *psz_name; /*< SAP name */
int32_t i_ttl; /*< Time To Live (TTL) for network traversal */
/* Icecast */
char *psz_mountpoint;/*< path to Icecast mountpoint */
struct streaming_account_t sa_icecast; /*< Icecast account information */
}; };
VLC_EXPORT(void, streaming_GuiDescToChain,(vlc_object_t*, sout_chain_t*, sout_gui_descr_t*)); VLC_EXPORT(void, streaming_GuiDescToChain,(vlc_object_t*, sout_chain_t*, sout_gui_descr_t*));
......
...@@ -264,15 +264,15 @@ void streaming_ParameterApply( sout_param_t *p_param, char **ppsz_dest, ...@@ -264,15 +264,15 @@ void streaming_ParameterApply( sout_param_t *p_param, char **ppsz_dest,
{ \ { \
pd->b_file = VLC_TRUE; pd->psz_file = strdup( STDM->psz_url ); \ pd->b_file = VLC_TRUE; pd->psz_file = strdup( STDM->psz_url ); \
} \ } \
else if( !strcmp( STDM->psz_access, "http" ) )\ else if( !strcmp( STDM->psz_access, "http" ) )\
{ \ { \
pd->b_http = VLC_TRUE; pd->psz_http = strdup( STDM->psz_url ); \ pd->b_http = VLC_TRUE; pd->psz_http = strdup( STDM->psz_url ); \
} \ } \
else if( !strcmp( STDM->psz_access, "mms" ) )\ else if( !strcmp( STDM->psz_access, "mms" ) )\
{ \ { \
pd->b_mms = VLC_TRUE; pd->psz_mms = strdup( STDM->psz_url ); \ pd->b_mms = VLC_TRUE; pd->psz_mms = strdup( STDM->psz_url ); \
} \ } \
else if( !strcmp( STDM->psz_access, "udp" ) )\ else if( !strcmp( STDM->psz_access, "udp" ) )\
{ \ { \
pd->b_udp = VLC_TRUE; pd->psz_udp = strdup( STDM->psz_url ); \ pd->b_udp = VLC_TRUE; pd->psz_udp = strdup( STDM->psz_url ); \
} \ } \
...@@ -378,6 +378,7 @@ void streaming_GuiDescToChain( vlc_object_t *p_obj, sout_chain_t *p_chain, ...@@ -378,6 +378,7 @@ void streaming_GuiDescToChain( vlc_object_t *p_obj, sout_chain_t *p_chain,
{ {
sout_duplicate_t *p_dup = NULL; sout_duplicate_t *p_dup = NULL;
(void)p_obj; (void)p_obj;
/* Clean up the chain */ /* Clean up the chain */
streaming_ChainClean( p_chain ); streaming_ChainClean( p_chain );
...@@ -392,7 +393,7 @@ void streaming_GuiDescToChain( vlc_object_t *p_obj, sout_chain_t *p_chain, ...@@ -392,7 +393,7 @@ void streaming_GuiDescToChain( vlc_object_t *p_obj, sout_chain_t *p_chain,
} }
/* #std{} */ /* #std{} */
if( pd->b_local + pd->b_file + pd->b_http + pd->b_mms + pd->b_rtp + if( pd->b_local + pd->b_file + pd->b_http + pd->b_mms + pd->b_rtp +
pd->b_udp > 1 ) pd->b_udp + pd->b_icecast > 1 )
{ {
p_dup = streaming_ChainAddDup( p_chain ); p_dup = streaming_ChainAddDup( p_chain );
} }
...@@ -424,7 +425,8 @@ void streaming_GuiDescToChain( vlc_object_t *p_obj, sout_chain_t *p_chain, ...@@ -424,7 +425,8 @@ void streaming_GuiDescToChain( vlc_object_t *p_obj, sout_chain_t *p_chain,
p_std = streaming_ChainAddStd( DUP_OR_CHAIN, "udp", p_std = streaming_ChainAddStd( DUP_OR_CHAIN, "udp",
pd->psz_mux, pd->psz_udp ); pd->psz_mux, pd->psz_udp );
} }
if( pd->i_ttl ) ADD_OPT( "ttl=%i", pd->i_ttl ); if( pd->i_ttl )
ADD_OPT( "ttl=%i", pd->i_ttl );
if( pd->b_sap ) if( pd->b_sap )
{ {
pd->b_sap = VLC_TRUE; pd->b_sap = VLC_TRUE;
...@@ -432,6 +434,43 @@ void streaming_GuiDescToChain( vlc_object_t *p_obj, sout_chain_t *p_chain, ...@@ -432,6 +434,43 @@ void streaming_GuiDescToChain( vlc_object_t *p_obj, sout_chain_t *p_chain,
p_std->psz_group = pd->psz_group ? strdup( pd->psz_group ) : NULL; p_std->psz_group = pd->psz_group ? strdup( pd->psz_group ) : NULL;
} }
} }
if( pd->b_icecast )
{
sout_std_t *p_std;
char *psz_username;
if( p_dup ) streaming_DupAddChild( p_dup );
if( !strcmp( pd->sa_icecast.psz_username, "" ) )
{
asprintf( &psz_username, "%s", "" );
}
else
{
asprintf( &psz_username, "%s:%s@", pd->sa_icecast.psz_username,
pd->sa_icecast.psz_password );
}
if( pd->i_icecast > 0 )
{
char *psz_url;
asprintf( &psz_url, "%s%s:%i%s", psz_username, pd->psz_icecast,
pd->i_icecast, pd->psz_mountpoint );
p_std = streaming_ChainAddStd( DUP_OR_CHAIN, "shout",
pd->psz_mux, psz_url );
free( psz_url );
}
else
{
char *psz_url;
asprintf( &psz_url, "%s:%s@%s%s", pd->sa_icecast.psz_username,
pd->sa_icecast.psz_password, pd->psz_icecast,
pd->psz_mountpoint );
p_std = streaming_ChainAddStd( DUP_OR_CHAIN, "shout",
pd->psz_mux, psz_url );
free( psz_url );
}
free( psz_username );
}
HANDLE_GUI_URL( http, "http" ) HANDLE_GUI_URL( http, "http" )
HANDLE_GUI_URL( mms, "mms" ) HANDLE_GUI_URL( mms, "mms" )
} }
...@@ -490,11 +529,12 @@ static char * ChainToPsz( sout_chain_t *p_chain, vlc_bool_t b_root ) ...@@ -490,11 +529,12 @@ static char * ChainToPsz( sout_chain_t *p_chain, vlc_bool_t b_root )
break; break;
case SOUT_MOD_DISPLAY: case SOUT_MOD_DISPLAY:
CHAIN_APPEND( "display" ) CHAIN_APPEND( "display" );
break; break;
case SOUT_MOD_STD: case SOUT_MOD_STD:
CHAIN_APPEND( "std{access=%s,url=%s,mux=%s}", STDM->psz_access, CHAIN_APPEND( "std{access=%s,dst=%s,mux=%s}", STDM->psz_access,
STDM->psz_url, STDM->psz_mux ); STDM->psz_url, STDM->psz_mux );
break;
} }
if( i != p_chain->i_modules - 1 ) CHAIN_APPEND( ":" ); if( i != p_chain->i_modules - 1 ) CHAIN_APPEND( ":" );
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment