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

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #ifndef RTPSESSION_HXX
  2. #define RTPSESSION_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 $1,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 RtpSession_hxx_Version =
  53.     "$Id: RtpSession.hxx,v 1.35 2001/05/07 19:12:50 kle Exp $";
  54. #include "rtpTypes.h"
  55. #include "Rtp.hxx"
  56. #include "Rtcp.hxx"
  57. #include "DTMFInterface.hxx"
  58. /// RTP Session including RTP/RTCP transmitter, RTP/RTCP receiver
  59. class RtpSession
  60. {
  61.     public:
  62.         /**@param ports All ports are optional
  63.          * @param jitterNew = -1 to bypass jitterBuffer
  64.          **/
  65.         RtpSession (const char* remoteHost, int remotePort = 0, int localPort = 0,
  66.                     int rtcpRemotePort = 0, int rtcpLocalPort = 0,
  67.                     RtpPayloadType apiPayloadType = rtpPayloadPCMU,
  68.                     RtpPayloadType networkPayloadType = rtpPayloadPCMU,
  69.                     int jitterNew = 5);
  70.         /**@param ports All ports are optional by passing 0.  Port range is
  71.          *        availiable here.
  72.          * @param jitterNew = -1 to bypass jitterBuffer
  73.          **/
  74.         RtpSession (const char* remoteHost, int remotePort, int localPort,
  75.                     int rtcpRemotePort, int rtcpLocalPort, int portRange,
  76.                     RtpPayloadType apiPayloadType = rtpPayloadPCMU,
  77.                     RtpPayloadType networkPayloadType = rtpPayloadPCMU,
  78.                     int jitterNew = 5);
  79.         /// consturctor init (don't call this function)
  80.         void constructRtpSession (const char* remoteHost, int remotePort,
  81.                                   int localPort, int rtcpRemotePort, int rtcpLocalPort,
  82.                                   int portRange, RtpPayloadType apiPayloadType,
  83.                                   RtpPayloadType networkPayloadType, int jitterNew);
  84.         ///
  85.         ~RtpSession ();
  86.         /// reserves a rtp port by instantiating a RtpReceiver object
  87.         int reserveRtpPort(int localMin = -1, int localMax = -1);
  88.         /// release the rtp port
  89.         int releaseRtpPort();
  90.         /// reserves a rtcp port by instantiating a RtcpReceiver object
  91.         int reserveRtcpPort(int localPort, int portRange = 0);
  92.         /// release the rtcp port
  93.         int releaseRtcpPort();
  94.         /**@name Session Functions
  95.          *  Being in a particular state disables some functions.  For example,
  96.          *  in recvonly state, the transmit function will do nothing.
  97.          *  Availiable state are listed in rtpTyes.h
  98.          **/
  99.         void setSessionState (RtpSessionState state);
  100.         ///
  101.         RtpSessionState getSessionState ();
  102.         /// set receivers
  103.         int setReceiver ( int localMinPort, int rtcpLocalPort, int portRange,
  104.                           RtpPayloadType apiFormat, RtpPayloadType networkFormat,
  105.                           int jitterNew = 5 );
  106.         /// set transmitters
  107.         int setTransmiter ( const char* remoteHost, int remotePort,
  108.                             int rtcpRemotePort, RtpPayloadType apiFormat,
  109.                             RtpPayloadType networkFormat );
  110.         ///
  111.         void setApiFormat (RtpPayloadType type, int size, int packetSize = 0);
  112.         void setNetworkFormat (RtpPayloadType type, int size, int packetSize = 0);
  113.         /// size is in number of samples
  114.         void setApiPktSampleSize (int size);
  115.         void setNetworkPktSampleSize (int size);
  116.         void setApiPktSize (int size);
  117.         void setNetworkPktSize (int size);
  118.         ///
  119.         int getNetworkPktSampleSize ();
  120.         int getApiPktSampleSize ();
  121.         ///
  122.         int getPacketSent ();
  123.         ///
  124.         int getByteSent ();
  125.         ///
  126.         int getPacketReceived ();
  127.         ///
  128.         int getByteReceived ();
  129.         ///
  130.         int getPacketLost ();
  131.         ///
  132.         int getJitter ();
  133.         ///
  134.         int getLatency ();
  135.         /// not implemented
  136.         //void setTypeOfService (int service);
  137.         /// not implemented
  138.         //int getTypeOfService ();
  139.         //@}
  140.         /** Creates an RTP packet for transmitter
  141.          *  @param no_samples number of samples for specified payload
  142.          *  @param padbyteSize always 0, not fully implemented
  143.          *  @param csrc_count number of contributing sources to packet
  144.          **/
  145.         RtpPacket* createPacket (int padbyteSize = 0, int csrcCount = 0);
  146.         /** Gets the previous packet's RTP sequence number 
  147.          **/
  148.         RtpSeqNumber getPrevSequence();
  149.         /** Gets the previous packet's RTP timestamp
  150.          **/
  151.         RtpTime getPrevRtpTime();
  152.         // set marker flago next packet
  153.         void setMarkerOnce();
  154.         /** Transmits packet onto network
  155.          *  @return -1 error, otherwise size sent on sucess
  156.          **/
  157.         int transmit (RtpPacket* packet);
  158.         int transmitRaw (char* inbuffer, int len);
  159.         /** Transmit DTMF event in RTP on network
  160.          *  @return -1 error, otherwise 0
  161.          **/
  162.         int transmitEvent( int event );
  163.         /** Receives RTP packet information from network
  164.          *  fn will deallocate packet on next call
  165.          *  @return -1 error in packet or network, 0 no packet received,
  166.          *             otherwise bytes receeived
  167.          **/
  168.         RtpPacket* receive ();
  169.         RtpPacket* getPacket();
  170.         /** Checks RTCP interval, transmits and receeives if neccessary
  171.          **/
  172.         void processRTCP();
  173.         /** Create and transmit compound RTCP packet
  174.          *  @return -1 failure, else number of bytes sent on success
  175.          **/
  176.         int transmitRTCP ();
  177.         /** Create and transmit a SR and BYE compound packet
  178.          *  @return -1 failure, else number of bytes sent on success
  179.          **/
  180.         int transmitRTCPBYE ();
  181.         /** receive and read compound RTCP packet
  182.          *  @eturn 0 if no packet received, else 1 on sucess
  183.          **/
  184.         int receiveRTCP ();
  185.         /** Check if time to send RTCP packet
  186.          *  return: 1 = time to send RTCP packet
  187.          **/
  188.         int checkIntervalRTCP ();
  189.         /// RTP transmitter
  190.         RtpTransmitter* getRtpTran ()
  191.         {
  192.             return tran;
  193.         }
  194.         /// RTP recevier
  195.         RtpReceiver* getRtpRecv ()
  196.         {
  197.             return recv;
  198.         }
  199.         /// RTCP transmitter
  200.         RtcpTransmitter* getRtcpTran ()
  201.         {
  202.             return rtcpTran;
  203.         }
  204.         /// RTCP receiver
  205.         RtcpReceiver* getRtcpRecv ()
  206.         {
  207.             return rtcpRecv;
  208.         }
  209.         /// Rtp event class
  210.         RtpEvent _rtpEvent;
  211.         /// DTMF callback function
  212.         void setDTMFInterface ( DTMFInterface* t );
  213.         void unsetDTMFInterface ( DTMFInterface* t );
  214.     private:
  215.         /// Internal pointer to RTP transmitter
  216.         RtpTransmitter* tran;
  217.         /// Internal pointer to RTP receiver
  218.         RtpReceiver* recv;
  219.         /// Internal pointer to RTCP transmitter
  220.         RtcpTransmitter* rtcpTran;
  221.         /// Internal pointer to RTCP receiver
  222.         RtcpReceiver* rtcpRecv;
  223.         /// session state
  224.         RtpSessionState sessionState;
  225.         /// session error code;
  226.         RtpSessionError sessionError;
  227. };
  228. #endif // RTPSESSION_HXX