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

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #ifndef RtspFileHandler_HXX
  2. #define RtspFileHandler_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 RtspFileHandler_hxx_version =
  53.     "$Id: RtspFileHandler.hxx,v 1.35 2001/05/15 20:26:08 bko Exp $";
  54. #include "cpLog.h"
  55. #include "Data.hxx"
  56. #include "Rtp.hxx"
  57. #include "RtspSdp.hxx"
  58. #include "RtpFileTypes.hxx"
  59. #include "RtspFile.hxx"
  60. /** Interface into RtspFile class.  Handles reading and writing to audio file
  61.     and audio header.  Container for parameters used by rtp processor.
  62.  */
  63. class RtspFileHandler
  64. {
  65.     public:
  66.         /** Opens the specified descriptor file.
  67.             Parses from filename file extension, has default if not found.
  68.             Parses from filename myFtIndex(codec type), has default if not found.
  69.             Note, myFtIndex might not match format type in header of audio file.
  70.             Sets up the following private data members.
  71.             - myFileExtension
  72.             - myFtIndex ( my be incorrect )
  73.             - myFilename
  74.             @param filename filename.[wav|au|raw|...]
  75.             @param contentBase rtsp file path
  76.          */
  77.         RtspFileHandler( const Data& filename, const Data& contentBase );
  78.         /** deconstructor */
  79.         virtual ~RtspFileHandler();
  80.         /** Return name of audio file. */
  81.         Data filename() const;
  82.         /** return contentbase(rtsp file path) + filename + extension */
  83.         Data filenameUrl() const;
  84.         /** Write sdp block into audio header and/or *.sdp file.  This
  85.             function will check codec in sdp block is valid and supported.  
  86.             Audio file and header will be created as needed.
  87.             @param sdp sdp block (ie content body of rtsp ANNOUNCE)
  88.          */
  89.         bool writeAudioHeader( const Data& sdp );
  90.         /** Read sdp block from audio header or *.sdp file.
  91.             @return sdp block.  Can be casted into char* or string - see
  92.                     RtspSdp class.
  93.          */
  94.         RtspSdp& readAudioHeader();
  95.         /** Builds myRtspSdp from audio header or *.sdp file.
  96.             @return false on failure
  97.          */
  98.         bool loadAudioHeader();
  99.         /** Open file with given mode and sizing.
  100.             @param mode <code>false</code> read, <code>true>/code>write
  101.             @param packetSize bytes per packet
  102.          *  @return false on failure
  103.          */
  104.         bool openAudioFile( const bool mode, const int packetSize );
  105.         /** Closes audio file.  Updates audio header and *.sdp file
  106.          *  @return false on failure
  107.          */
  108.         bool closeAudioFile();
  109.         /** Return length of audio file in ms, -1 if unknown.  */
  110.         long length() const
  111.             { return myLength; }
  112.         /** Read from audio file.
  113.             @param data return param preallocationed memory location for 
  114.                         new data
  115.             @param max size of preallocationed memory location in bytes
  116.             @param pSeqNum rtp sequence number of new data
  117.             @param pTs rtp time stamp of new data
  118.             @return bytes of new data read, -1 if error
  119.          */
  120.         int read( void* data, size_t max,
  121.                   unsigned short* pSeqNum = 0, unsigned int* pTS = 0 );
  122.         /** Write to audio file.
  123.             @param data new data to write 
  124.             @param max size of new data in bytes
  125.             @param uSeqNum rtp sequence number of new data
  126.             @param uTs rtp time stamp of new data
  127.             @return bytes of new data written, -1 if error
  128.          */
  129.         int write( void* data, size_t max,
  130.                    unsigned short uSeqNum = 0, unsigned int uTS = 0 );
  131.         /** Seek read/write pointer into file.
  132.          #  @param npt time in ms
  133.          *  @return actual npt in milliseconds, -1 if error
  134.          */
  135.         long seek( long npt );
  136.         /** rtp payload codec */
  137.         int packetCodec() const
  138.             { return myCodec; }
  139.         /** rtp packet size in bytes */
  140.         int packetSize() const
  141.             { return myPacketSize; }
  142.         /** samples per rtp packet */
  143.         int packetSamples() const
  144.             { return rtpFileTypeInfo[myFtIndex].samples; }
  145.         /** packet interval in milliseconds */
  146.         int packetInterval() const
  147.             { return myPacketInterval; }
  148.         /** codec parameters index */
  149.         int ftIndex() const
  150.             { return myFtIndex; }
  151.     private:
  152.         /** file extension types */
  153.         enum eExtension
  154.         {
  155.             UNKNOWN_EXT = 0,
  156.             AU_EXT,
  157.             WAV_EXT,
  158.             RAW_EXT,
  159.             RTP_EXT
  160.         };
  161.     private:
  162.         /** rtsp file path */
  163.         string myContentBase;
  164.         /** file extension type of audio file */
  165.         eExtension myFileExtension;
  166.         /** sdp data */
  167.         RtspSdp myRtspSdp;
  168.         /** RtspFile interface */
  169.         RtspFile* m_xRtspFile;
  170.         /** file access mode. 
  171.             <code>false</code> if read; <code>true</code> if write */
  172.         bool myReadWrite;
  173.         /** codec parameters index */
  174.         int myFtIndex;
  175.         /** rtp payload codec */
  176.         int myCodec;
  177.         /** length of audio file in ms */
  178.         int myLength;
  179.         /** packet interval in milliseconds */
  180.         int myPacketInterval;
  181.         /** rtp packet size in bytes */
  182.         int myPacketSize;
  183.     protected:
  184.         /** suppress copy constructor */
  185.         RtspFileHandler( const RtspFileHandler& );
  186.         /** suppress assignment operator */
  187.         RtspFileHandler& operator=( const RtspFileHandler& );
  188. };
  189. /* Local Variables: */
  190. /* c-file-style: "stroustrup" */
  191. /* indent-tabs-mode: nil */
  192. /* c-file-offsets: ((access-label . -) (inclass . ++)) */
  193. /* c-basic-offset: 4 */
  194. /* End: */
  195. #endif