]> git.sesse.net Git - vlc/blobdiff - modules/access/mms/mms.c
Higher default caching value. Prebuffering should really use the caching value
[vlc] / modules / access / mms / mms.c
index 75a1a7745622601753fccd74deb208d13f63ab67..3973f8ed0bd2f6712fbfbbffa639057f22ee4c5c 100644 (file)
@@ -1,8 +1,8 @@
 /*****************************************************************************
  * mms.c: MMS over tcp, udp and http access plug-in
  *****************************************************************************
- * Copyright (C) 2001, 2002 VideoLAN
- * $Id: mms.c,v 1.35 2004/01/21 16:56:16 fenrir Exp $
+ * Copyright (C) 2002-2004 VideoLAN
+ * $Id$
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *
  *  MMSProtocole documentation found at http://get.to/sdp
  ****************************************************************************/
 
-/*****************************************************************************
- * Local prototypes
- *****************************************************************************/
-
-struct access_sys_t
-{
-    int i_proto;
-
-};
-
-static int  Open        ( vlc_object_t * );
-static void Close       ( vlc_object_t * );
-
-
 /*****************************************************************************
  * Module descriptor
  *****************************************************************************/
+static int  Open ( vlc_object_t * );
+static void Close( vlc_object_t * );
+
 #define CACHING_TEXT N_("Caching value in ms")
 #define CACHING_LONGTEXT N_( \
-    "Allows you to modify the default caching value for mms streams. This " \
-    "value should be set in miliseconds units." )
+    "Allows you to modify the default caching value for MMS streams. This " \
+    "value should be set in millisecond units." )
+
+#define ALL_TEXT N_("Force selection of all streams")
+
+#define BITRATE_TEXT N_("Select maximum bitrate stream")
+#define BITRATE_LONGTEXT N_( \
+    "Always select the stream with the maximum bitrate." )
 
 vlc_module_begin();
+    set_shortname( _("MMS") );
     set_description( _("Microsoft Media Server (MMS) input") );
-    set_capability( "access", 0 );
-    add_category_hint( "stream", NULL, VLC_TRUE );
-        add_integer( "mms-caching", 4 * DEFAULT_PTS_DELAY / 1000, NULL,
-                     CACHING_TEXT, CACHING_LONGTEXT, VLC_TRUE );
-
-        add_bool( "mms-all", 0, NULL,
-                  "force selection of all streams",
-                  "force selection of all streams", VLC_TRUE );
-        add_integer( "mms-maxbitrate", 0, NULL,
-                     "max bitrate",
-                     "set max bitrate for auto streams selections", VLC_FALSE );
+    set_capability( "access2", -1 );
+    set_category( CAT_INPUT );
+    set_subcategory( SUBCAT_INPUT_ACCESS );
+
+    add_integer( "mms-caching", 12 * DEFAULT_PTS_DELAY / 1000, NULL,
+                 CACHING_TEXT, CACHING_LONGTEXT, VLC_TRUE );
+
+    add_bool( "mms-all", 0, NULL, ALL_TEXT, "", VLC_TRUE );
+    add_integer( "mms-maxbitrate", 0, NULL, BITRATE_TEXT, BITRATE_LONGTEXT ,
+                 VLC_FALSE );
+
     add_shortcut( "mms" );
     add_shortcut( "mmsu" );
     add_shortcut( "mmst" );
     add_shortcut( "mmsh" );
+    add_shortcut( "http" );
     set_callbacks( Open, Close );
 vlc_module_end();
 
+/*****************************************************************************
+ * Local prototypes
+ *****************************************************************************/
+struct access_sys_t
+{
+    int i_proto;
+};
+
 
+/*****************************************************************************
+ * Open:
+ *****************************************************************************/
 static int Open( vlc_object_t *p_this )
 {
-    input_thread_t  *p_input = (input_thread_t*)p_this;
+    access_t *p_access = (access_t*)p_this;
 
     /* First set ipv4/ipv6 */
-    var_Create( p_input, "ipv4", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
-    var_Create( p_input, "ipv6", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
+    var_Create( p_access, "ipv4", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
+    var_Create( p_access, "ipv6", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
 
     /* mms-caching */
-    var_Create( p_input, "mms-caching", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
+    var_Create( p_access, "mms-caching", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
 
     /* use specified method */
-    if( *p_input->psz_access )
+    if( *p_access->psz_access )
     {
-        if( !strncmp( p_input->psz_access, "mmsu", 4 ) )
+        if( !strncmp( p_access->psz_access, "mmsu", 4 ) )
         {
-            return E_( MMSTUOpen )( p_input );
+            return E_( MMSTUOpen )( p_access );
         }
-        else if( !strncmp( p_input->psz_access, "mmst", 4 ) )
+        else if( !strncmp( p_access->psz_access, "mmst", 4 ) )
         {
-            return E_( MMSTUOpen )( p_input );
+            return E_( MMSTUOpen )( p_access );
         }
-        else if( !strncmp( p_input->psz_access, "mmsh", 4 ) )
+        else if( !strncmp( p_access->psz_access, "mmsh", 4 ) ||
+                 !strncmp( p_access->psz_access, "http", 4 ) )
         {
-            return E_( MMSHOpen )( p_input );
+            return E_( MMSHOpen )( p_access );
         }
     }
 
-    if( E_( MMSTUOpen )( p_input ) )
+    if( E_( MMSTUOpen )( p_access ) )
     {
         /* try mmsh if mmstu failed */
-        return E_( MMSHOpen )( p_input );
+        return E_( MMSHOpen )( p_access );
     }
     return VLC_SUCCESS;
 }
@@ -121,131 +130,15 @@ static int Open( vlc_object_t *p_this )
  *****************************************************************************/
 static void Close( vlc_object_t *p_this )
 {
-    input_thread_t *  p_input = (input_thread_t *)p_this;
-    access_sys_t   *  p_sys   = p_input->p_access_data;
+    access_t     *p_access = (access_t*)p_this;
+    access_sys_t *p_sys = p_access->p_sys;
 
     if( p_sys->i_proto == MMS_PROTO_TCP || p_sys->i_proto == MMS_PROTO_UDP )
     {
-        E_( MMSTUClose )( p_input );
+        E_( MMSTUClose )( p_access );
     }
     else if( p_sys->i_proto == MMS_PROTO_HTTP )
     {
-        E_( MMSHClose )( p_input );
-    }
-}
-
-/****************************************************************************
- * parse hostname:port/path@username:password
- * FIXME ipv6 ip will be baddly parsed (contain ':' )
- ****************************************************************************/
-url_t *E_( url_new )  ( char * psz_url )
-{
-    url_t *p_url = malloc( sizeof( url_t ) );
-
-    char  *psz_dup    = strdup( psz_url );
-    char  *psz_parser = psz_dup;
-
-    char  *psz_tmp;
-
-    /* 1: get hostname:port */
-    while( *psz_parser == '/' )
-    {
-        psz_parser++;
-    }
-
-    psz_tmp = psz_parser;
-
-    while( *psz_parser &&
-           *psz_parser != ':' &&  *psz_parser != '/' && *psz_parser != '@' )
-    {
-        psz_parser++;
-    }
-
-    p_url->psz_host     = strndup( psz_tmp, psz_parser - psz_tmp );
-
-    if( *psz_parser == ':' )
-    {
-        psz_parser++;
-        psz_tmp = psz_parser;
-
-        while( *psz_parser && *psz_parser != '/' && *psz_parser != '@' )
-        {
-            psz_parser++;
-        }
-        p_url->i_port = atoi( psz_tmp );
-    }
-    else
-    {
-        p_url->i_port = 0;
-    }
-
-    /* 2: get path */
-    if( *psz_parser == '/' )
-    {
-        //psz_parser++;
-
-        psz_tmp = psz_parser;
-
-        while( *psz_parser && *psz_parser != '@' )
-        {
-            psz_parser++;
-        }
-
-        p_url->psz_path = strndup( psz_tmp, psz_parser - psz_tmp );
-    }
-    else
-    {
-        p_url->psz_path = strdup( "" );
-    }
-
-    /* 3: usrname and password */
-    if( *psz_parser == '@' )
-    {
-        psz_parser++;
-
-        psz_tmp = psz_parser;
-
-        while( *psz_parser && *psz_parser != ':' )
-        {
-            psz_parser++;
-        }
-
-        p_url->psz_username = strndup( psz_tmp, psz_parser - psz_tmp );
-
-        if( *psz_parser == ':' )
-        {
-            psz_parser++;
-
-            p_url->psz_password = strdup( psz_parser );
-        }
-        else
-        {
-            p_url->psz_password = strdup( "" );
-        }
-    }
-    else
-    {
-        p_url->psz_username = strdup( "" );
-        p_url->psz_password = strdup( "" );
+        E_( MMSHClose )( p_access );
     }
-#if 0
-    fprintf( stderr,
-             "host=`%s' port=%d path=`%s' username=`%s' password=`%s'\n",
-             p_url->psz_host,
-             p_url->i_port,
-             p_url->psz_path,
-             p_url->psz_username,
-             p_url->psz_password );
-#endif
-    free( psz_dup );
-    return p_url;
-}
-
-void   E_( url_free ) ( url_t * p_url )
-{
-    free( p_url->psz_host );
-    free( p_url->psz_path );
-    free( p_url->psz_username );
-    free( p_url->psz_password );
-    free( p_url );
 }