⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtptransmitter.h

📁 symbian平台S60_2nd_FP2_SC rtp实现
💻 H
字号:
#ifndef RTPTRANSMITTER_HXX
#define RTPTRANSMITTER_HXX


#include "rtpTypes.h"
#include "socketudp.h"

#include "socketudp.h"
#include "NtpTime.h"

#include "NetworkAddress.h"
#include "rtpCodec.h"

class RtpPacket;
class RtpReceiver;
class RtpCodec;

/// Data structure for RTP Transmitter
class RtpTransmitter
{
    public:

        /// constructor using port range
        RtpTransmitter (CSocketUdp* udp,
						const char* remoteHost, 
						int remoteMinPort,
                        int remoteMaxPort,
                        RtpPayloadType apiFormat = rtpPayloadPCMU,
                        RtpPayloadType networkFormat = rtpPayloadPCMU,
                        RtpReceiver* receivePort = 0);

        /// construtor using specified port
        RtpTransmitter (CSocketUdp* udp,
						const char* remoteHost, 
						int remotePort = 5000,
                        RtpPayloadType apiFormat = rtpPayloadPCMU,
                        RtpPayloadType networkFormat = rtpPayloadPCMU,
                        RtpReceiver* receiver = 0);

        /// consturctor init (don't call this function)
        void constructRtpTransmitter (RtpPayloadType apiFormat,
                                      RtpPayloadType networkFormat);
        ///
        ~RtpTransmitter ();

        /// Creates a packet with transmitter's payload type and SRC number
        RtpPacket* createPacket (int npadSize = 0, int csrc_count = 0);

        ///
        int transmit (RtpPacket* packet, bool eventFlag = false);
        ///
        int transmitRaw (char* buffer, int data_len);

        ///
        RtpSrc getSSRC ()
        {
            return ssrc;
        }

        ///
        int getPacketSent ()
        {
            return packetSent;
        }
        ///
        int getPayloadSent ()
        {
            return payloadSent;
        }

        ///
        RtpSeqNumber getPrevSequence ()
        {
            return prevSequence;
        }


        ///
        RtpTime getPrevRtpTime ()
        {
            return prevRtpTime;
        }


        ///
        void setMarkerOnce()
        {
            markerOnce = true;
        }

        ///
        void setApiFormat (RtpPayloadType type, int no_samples, int packetSize = 0,
                           RtpPacket* p = NULL, bool print = true);
        ///
        int getApiPktSampleSize ()
        {
            return api_pktSampleSize;
        }
        ///
        void setApiPktSize (int size)
        {
            api_pktSampleSize = size;
        }
        ///
        void setNetworkFormat (RtpPayloadType type, int no_samples, int packetSize = 0,
                               RtpPacket* p = NULL, bool print = true);
        ///
        int getNetworkPktSampleSize ()
        {
            return network_pktSampleSize;
        }
        ///
        void setNetworkPktSize (int size)
        {
            network_pktSampleSize = size;
        }

        ///
        void setCodecString (const char* codecStringInput);

        /// transmitter error code;
        RtpTransmitterError transmitterError;

        /// get ptr of my UdpStack
        CSocketUdp* getUdpStack()
        {
            return myStack;
        }

        ///
        NetworkAddress* getRemoteAddr ()
        {
            return &remoteAddr;
        }

        ///
        void setRemoteAddr ( NetworkAddress& theAddr) ;
	
    private:
        /// outgoing buffer size, including RTP header
 //       static const int OUT_BUFFER_SIZE;
        /// local SRC number
        RtpSrc ssrc;
        /// inital NTP time
        NtpTime seedNtpTime;
        /// inital RTP time
        RtpTime seedRtpTime;
        /// RTP time of previous packet
        RtpTime prevRtpTime;
        /// NTP time of previous packet
        NtpTime prevNtpTime;
        /// previous packet's sequence
        RtpSeqNumber prevSequence;

        /// numbers of packet sent
        int packetSent;
        /// total bytes of payload sent
        int payloadSent;

        /// allow RTCP stack to probe for information
        friend class RtcpTransmitter;
        /// allow RTCP stack to probe for information
        friend class RtcpReceiver;

        /// format of payload for stack
        RtpPayloadType apiFormat;
        RtpPayloadType networkFormat;
        /// codecString in case of dynamic payload type
        char codecString[32];
        /// number of samples per RTP packet on api (typical 160 or 240)
        int api_pktSampleSize;
        int network_pktSampleSize;
        /// number of bytes per sample  (typical 1 or 2, used for endian conversion)
        int apiFormat_perSampleSize;
        int networkFormat_perSampleSize;
        /// payload specific sample rate
        int apiFormat_clockRate;
        int networkFormat_clockRate;
        /// payload sizes
        int apiFormat_payloadSize;   // api_pktSampleSize*apiFormat_perSampleSize
        int networkFormat_payloadSize;   // network_pktSampleSize * networkFormat_perSampleSize

        /// marker once
        bool markerOnce;

        /// my UDP stack
    //    UdpStack* myStack;
		CSocketUdp *myStack;
        ///
        bool freeStack;

        /// buffer outgoing rtp pkt to network
        char outBuff[OUT_BUFFER_SIZE];
        int outPos;
        int recPos;

        NetworkAddress remoteAddr;
};


#endif // RTPTRANSMITTER_HXX

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -