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

📄 rtsptran.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    {	return;    }    RTSPStreamData* pStreamData = m_pStreamHandler->firstStreamData();    HX_ASSERT(pStreamData);    m_bSourceDone = TRUE;    while(pStreamData)    {	if (pStreamData->m_streamNumber == uStreamNumber)	{	    pStreamData->m_bReceivedAllPackets = TRUE;	}	else if (!pStreamData->m_bReceivedAllPackets)	{	    m_bSourceDone = FALSE;	    return;	}	pStreamData = m_pStreamHandler->nextStreamData();    }    /* We have received all the packets... Tell the reposnse object */    if (!m_bIsSource)    {	m_pResp->OnSourceDone();    }}    void      RTSPTransport::HandleBufferError(){    if (m_pResp)    {	m_pResp->OnProtocolError(HXR_BUFFERING);    }}RTSPResendBuffer*RTSPTransport::getResendBuffer(UINT16 uStreamNumber){    return m_pStreamHandler->getResendBuffer(uStreamNumber);}HX_RESULTRTSPTransport::initializeStatistics(    UINT32 ulRegistryID){    m_bIsInitialized = TRUE;    if (m_bIsSource)    {	m_ulRegistryID = ulRegistryID;    }    else    {	// XXX HP	// rather than create a new copy of STREAM_STATS, we simply	// obtain the same STREAM_STATS* from RTSPProtocol via SetStatistics().	// this could save us on both the memory and several ms during the startup/*	IHXBuffer* pParentName = NULL;	CHAR RegKeyName[MAX_DISPLAY_NAME] = {0};	RTSPStreamData* pStreamData = m_pStreamHandler->firstStreamData();	ASSERT(pStreamData);	if (!m_pRegistry)	{	    return HXR_FAIL;	}	HX_RESULT result = m_pRegistry->GetPropName(ulRegistryID, pParentName);	if (result != HXR_OK)	{	    return result;	}	// create registry entries of each stream	while (pStreamData)	{	    UINT16 uStreamNumber = pStreamData->m_streamNumber;	    sprintf(RegKeyName, "%s.Stream%d", pParentName->GetBuffer(),	                                       uStreamNumber);		    UINT32 uStreamId = m_pRegistry->GetId(RegKeyName);	    // create stream reg key if it has not been created	    // by the source yet	    if (!uStreamId)	    {		return HXR_FAIL;	    }	    pStreamData->m_pStreamStats = new STREAM_STATS(m_pRegistry,	                                                   uStreamId);							   	    pStreamData = m_pStreamHandler->nextStreamData();	}	pParentName->Release();*/    }    return HXR_OK;}HX_RESULTRTSPTransport::SetStatistics(UINT16 uStreamNumber, STREAM_STATS* pStats){    HX_RESULT	    rc = HXR_OK;#if defined(HELIX_FEATURE_STATS) && defined(HELIX_FEATURE_REGISTRY)    RTSPStreamData* pStreamData = NULL;    if (!m_pStreamHandler)    {	rc = HXR_FAILED;	goto cleanup;    }    pStreamData = m_pStreamHandler->getStreamData(uStreamNumber);    if (!pStreamData)    {	rc = HXR_FAILED;	goto cleanup;    }    pStreamData->m_pStreamStats = pStats;cleanup:#endif /* HELIX_FEATURE_STATS && HELIX_FEATURE_REGISTRY */    return rc;}HX_RESULT RTSPTransport::updateStatistics(BOOL bUseRegistry){    m_bIsUpdated = TRUE;#if defined(HELIX_FEATURE_STATS) && defined(HELIX_FEATURE_REGISTRY)    if (m_bIsSource)    {	RTSPStreamData* pStreamData = m_pStreamHandler->firstStreamData();	if (!pStreamData)	{	    return HXR_FAIL;	}	/*	 * XXXGH...streams are managed by the PPM and should not show up	 *         under the transport	 */	while (pStreamData)	{	    UINT32 ulResendSuccess = 0;	    UINT32 ulResendFailure = 0;	    if (pStreamData->m_pResendBuffer)	    {		pStreamData->m_pResendBuffer->UpdateStatistics(ulResendSuccess,		                                               ulResendFailure);	    }	    m_ulTotalSuccessfulResends += ulResendSuccess;	    m_ulTotalFailedResends += ulResendFailure;	    pStreamData = m_pStreamHandler->nextStreamData();	}        m_ulSendingTime = CALCULATE_ELAPSED_TICKS(m_ulStartTime, HX_GET_TICKCOUNT()) / 1000;	IHXBuffer* pName;	if (bUseRegistry        &&  m_pRegistry         &&  HXR_OK == m_pRegistry->GetPropName(m_ulRegistryID, pName))	{	    char str[512]; /* Flawfinder: ignore */	    const char* name = (const char*)pName->GetBuffer();	    char pTemp[32]; /* Flawfinder: ignore */	    i64toa(m_lBytesSent, pTemp, 10);	    sprintf(str, "%-.400s.PacketsSent", name); /* Flawfinder: ignore */	    m_pRegistry->AddInt(str, m_ulPacketsSent);	    sprintf(str, "%-.400s.BytesSent", name); /* Flawfinder: ignore */	    m_pRegistry->AddInt(str, INT64_TO_INT32(m_lBytesSent));	    // Add the total bytes sent as a string because we don't want	    // to have to truncate the INT64 value that is storing it	    sprintf(str, "%-.400s.TotalBytesSent", name); /* Flawfinder: ignore */	    IHXBuffer* pBuffer = new CHXBuffer();	    pBuffer->AddRef();	    pBuffer->Set((UCHAR*)pTemp, strlen(pTemp) + 1);	    m_pRegistry->AddStr(str, pBuffer);	    HX_RELEASE(pBuffer);	    sprintf(str, "%-.400s.SendingTime", name); /* Flawfinder: ignore */	    m_pRegistry->AddInt(str, m_ulSendingTime); 	    sprintf(str, "%-.400s.ResendSuccess", name); /* Flawfinder: ignore */	    m_pRegistry->AddInt(str, m_ulTotalSuccessfulResends);	    sprintf(str, "%-.400s.ResendFailure", name); /* Flawfinder: ignore */	    m_pRegistry->AddInt(str, m_ulTotalFailedResends);	    pName->Release();	}    }    else    {	ULONG32 ulNormal = 0;	ULONG32 ulReceived = 0;	ULONG32 ulLost = 0;	ULONG32 ulLate = 0;	ULONG32 ulTotal = 0;	ULONG32 ulResendRequested = 0;	ULONG32 ulResendReceived = 0;	ULONG32 ulAvgBandwidth = 0;	ULONG32 ulCurBandwidth = 0;	UINT32	ulTotal30 = 0;	UINT32	ulLost30 = 0;	UINT32  ulDuplicate = 0;	UINT32	ulOutOfOrder = 0;	RTSPStreamData* pStreamData = m_pStreamHandler->firstStreamData();	if (!pStreamData)	{	    return HXR_FAIL;	}	while (pStreamData)	{	    STREAM_STATS* pStreamStats = pStreamData->m_pStreamStats;            if (!pStreamStats || !pStreamStats->m_bInitialized)	    {		goto updateContinue;	    }	    pStreamData->m_pTransportBuffer->UpdateStatistics(ulNormal,	                                                      ulLost,	                                                      ulLate,	                                                      ulResendRequested,	                                                      ulResendReceived,	                                                      ulAvgBandwidth,	                                                      ulCurBandwidth,							      ulTotal30,							      ulLost30,							      ulDuplicate,							      ulOutOfOrder);	                  	    ulReceived = ulNormal + ulResendReceived;	    ulTotal = ulReceived + ulLost + ulLate;	    pStreamStats->m_pNormal->SetInt((INT32)ulNormal);	    pStreamStats->m_pRecovered->SetInt((INT32)ulResendReceived);	    pStreamStats->m_pReceived->SetInt((INT32)ulReceived);	    pStreamStats->m_pLost->SetInt((INT32)ulLost);	    pStreamStats->m_pLate->SetInt((INT32)ulLate);	    pStreamStats->m_pDuplicate->SetInt((INT32)ulDuplicate);	    pStreamStats->m_pOutOfOrder->SetInt((INT32)ulOutOfOrder);	    pStreamStats->m_pTotal->SetInt((INT32)ulTotal);	    pStreamStats->m_pLost30->SetInt((INT32)ulLost30);	    pStreamStats->m_pTotal30->SetInt((INT32)ulTotal30);	    pStreamStats->m_pResendRequested->SetInt((INT32)ulResendRequested);	    pStreamStats->m_pResendReceived->SetInt((INT32)ulResendReceived);	    pStreamStats->m_pAvgBandwidth->SetInt((INT32)ulAvgBandwidth);	    pStreamStats->m_pCurBandwidth->SetInt((INT32)ulCurBandwidth);updateContinue:	    pStreamData = m_pStreamHandler->nextStreamData();	}    }#endif /* HELIX_FEATURE_STATS && HELIX_FEATURE_REGISTRY */    return HXR_OK;}HX_RESULT RTSPTransport::UpdateRegistry(UINT32 ulStreamNumber,			      UINT32 ulRegistryID){    if (m_bIsSource)    {	m_ulRegistryID = ulRegistryID;    }    else    {	// XXX HP	// rather than create a new copy of STREAM_STATS, we simply	// obtain the same STREAM_STATS* from RTSPProtocol via SetStatistics().	// this could save us on both the memory and several ms during the startup/*	if (!m_pRegistry)	{	    return HXR_FAIL;	}	RTSPStreamData* pStreamData = m_pStreamHandler->firstStreamData();	while (pStreamData)	{	    if (pStreamData->m_streamNumber == (UINT16)ulStreamNumber)	    {		HX_DELETE(pStreamData->m_pStreamStats);		pStreamData->m_pStreamStats = new STREAM_STATS(m_pRegistry,							       ulRegistryID);		break;	    }							   	    pStreamData = m_pStreamHandler->nextStreamData();	}*/    }    return HXR_OK;}RTSPTransportBuffer*RTSPTransport::getTransportBuffer(UINT16 uStreamNumber){    if (!m_pStreamHandler)    {	return NULL;    }    RTSPStreamData* pStreamData;	        pStreamData = m_pStreamHandler->getStreamData(uStreamNumber);    if (!pStreamData)    {	return NULL;    }    return pStreamData->m_pTransportBuffer;}HX_RESULTRTSPTransport::playReset(){    m_bSourceDone = FALSE;    if(m_pStreamHandler)    {	RTSPStreamData* pStreamData = m_pStreamHandler->firstStreamData();	while(pStreamData)	{	    if (m_bIsSource)	    {		pStreamData->m_packetSent = FALSE;	    }	    else	    {		pStreamData->m_pTransportBuffer->Reset();		pStreamData->m_bReceivedAllPackets = FALSE;	    }	    pStreamData = m_pStreamHandler->nextStreamData();	}    }    return HXR_OK;}HX_RESULTRTSPTransport::pauseBuffers(){    if (m_pStreamHandler)    {	RTSPStreamData* pStreamData = m_pStreamHandler->firstStreamData();	ASSERT(pStreamData);	while(pStreamData)	{	    pStreamData->m_pTransportBuffer->Pause();	    pStreamData = m_pStreamHandler->nextStreamData();	}    }    return HXR_OK;}HX_RESULTRTSPTransport::resumeBuffers(){    m_bIsReceivedData = FALSE;    if (m_pStreamHandler)    {	RTSPStreamData* pStreamData = m_pStreamHandler->firstStreamData();	ASSERT(pStreamData);	while(pStreamData)	{	    pStreamData->m_pTransportBuffer->Resume();	    pStreamData = m_pStreamHandler->nextStreamData();	}    }    return HXR_OK;}HX_RESULTRTSPTransport::setFirstSeqNum(UINT16 uStreamNumber, UINT16 uSeqNum){    RTSPStreamData* pStreamData;    pStreamData = m_pStreamHandler->getStreamData(uStreamNumber);    if(pStreamData)    {	if (m_bIsSource)	{	    	    pStreamData->m_seqNo = uSeqNum;	    if(pStreamData->m_pResendBuffer)	    {		pStreamData->m_pResendBuffer->SetFirstSequenceNumber(uSeqNum);	    }	}	else	{	    if (!pStreamData->m_pTransportBuffer)	    {		return HXR_FAIL;	    }	    if (!m_bMulticast)	    {		pStreamData->m_lastSeqNo = uSeqNum;    		pStreamData->m_pTransportBuffer->Init(uSeqNum);	    }	}    }    return HXR_OK;}HX_RESULTRTSPTransport::Init(IUnknown* pContext){    HX_RESULT			hresult;        if (!m_pContext)    {	m_pContext = pContext;	m_pContext->AddRef();    }    hresult = pContext->QueryInterface(IID_IHXCommonClassFactory,				       (void**)&m_pCommonClassFactory);    if (HXR_OK != hresult)    {	return hresult;    }					        hresult = pContext->QueryInterface(IID_IHXScheduler,                                       (void**)&m_pScheduler);    if (HXR_OK != hresult)    {	DPRINTF(D_INFO, ("could not get scheduler...\n"));	return hresult;    }    pContext->QueryInterface(IID_IHXRegistry, (void**)&m_pRegistry);    pContext->QueryInterface(IID_IHXInternalReset,	                               (void**)&m_pInternalReset);    pContext->QueryInterface(IID_IHXPlayerState,	                               (void**)&m_pPlayerState);    pContext->QueryInterface(IID_IHXSourceBufferingStats2,			     (void**)&m_pSrcBufferStats);#ifdef RDT_MESSAGE_DEBUG    IHXPreferences* pPreferences = NULL;        if (pContext &&	(HXR_OK == pContext->QueryInterface(IID_IHXPreferences,                                            (void**) &pPreferences)))    {	IHXBuffer* pBuffer = NULL;        ReadPrefBOOL(pPreferences, "RDTMessageDebug", m_bRDTMessageDebug);	if (m_bRDTMessageDebug)	{	    if (HXR_OK == pPreferences->ReadPref("RDTMessageDebugFile", pBuffer))	    {		if (pBuffer->GetSize() <= 0)		{		    // no file name, no log		    m_bRDTMessageDebug = FALSE;		}		else		{		    m_RDTmessageDebugFileName = (const char*) pBuffer->GetBuffer();		}				    }            HX_RELEASE(pBuffer);	}    }    HX_RELEASE(pPreferences);#endif	// RDT_MESSAGE_DEBUG        return HXR_OK;}HX_RESULTRTSPTransport::SetResendBufferDepth(UINT32 uMilliseconds){    RTSPStreamData* pStreamData = m_pStreamHandler->firstStreamData();    ASSERT(pStreamData);    while (pStreamData)    {	if (m_bIsSource)	{	    if (pStreamData->m_pResendBuffer)	    {		pStreamData->m_pResendBuffer->SetBufferDepth(uMilliseconds);	    }	}	else	{	    if (pStreamData->m_pTransportBuffer)	    {		pStreamData->m_pTransportBuffer->SetBufferDepth(uMilliseconds);	    }	}	pStreamData = m_pStreamHandler->nextStreamData();    }    return HXR_OK;}#ifdef RDT_MESSAGE_DEBUGvoid RTSPTransport::RDTmessageFormatDebugFileOut(const char* fmt, ...){    if(m_bRDTMessageDebug)    {        char buf[4096]; /* Flawfinder: ignore */	va_list args;	va_start(args, fmt);	FILE* fp = fopen((const char*)m_RDTmessageDebugFileName, "a");	if (fp)	{	    vsprintf(buf, fmt, args);	    fprintf(fp, "%s\n", buf);	    fclose(fp);	}	va_end(args);    }}#endif	// RDT_MESSAGE_DEBUG

⌨️ 快捷键说明

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