Commit bacc1e26 authored by Derk-Jan Hartman's avatar Derk-Jan Hartman

* modules/demux/sgimb.c

  - when we open a kasenna multicast udp stream, don't pass along to RTSP.
  - set the correct mtu for Kasenna streams.
* rest
  --mtu can now be set via :mtu playlist option.\
parent 3ea4e4ea
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* udp.c: raw UDP & RTP input module * udp.c: raw UDP & RTP input module
***************************************************************************** *****************************************************************************
* Copyright (C) 2001-2004 VideoLAN * Copyright (C) 2001-2004 VideoLAN
* $Id: udp.c,v 1.29 2004/01/31 18:02:32 alexis Exp $ * $Id$
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* Tristan Leteurtre <tooney@via.ecp.fr> * Tristan Leteurtre <tooney@via.ecp.fr>
...@@ -215,7 +215,9 @@ static int Open( vlc_object_t *p_this ) ...@@ -215,7 +215,9 @@ static int Open( vlc_object_t *p_this )
free( psz_name ); free( psz_name );
/* FIXME */ /* FIXME */
p_input->i_mtu = config_GetInt( p_this, "mtu" ); var_Create( p_input, "mtu", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Get( p_input, "mtu", &val);
p_input->i_mtu = val.i_int;
/* fill p_input fields */ /* fill p_input fields */
p_input->pf_read = RTPChoose; p_input->pf_read = RTPChoose;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* sgimb.c: a meta demux to parse sgimb referrer files * sgimb.c: a meta demux to parse sgimb referrer files
***************************************************************************** *****************************************************************************
* Copyright (C) 2004 VideoLAN * Copyright (C) 2004 VideoLAN
* $Id: $ * $Id$
* *
* Authors: Derk-Jan Hartman <hartman at videolan dot org> * Authors: Derk-Jan Hartman <hartman at videolan dot org>
* *
...@@ -86,6 +86,9 @@ struct demux_sys_t ...@@ -86,6 +86,9 @@ struct demux_sys_t
char *psz_name; /* sgiShowingName= */ char *psz_name; /* sgiShowingName= */
char *psz_user; /* sgiUserAccount= */ char *psz_user; /* sgiUserAccount= */
char *psz_password; /* sgiUserPassword= */ char *psz_password; /* sgiUserPassword= */
char *psz_mcast_ip; /* sgiMulticastAddress= */
int i_mcast_port; /* sgiMulticastPort= */
int i_packet_size; /* sgiPacketSize= */
mtime_t i_duration; /* sgiDuration= */ mtime_t i_duration; /* sgiDuration= */
int i_port; /* sgiRtspPort= */ int i_port; /* sgiRtspPort= */
int i_sid; /* sgiSid= */ int i_sid; /* sgiSid= */
...@@ -113,6 +116,9 @@ static int Activate( vlc_object_t * p_this ) ...@@ -113,6 +116,9 @@ static int Activate( vlc_object_t * p_this )
p_sys->psz_name = NULL; p_sys->psz_name = NULL;
p_sys->psz_user = NULL; p_sys->psz_user = NULL;
p_sys->psz_password = NULL; p_sys->psz_password = NULL;
p_sys->psz_mcast_ip = NULL;
p_sys->i_mcast_port = 0;
p_sys->i_packet_size = 0;
p_sys->i_duration = (mtime_t)0; p_sys->i_duration = (mtime_t)0;
p_sys->i_port = 0; p_sys->i_port = 0;
...@@ -154,6 +160,8 @@ static void Deactivate( vlc_object_t *p_this ) ...@@ -154,6 +160,8 @@ static void Deactivate( vlc_object_t *p_this )
free( p_sys->psz_user ); free( p_sys->psz_user );
if( p_sys->psz_password ) if( p_sys->psz_password )
free( p_sys->psz_password ); free( p_sys->psz_password );
if( p_sys->psz_mcast_ip )
free( p_sys->psz_mcast_ip );
free( p_demux->p_sys ); free( p_demux->p_sys );
return; return;
} }
...@@ -218,6 +226,21 @@ static int ParseLine ( demux_t *p_demux, char *psz_line ) ...@@ -218,6 +226,21 @@ static int ParseLine ( demux_t *p_demux, char *psz_line )
psz_bol += sizeof("sgiShowingName=") - 1; psz_bol += sizeof("sgiShowingName=") - 1;
p_sys->psz_name = strdup( psz_bol ); p_sys->psz_name = strdup( psz_bol );
} }
else if( !strncasecmp( psz_bol, "sgiMulticastAddress=", sizeof("sgiMulticastAddress=") - 1 ) )
{
psz_bol += sizeof("sgiMulticastAddress=") - 1;
p_sys->psz_mcast_ip = strdup( psz_bol );
}
else if( !strncasecmp( psz_bol, "sgiMulticastPort=", sizeof("sgiMulticastPort=") - 1 ) )
{
psz_bol += sizeof("sgiMulticastPort=") - 1;
p_sys->i_mcast_port = (int) strtol( psz_bol, NULL, 0 );
}
else if( !strncasecmp( psz_bol, "sgiPacketSize=", sizeof("sgiPacketSize=") - 1 ) )
{
psz_bol += sizeof("sgiPacketSize=") - 1;
p_sys->i_packet_size = (int) strtol( psz_bol, NULL, 0 );
}
else if( !strncasecmp( psz_bol, "sgiDuration=", sizeof("sgiDuration=") - 1 ) ) else if( !strncasecmp( psz_bol, "sgiDuration=", sizeof("sgiDuration=") - 1 ) )
{ {
psz_bol += sizeof("sgiDuration=") - 1; psz_bol += sizeof("sgiDuration=") - 1;
...@@ -244,6 +267,7 @@ static int Demux ( demux_t *p_demux ) ...@@ -244,6 +267,7 @@ static int Demux ( demux_t *p_demux )
{ {
demux_sys_t *p_sys = p_demux->p_sys; demux_sys_t *p_sys = p_demux->p_sys;
playlist_t *p_playlist; playlist_t *p_playlist;
playlist_item_t *p_item;
char *psz_line; char *psz_line;
int i_position; int i_position;
...@@ -265,7 +289,17 @@ static int Demux ( demux_t *p_demux ) ...@@ -265,7 +289,17 @@ static int Demux ( demux_t *p_demux )
if( psz_line ) free( psz_line ); if( psz_line ) free( psz_line );
} }
if( p_sys->psz_uri == NULL ) if( p_sys->psz_mcast_ip )
{
char *temp;
temp = (char *)malloc( sizeof("udp/ts2://@000.000.000.000:123456789" ) );
sprintf( temp, "udp/ts2://@" "%s:%i", p_sys->psz_mcast_ip, p_sys->i_mcast_port );
if( p_sys->psz_uri ) free( p_sys->psz_uri );
p_sys->psz_uri = strdup( temp );
free( temp );
}
else if( p_sys->psz_uri == NULL )
{ {
if( p_sys->psz_server && p_sys->psz_location ) if( p_sys->psz_server && p_sys->psz_location )
{ {
...@@ -281,9 +315,25 @@ static int Demux ( demux_t *p_demux ) ...@@ -281,9 +315,25 @@ static int Demux ( demux_t *p_demux )
} }
} }
playlist_AddExt( p_playlist, p_sys->psz_uri, p_item = playlist_ItemNew( p_playlist, p_sys->psz_uri,
p_sys->psz_name ? p_sys->psz_name : p_sys->psz_uri, p_sys->psz_name ? p_sys->psz_name : p_sys->psz_uri );
PLAYLIST_INSERT, i_position, p_sys->i_duration, NULL, 0 );
if( !p_item || !p_item->input.psz_uri )
{
msg_Err( p_demux, "A valid playlistitem could not be created" );
return VLC_EGENERIC;
}
if( p_sys->i_packet_size && p_sys->psz_mcast_ip )
{
char *psz_option = (char *) malloc( 20 );
sprintf( psz_option, "mtu=%i", p_sys->i_packet_size );
playlist_ItemAddOption( p_item, psz_option );
free( psz_option );
}
playlist_ItemSetDuration( p_item, p_sys->i_duration );
playlist_AddItem( p_playlist, p_item, PLAYLIST_INSERT, i_position );
vlc_object_release( p_playlist ); vlc_object_release( p_playlist );
return VLC_SUCCESS; return VLC_SUCCESS;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ipv4.c: IPv4 network abstraction layer * ipv4.c: IPv4 network abstraction layer
***************************************************************************** *****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN * Copyright (C) 2001, 2002 VideoLAN
* $Id: ipv4.c,v 1.25 2004/02/22 23:09:25 titer Exp $ * $Id$
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* Mathias Kretschmer <mathias@research.att.com> * Mathias Kretschmer <mathias@research.att.com>
...@@ -153,6 +153,7 @@ static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket ) ...@@ -153,6 +153,7 @@ static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket )
int i_handle, i_opt; int i_handle, i_opt;
socklen_t i_opt_size; socklen_t i_opt_size;
struct sockaddr_in sock; struct sockaddr_in sock;
vlc_value_t val;
/* If IP_ADD_SOURCE_MEMBERSHIP is not defined in the headers /* If IP_ADD_SOURCE_MEMBERSHIP is not defined in the headers
(because it's not in glibc for example), we have to define the (because it's not in glibc for example), we have to define the
...@@ -420,7 +421,10 @@ static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket ) ...@@ -420,7 +421,10 @@ static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket )
} }
p_socket->i_handle = i_handle; p_socket->i_handle = i_handle;
p_socket->i_mtu = config_GetInt( p_this, "mtu" );
var_Create( p_this, "mtu", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Get( p_this, "mtu", &val );
p_socket->i_mtu = val.i_int;
return( 0 ); return( 0 );
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ipv6.c: IPv6 network abstraction layer * ipv6.c: IPv6 network abstraction layer
***************************************************************************** *****************************************************************************
* Copyright (C) 2002 VideoLAN * Copyright (C) 2002 VideoLAN
* $Id: ipv6.c,v 1.16 2004/02/15 22:20:56 gbazin Exp $ * $Id$
* *
* Authors: Alexis Guillard <alexis.guillard@bt.com> * Authors: Alexis Guillard <alexis.guillard@bt.com>
* Christophe Massiot <massiot@via.ecp.fr> * Christophe Massiot <massiot@via.ecp.fr>
...@@ -250,6 +250,7 @@ static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket ) ...@@ -250,6 +250,7 @@ static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket )
int i_handle, i_opt; int i_handle, i_opt;
socklen_t i_opt_size; socklen_t i_opt_size;
struct sockaddr_in6 sock; struct sockaddr_in6 sock;
vlc_value_t val;
/* Open a SOCK_DGRAM (UDP) socket, in the AF_INET6 domain, automatic (0) /* Open a SOCK_DGRAM (UDP) socket, in the AF_INET6 domain, automatic (0)
* protocol */ * protocol */
...@@ -428,7 +429,10 @@ static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket ) ...@@ -428,7 +429,10 @@ static int OpenUDP( vlc_object_t * p_this, network_socket_t * p_socket )
} }
p_socket->i_handle = i_handle; p_socket->i_handle = i_handle;
p_socket->i_mtu = config_GetInt( p_this, "mtu" );
var_Create( p_this, "mtu", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Get( p_this, "mtu", &val );
p_socket->i_mtu = val.i_int;
return( 0 ); return( 0 );
} }
......
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