RtspSession.hxx
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:9k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #ifndef RtspSession_hxx
  2. #define RtspSession_hxx
  3. /* ====================================================================
  4.  * The Vovida Software License, Version 1.0 
  5.  * 
  6.  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  7.  * 
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in
  17.  *    the documentation and/or other materials provided with the
  18.  *    distribution.
  19.  * 
  20.  * 3. The names "VOCAL", "Vovida Open Communication Application Library",
  21.  *    and "Vovida Open Communication Application Library (VOCAL)" must
  22.  *    not be used to endorse or promote products derived from this
  23.  *    software without prior written permission. For written
  24.  *    permission, please contact vocal@vovida.org.
  25.  *
  26.  * 4. Products derived from this software may not be called "VOCAL", nor
  27.  *    may "VOCAL" appear in their name, without prior written
  28.  *    permission of Vovida Networks, Inc.
  29.  * 
  30.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  31.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  32.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  33.  * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  34.  * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  35.  * IN EXCESS OF 281421,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  36.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  37.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  38.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  39.  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  40.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  41.  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  42.  * DAMAGE.
  43.  * 
  44.  * ====================================================================
  45.  * 
  46.  * This software consists of voluntary contributions made by Vovida
  47.  * Networks, Inc. and many individuals on behalf of Vovida Networks,
  48.  * Inc.  For more information on Vovida Networks, Inc., please see
  49.  * <http://www.vovida.org/>.
  50.  *
  51.  */
  52. static const char* const RtspSession_hxx_Version =
  53.     "$Id: RtspSession.hxx,v 1.24 2001/06/27 02:21:39 wjin Exp $";
  54. #include "RtpSession.hxx"
  55. #include "RtspSessionStats.hxx"
  56. #include "RtspFileHandler.hxx"
  57. #include "State.hxx"
  58. #include "RtspMsg.hxx"
  59. #include "RtspSetupMsg.hxx"
  60. #include "RtspPlayMsg.hxx"
  61. #include "RtspPauseMsg.hxx"
  62. #include "Sptr.hxx"
  63. #include "Fifo.h"
  64. #include "TimeVal.hxx"
  65. #include "NetworkAddress.h"
  66. #include "Connection.hxx"
  67. #include <sys/time.h>
  68. #include <unistd.h>
  69. /** session mode enum */
  70. enum RtspSessionMode
  71. {
  72.     RTSP_SESSION_MODE_PLAY,
  73.     RTSP_SESSION_MODE_REC,
  74.     RTSP_SESSION_MODE_UNKNOWN
  75. };
  76.  
  77. /** Class to keep per session parameters.
  78.     <ul>
  79.     <li>sesion id
  80.     <li>session state (init, playing, pause, etc)
  81.     <li>session mode (play, rec, unknown>
  82.     <li>client/server ip address
  83.     <li>file handler and information
  84.     <li>rtp stack and port information
  85.     <li>pause points
  86.     <li>etc
  87.     </ul>
  88.  */
  89. class RtspSession 
  90. {
  91.     public:
  92.         friend class RtspRtpProcessor;
  93.         /** constructor */
  94.         RtspSession();
  95.         /** deconstructor */
  96.         virtual ~RtspSession();
  97.         /** adds an event into pending play events fifo */
  98.         void addPendingEvent( Sptr<RtspPlayMsg> event );
  99.         /** set session state */
  100.         void state( Sptr<State> state )
  101.             { myState = state; }
  102.         /** get session state */
  103.         Sptr<State> state() const
  104.             { return myState; }
  105.         /** set sessionId */
  106.         void sessionId( const Data& sessionId )
  107.             { mySessionId = sessionId; }
  108.         /** get sessionId */
  109.         Data sessionId() const
  110.             { return mySessionId; }
  111.         /** set rtsp transport spec - from SETUP method */
  112.         void transport( const RtspTransportSpec& spec )
  113.             { myTransportSpec = spec; }
  114.         /** get rtsp transport spec - from SETUP method */
  115.         const RtspTransportSpec& transport() const
  116.             { return myTransportSpec; }
  117.         /** set server network address */
  118.         void clientAddress( const NetworkAddress& addr )
  119.             { myClientAddr = addr; }
  120.         /** get server network addrees */
  121.         const NetworkAddress& clientAddress() const
  122.             { return myClientAddr; }
  123.         /** set client network address */
  124.         void serverAddress( const NetworkAddress& addr )
  125.             { myServerAddr = addr; }
  126.         /** get client network address */
  127.         const NetworkAddress& serverAddress() const
  128.             { return myServerAddr; }
  129.         /** set file handler */
  130.         void fileHandler( Sptr<RtspFileHandler> fh )
  131.             { myFileHandler = fh; }
  132.         /** get file handler */
  133.         Sptr<RtspFileHandler> fileHandler() const
  134.             { return myFileHandler; }
  135.         /** Create rtp stack based on current transport values.
  136.             Must be called after opening file handler.
  137.             @param mode play = 0, record = 1
  138.             @return false on failure
  139.          */
  140.         bool createRtpStack( const int mode );
  141.         /** delete rtp stack */
  142.         void deleteRtpStack();
  143.         /** get rtp session pointer */
  144.         RtpSession* rtpSession() const
  145.             { return myRtpSession; }
  146.         /** get session mode */
  147.         const RtspSessionMode sessionMode() const
  148.             { return mySessionMode; }
  149.         /** set rtp fd - used for select() loop */
  150.         void rtpFd( const int fd )
  151.             { myRtpFd = fd; }
  152.         /** get rtp fd - used for select() loop */
  153.         int rtpFd() const
  154.             { return myRtpFd; }
  155.         /** save pending pause msg */
  156.         void pendingPause( Sptr<RtspPauseMsg> msg )
  157.             { myPauseMsg = msg; }
  158.         /** get pending pause msg */
  159.         Sptr<RtspPauseMsg> pendingPause() const
  160.             { return myPauseMsg; }
  161.         /** save orginal setup msg - not really used by anyone */
  162.         void setupMsg( Sptr<RtspSetupMsg> msg )
  163.             { mySetupMsg = msg; }
  164.         /** save orginal setup msg - not really used by anyone */
  165.         Sptr<RtspSetupMsg> setupMsg() const
  166.             { return mySetupMsg; }
  167.         /** inital fifo time when session was added to rtp processor */
  168.         TimeVal myFifoTimeBase;
  169.         /** current play position in ms */
  170.         long myCurrentNpt;
  171.         /** pending pause point in npt */
  172.         long myPausePoint;
  173.         /** total number of packets to play, -1 if unknown */
  174.         int myPacketTotal;
  175.         /** number of packets currently played */ 
  176.         int myPacketCounter;
  177.         /** packet time interval in ms */
  178.         int myPacketIntervalMs;
  179.         /** per sessoin statistics */
  180.         RtspSessionStats myStats;
  181.         /** lock for updating statistics */
  182.         VMutex myStatsMutex;
  183.         /** */
  184.         PerRecordReqData myPerRecordReqData;
  185.         /** */
  186.         PerPlayReqData myPerPlayReqData;
  187.     private:
  188.         /** print rtp port information - used for debugging */
  189.         void printRtpInfo();
  190.     private:
  191.         /** session Id */
  192.         Data mySessionId;
  193.         /** current state */
  194.         Sptr<State> myState;
  195.         /** client rtsp connection information */
  196.         NetworkAddress myClientAddr;
  197.         /** server rtsp connection information */
  198.         NetworkAddress myServerAddr;
  199.         /** rtp connection parameters */
  200.         RtspTransportSpec myTransportSpec;
  201.         /** file to be played or recorded */
  202.         Sptr<RtspFileHandler> myFileHandler;
  203.         /** rtp stack pointer */
  204.         RtpSession* myRtpSession;
  205.         /** session mode, play, record, or unknown */
  206.         RtspSessionMode mySessionMode;
  207.         /** rtp fd - used for select() loops */
  208.         int myRtpFd;
  209.         /** fifo of pending play requests */
  210.         Fifo< Sptr<RtspPlayMsg> > myPendingEvents;
  211.         /** pending play request*/
  212.         Sptr<RtspPauseMsg> myPauseMsg;
  213.         /** orginal setup request */
  214.         Sptr<RtspSetupMsg> mySetupMsg;
  215.     private:
  216.         /** suppress copy constructor */
  217.         RtspSession( const RtspSession& );
  218.         /** suppress assignment operator */
  219.         RtspSession& operator=( const RtspSession& );
  220. };
  221. /* Local Variables: */
  222. /* c-file-style: "stroustrup" */
  223. /* indent-tabs-mode: nil */
  224. /* c-file-offsets: ((access-label . -) (inclass . ++)) */
  225. /* c-basic-offset: 4 */
  226. /* End: */
  227. #endif