mms.c
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:6k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * mms.c: MMS over tcp, udp and http access plug-in
  3.  *****************************************************************************
  4.  * Copyright (C) 2002-2004 the VideoLAN team
  5.  * $Id: 6af74bbae79502e890f4ba8334ba10584bfab169 $
  6.  *
  7.  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. /*****************************************************************************
  24.  * Preamble
  25.  *****************************************************************************/
  26. #ifdef HAVE_CONFIG_H
  27. # include "config.h"
  28. #endif
  29. #include <vlc_common.h>
  30. #include <vlc_plugin.h>
  31. #include <vlc_access.h>
  32. #include "mms.h"
  33. /****************************************************************************
  34.  * NOTES:
  35.  *  MMSProtocole documentation found at http://get.to/sdp
  36.  ****************************************************************************/
  37. /*****************************************************************************
  38.  * Module descriptor
  39.  *****************************************************************************/
  40. static int  Open ( vlc_object_t * );
  41. static void Close( vlc_object_t * );
  42. #define CACHING_TEXT N_("Caching value in ms")
  43. #define CACHING_LONGTEXT N_( 
  44.     "Caching value for MMS streams. This " 
  45.     "value should be set in milliseconds." )
  46. #define ALL_TEXT N_("Force selection of all streams")
  47. #define ALL_LONGTEXT N_( 
  48.     "MMS streams can contain several elementary streams, with different " 
  49.     "bitrates. You can choose to select all of them." )
  50. #define BITRATE_TEXT N_( "Maximum bitrate" )
  51. #define BITRATE_LONGTEXT N_( 
  52.     "Select the stream with the maximum bitrate under that limit."  )
  53. #define PROXY_TEXT N_("HTTP proxy")
  54. #define PROXY_LONGTEXT N_( 
  55.     "HTTP proxy to be used It must be of the form " 
  56.     "http://[user[:pass]@]myproxy.mydomain:myport/ ; " 
  57.     "if empty, the http_proxy environment variable will be tried." )
  58. #define TIMEOUT_TEXT N_("TCP/UDP timeout (ms)")
  59. #define TIMEOUT_LONGTEXT N_("Amount of time (in ms) to wait before aborting network reception of data. Note that there will be 10 retries before completely giving up.")
  60. vlc_module_begin ()
  61.     set_shortname( "MMS" )
  62.     set_description( N_("Microsoft Media Server (MMS) input") )
  63.     set_capability( "access", -1 )
  64.     set_category( CAT_INPUT )
  65.     set_subcategory( SUBCAT_INPUT_ACCESS )
  66.     add_integer( "mms-caching", 19 * DEFAULT_PTS_DELAY / 1000, NULL,
  67.                  CACHING_TEXT, CACHING_LONGTEXT, true )
  68.     add_integer( "mms-timeout", 5000, NULL, TIMEOUT_TEXT, TIMEOUT_LONGTEXT,
  69.                  true )
  70.     add_bool( "mms-all", 0, NULL, ALL_TEXT, ALL_LONGTEXT, true )
  71.     add_integer( "mms-maxbitrate", 0, NULL, BITRATE_TEXT, BITRATE_LONGTEXT ,
  72.                  false )
  73.     add_string( "mmsh-proxy", NULL, NULL, PROXY_TEXT, PROXY_LONGTEXT,
  74.                     false )
  75.     add_shortcut( "mms" )
  76.     add_shortcut( "mmsu" )
  77.     add_shortcut( "mmst" )
  78.     add_shortcut( "mmsh" )
  79.     add_shortcut( "http" )
  80.     set_callbacks( Open, Close )
  81. vlc_module_end ()
  82. /*****************************************************************************
  83.  * Local prototypes
  84.  *****************************************************************************/
  85. struct access_sys_t
  86. {
  87.     int i_proto;
  88. };
  89. /*****************************************************************************
  90.  * Open:
  91.  *****************************************************************************/
  92. static int Open( vlc_object_t *p_this )
  93. {
  94.     access_t *p_access = (access_t*)p_this;
  95.     /* First set ipv4/ipv6 */
  96.     var_Create( p_access, "ipv4", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
  97.     var_Create( p_access, "ipv6", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
  98.     /* mms-caching */
  99.     var_Create( p_access, "mms-caching", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
  100.     /* use specified method */
  101.     if( *p_access->psz_access )
  102.     {
  103.         if( !strncmp( p_access->psz_access, "mmsu", 4 ) )
  104.         {
  105.             return  MMSTUOpen ( p_access );
  106.         }
  107.         else if( !strncmp( p_access->psz_access, "mmst", 4 ) )
  108.         {
  109.             return  MMSTUOpen ( p_access );
  110.         }
  111.         else if( !strncmp( p_access->psz_access, "mmsh", 4 ) ||
  112.                  !strncmp( p_access->psz_access, "http", 4 ) )
  113.         {
  114.             return  MMSHOpen ( p_access );
  115.         }
  116.     }
  117.     if( MMSTUOpen ( p_access ) )
  118.     {
  119.         if( p_access->b_die )
  120.             return VLC_EGENERIC;
  121.         /* try mmsh if mmstu failed */
  122.         return  MMSHOpen ( p_access );
  123.     }
  124.     return VLC_SUCCESS;
  125. }
  126. /*****************************************************************************
  127.  * Close: free unused data structures
  128.  *****************************************************************************/
  129. static void Close( vlc_object_t *p_this )
  130. {
  131.     access_t     *p_access = (access_t*)p_this;
  132.     access_sys_t *p_sys = p_access->p_sys;
  133.     if( ( p_sys->i_proto == MMS_PROTO_TCP ) ||
  134.         ( p_sys->i_proto == MMS_PROTO_UDP ) )
  135.     {
  136.          MMSTUClose ( p_access );
  137.     }
  138.     else if( p_sys->i_proto == MMS_PROTO_HTTP )
  139.     {
  140.          MMSHClose ( p_access );
  141.     }
  142. }