mms.c
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:5k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * mms.c: MMS over tcp, udp and http access plug-in
  3.  *****************************************************************************
  4.  * Copyright (C) 2002-2004 VideoLAN
  5.  * $Id: mms.c 8826 2004-09-27 17:41:49Z gbazin $
  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., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  22.  *****************************************************************************/
  23. /*****************************************************************************
  24.  * Preamble
  25.  *****************************************************************************/
  26. #include <stdlib.h>
  27. #include <vlc/vlc.h>
  28. #include <vlc/input.h>
  29. #include "mms.h"
  30. /****************************************************************************
  31.  * NOTES:
  32.  *  MMSProtocole documentation found at http://get.to/sdp
  33.  ****************************************************************************/
  34. /*****************************************************************************
  35.  * Module descriptor
  36.  *****************************************************************************/
  37. static int  Open ( vlc_object_t * );
  38. static void Close( vlc_object_t * );
  39. #define CACHING_TEXT N_("Caching value in ms")
  40. #define CACHING_LONGTEXT N_( 
  41.     "Allows you to modify the default caching value for MMS streams. This " 
  42.     "value should be set in millisecond units." )
  43. #define ALL_TEXT N_("Force selection of all streams")
  44. #define BITRATE_TEXT N_("Select maximum bitrate stream")
  45. #define BITRATE_LONGTEXT N_( 
  46.     "Always select the stream with the maximum bitrate." )
  47. vlc_module_begin();
  48.     set_description( _("Microsoft Media Server (MMS) input") );
  49.     set_capability( "access2", -1 );
  50.     add_integer( "mms-caching", 4 * DEFAULT_PTS_DELAY / 1000, NULL,
  51.                  CACHING_TEXT, CACHING_LONGTEXT, VLC_TRUE );
  52.     add_bool( "mms-all", 0, NULL, ALL_TEXT, "", VLC_TRUE );
  53.     add_integer( "mms-maxbitrate", 0, NULL, BITRATE_TEXT, BITRATE_LONGTEXT ,
  54.                  VLC_FALSE );
  55.     add_shortcut( "mms" );
  56.     add_shortcut( "mmsu" );
  57.     add_shortcut( "mmst" );
  58.     add_shortcut( "mmsh" );
  59.     add_shortcut( "http" );
  60.     set_callbacks( Open, Close );
  61. vlc_module_end();
  62. /*****************************************************************************
  63.  * Local prototypes
  64.  *****************************************************************************/
  65. struct access_sys_t
  66. {
  67.     int i_proto;
  68. };
  69. /*****************************************************************************
  70.  * Open:
  71.  *****************************************************************************/
  72. static int Open( vlc_object_t *p_this )
  73. {
  74.     access_t *p_access = (access_t*)p_this;
  75.     /* First set ipv4/ipv6 */
  76.     var_Create( p_access, "ipv4", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
  77.     var_Create( p_access, "ipv6", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
  78.     /* mms-caching */
  79.     var_Create( p_access, "mms-caching", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
  80.     /* use specified method */
  81.     if( *p_access->psz_access )
  82.     {
  83.         if( !strncmp( p_access->psz_access, "mmsu", 4 ) )
  84.         {
  85.             return E_( MMSTUOpen )( p_access );
  86.         }
  87.         else if( !strncmp( p_access->psz_access, "mmst", 4 ) )
  88.         {
  89.             return E_( MMSTUOpen )( p_access );
  90.         }
  91.         else if( !strncmp( p_access->psz_access, "mmsh", 4 ) ||
  92.                  !strncmp( p_access->psz_access, "http", 4 ) )
  93.         {
  94.             return E_( MMSHOpen )( p_access );
  95.         }
  96.     }
  97.     if( E_( MMSTUOpen )( p_access ) )
  98.     {
  99.         /* try mmsh if mmstu failed */
  100.         return E_( MMSHOpen )( p_access );
  101.     }
  102.     return VLC_SUCCESS;
  103. }
  104. /*****************************************************************************
  105.  * Close: free unused data structures
  106.  *****************************************************************************/
  107. static void Close( vlc_object_t *p_this )
  108. {
  109.     access_t     *p_access = (access_t*)p_this;
  110.     access_sys_t *p_sys = p_access->p_sys;
  111.     if( p_sys->i_proto == MMS_PROTO_TCP || p_sys->i_proto == MMS_PROTO_UDP )
  112.     {
  113.         E_( MMSTUClose )( p_access );
  114.     }
  115.     else if( p_sys->i_proto == MMS_PROTO_HTTP )
  116.     {
  117.         E_( MMSHClose )( p_access );
  118.     }
  119. }