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

📄 rtptran.h

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 H
📖 第 1 页 / 共 2 页
字号:

protected:
    class KeepAliveCB : public IHXCallback
    {
    public:
	KeepAliveCB(RTPUDPTransport* pTransport);

        /*
         *      IUnknown methods
         */
        STDMETHOD(QueryInterface)       (THIS_
                                        REFIID riid,
                                        void** ppvObj);

        STDMETHOD_(ULONG32,AddRef)      (THIS);

        STDMETHOD_(ULONG32,Release)     (THIS);

        /*
         *      IHXCallback methods
         */
        STDMETHOD(Func)                 (THIS);

    private:
	RTPUDPTransport*		m_pTransport;
        LONG32              		m_lRefCount;
        ~KeepAliveCB();
        PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
    };
    friend class KeepAliveCB;

    HX_RESULT onNATKeepAlive();

private:
    HX_RESULT writePacket		(IHXBuffer* pSendBuffer);

    IHXUDPSocket*              	m_pUDPSocket;
    UINT32                      	m_foreignAddr;
    UINT16                      	m_foreignPort;
//    RTCPUDPTransport*			m_pRTCPTran;       

    CHXKeepAlive m_keepAlive;
    UINT16       m_keepAliveSeq;  // Sequence # for keepalive packets

    UINT32	    m_ulCurrentMulticastAddress;
    UINT32	    m_ulCurrentMulticastPort;
    IHXUDPSocket*   m_pMCastUDPSocket;

    friend class RTCPBaseTransport;
    friend class RTCPUDPTransport;
};

inline IHXUDPSocket*
RTPUDPTransport::getUDPSocket()
{
    return m_pUDPSocket;
}

inline IHXUDPSocket*
RTPUDPTransport::getMulticastSocket()
{
    return m_pMCastUDPSocket;
}

class RTPTCPTransport: public RTPBaseTransport
{
public:
    RTPTCPTransport			(BOOL bIsSource);
    ~RTPTCPTransport    		();
    void Done				();
    
    RTSPTransportTypeEnum tag		();
    HX_RESULT init			(IUnknown* pContext,
			 		IHXTCPSocket* pSocket,
			 		IHXRTSPTransportResponse* pResp);
    void setInterleaveChannel		(INT8 tcpInterleave)
    {	
	m_tcpInterleave = tcpInterleave;
    }
    HX_RESULT sendPacket		(BasePacket* pPacket);

//    HX_RESULT streamDone		(UINT16 streamNumber);    

//    void setRTCPTransport		(RTCPTCPTransport* pRTCPTran);
 protected:
    IHXTCPSocket* 			m_pTCPSocket;
    
private:
    HX_RESULT writePacket         	(IHXBuffer* pBuf);

    INT8				m_tcpInterleave;

    friend class RTCPBaseTransport;
    friend class RTCPTCPTransport;
};


/******************************************************************************
*   RTCP RTCP RTCP RTCP RTCP
******************************************************************************/
class RTCPBaseTransport: public RTSPTransport,
			 public IHXQoSSignalSourceResponse
{
public:
    RTCPBaseTransport			(BOOL bIsSender);
    ~RTCPBaseTransport			();
    STDMETHOD(QueryInterface)           (THIS_
                                        REFIID riid,
                                        void** ppvObj);
    STDMETHOD_(ULONG32,AddRef)		(THIS);
    STDMETHOD_(ULONG32,Release)		(THIS);
    void Done				();

    RTSPTransportTypeEnum tag		()
    {
	HX_ASSERT(!"don't call this");
	return RTSP_TR_NONE;
    }
    HX_RESULT sendPacket		(BasePacket* pPacket)
    {
	HX_ASSERT(!"don't call this");
	return HXR_UNEXPECTED;
    }
    HX_RESULT handlePacket		(IHXBuffer* pBuffer);
    HX_RESULT streamDone		(UINT16 streamNumber)
    {
	HX_ASSERT(!"don't call this");
	return HXR_UNEXPECTED;
    }

    void addStreamInfo(RTSPStreamInfo* pStreamInfo,
		       UINT32 ulBufferDepth = TRANSPORT_BUF_DURATION_UNDEF);

    void setSSRC(UINT32 ulSSRC);

    HX_RESULT init				();
    void setSessionID		        (const char* pSessionID);

    void Reset(){}
    void Restart(){}

    HX_RESULT SetTSConverter(CHXTimestampConverter::ConversionFactors conversionFactors);

    CHXTimestampConverter* GetTSConverter(void)    { return m_pTSConverter; }

    class ReportCallback : public IHXCallback
    {
    public:
	ReportCallback			(RTCPBaseTransport* pTransport);

        /*
         *      IUnknown methods
         */
        STDMETHOD(QueryInterface)       (THIS_
                                        REFIID riid,
                                        void** ppvObj);

        STDMETHOD_(ULONG32,AddRef)      (THIS);

        STDMETHOD_(ULONG32,Release)     (THIS);

        /*
         *      IHXCallback methods
         */
        STDMETHOD(Func)                 (THIS);

    private:
	RTCPBaseTransport*		m_pTransport;
        LONG32              		m_lReportRefCount;
        ~ReportCallback			();
        PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
    };
    friend class ReportCallback;

    virtual HX_RESULT reflectRTCP		(IHXBuffer* pSendBuf) = 0;
    virtual HX_RESULT sendSenderReport		() = 0;
    virtual HX_RESULT sendReceiverReport	() = 0;
    virtual HX_RESULT sendBye			() = 0;

    // IHXQoSSignalSourceResponse
    STDMETHOD (SignalBusReady)(THIS_ HX_RESULT hResult, IHXQoSSignalBus* pBus, 
			       IHXBuffer* pSessionId);

protected:
    /* caller is responsible for freeing pSendBuf */
    HX_RESULT makeSenderReport		(REF(IHXBuffer*) pSendBuf);
    HX_RESULT makeReceiverReport	(REF(IHXBuffer*) pSendBuf);
    HX_RESULT makeBye			(REF(IHXBuffer*) pSendBuf);

    HX_RESULT startScheduler		();
    HX_RESULT stopScheduler		();
    BOOL      isShedulerStarted		(void)	{ return m_bSchedulerStarted; }
    void      scheduleNextReport	();
    
    RTPBaseTransport*			m_pDataTransport;
    // XXXGo
    // make sure stream number that RTCP is using is the same as the one
    // in RTP
    UINT16				m_streamNumber;
    INT32				m_lRefCount;
    BOOL				m_bSendBye;

    BOOL				m_bSendReport;
    ReportCallback*			m_pReportCallback;
    BOOL				m_bCallbackPending;
    CallbackHandle			m_reportTimeoutID;
    BOOL				m_bSchedulerStarted;
    BOOL                                m_bSendRTCP;

    BOOL                                m_bSSRCDetermined;
    UINT32                              m_ulSSRCDetermined;

    // a random number for CNAME...
    BYTE*				m_pcCNAME;

    /* this class does everything for RTCP */
    /* and pointing to the same instance that RTPBaseTransport has */
    ReportHandler*			m_pReportHandler;

    CHXTimestampConverter*		m_pTSConverter;

    /* For placing recevier reports on QoS Signal Bus */
    IHXQoSSignalBus*                    m_pSignalBus;
    IHXQoSSignal*                       m_pQoSSignal_RR;
    IHXQoSSignal*                       m_pQoSSignal_APP;
    IHXBuffer*                          m_pSessionId;

    friend class RTPBaseTransport;
    friend class RTPUDPTransport;
    friend class RTPTCPTransport;
};

class RTCPUDPTransport: public RTCPBaseTransport
{
public:
    RTCPUDPTransport			(BOOL bIsSender);
    ~RTCPUDPTransport			();
    void Done				();

    HX_RESULT init			(IUnknown* pContext,
    					IHXUDPSocket* pSocket,
					RTPUDPTransport* pDataTransport,
					IHXRTSPTransportResponse* pResp,					
					UINT16 streamNumber);
    RTSPTransportTypeEnum tag		();
    HX_RESULT streamDone		(UINT16 streamNumber);
    void setForeignAddress		(UINT32 foreignAddr,
    					UINT16 foreignPort);
    IHXUDPSocket* getUDPSocket	();

    HX_RESULT handlePacket(IHXBuffer* pBuffer);

    void            JoinMulticast(UINT32 ulAddress, UINT32 ulPort, IHXUDPSocket* pUDP);
    IHXUDPSocket*   getMulticastSocket(void);

protected:
    class KeepAliveCB : public IHXCallback
    {
    public:
	KeepAliveCB(RTCPUDPTransport* pTransport);

        /*
         *      IUnknown methods
         */
        STDMETHOD(QueryInterface)       (THIS_
                                        REFIID riid,
                                        void** ppvObj);

        STDMETHOD_(ULONG32,AddRef)      (THIS);

        STDMETHOD_(ULONG32,Release)     (THIS);

        /*
         *      IHXCallback methods
         */
        STDMETHOD(Func)                 (THIS);

    private:
	RTCPUDPTransport*		m_pTransport;
        LONG32              		m_lRefCount;
        ~KeepAliveCB();
        PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
    };
    friend class KeepAliveCB;

    HX_RESULT onNATKeepAlive();

private:
    HX_RESULT reflectRTCP		(IHXBuffer* pSendBuf);
    HX_RESULT sendSenderReport		();
    HX_RESULT sendReceiverReport	();
    HX_RESULT sendBye			();

    
    IHXUDPSocket*   m_pUDPSocket;
    UINT32          m_foreignAddr;
    UINT16          m_foreignPort;

    CHXKeepAlive    m_keepAlive;

    UINT32	    m_ulCurrentMulticastAddress;
    UINT32	    m_ulCurrentMulticastPort;
    IHXUDPSocket*   m_pMCastUDPSocket;

    friend class RTPBaseTransport;
    friend class RTPUDPTransport;
};

inline IHXUDPSocket*
RTCPUDPTransport::getUDPSocket()
{
    return m_pUDPSocket;
}

inline IHXUDPSocket*
RTCPUDPTransport::getMulticastSocket()
{
    return m_pMCastUDPSocket;
}

class RTCPTCPTransport: public RTCPBaseTransport
{
public:
    RTCPTCPTransport			(BOOL bIsSender);
    ~RTCPTCPTransport			();
    void Done				();

    HX_RESULT init			(IUnknown* pContext,
    					IHXTCPSocket* pSocket,
					RTPTCPTransport* pDataTransport,
					IHXRTSPTransportResponse* pResp,
					UINT16 streamNumber);
    void setInterleaveChannel		(INT8 tcpInterleave)
    {
	m_tcpInterleave = tcpInterleave;
    }
    RTSPTransportTypeEnum tag		();
    HX_RESULT streamDone		(UINT16 streamNumber);

private:
    HX_RESULT reflectRTCP		(IHXBuffer* pSendBuf);
    HX_RESULT sendSenderReport		();
    HX_RESULT sendReceiverReport	();
    HX_RESULT sendBye			();
    HX_RESULT writePacket		(IHXBuffer* pBuf);
    
    IHXTCPSocket*			m_pTCPSocket;
    INT8				m_tcpInterleave;
//    friend class RTPBaseTransport;
//    friend class RTPTCPTransport;
};

#endif /* ndef _RTPTRAN_H_ */

⌨️ 快捷键说明

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