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

📄 sdprendr.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// *** IHXRenderer methods ***///////////////////////////////////////////////////////////////////////////  Method://	IHXRenderer::StartStream//  Purpose://	Called by client engine to inform the renderer of the stream it//	will be rendering. The stream interface can provide access to//	its source or player. This method also provides access to the //	primary client controller interface.//STDMETHODIMP CSDPRenderer::StartStream(    IHXStream*	    pStream,    IHXPlayer*	    pPlayer){    HX_RESULT			rc = HXR_OK;    m_pStream  = pStream;    m_pStream->AddRef();    m_pPlayer  = pPlayer;    m_pPlayer->AddRef();    return rc;}///////////////////////////////////////////////////////////////////////////  Method://	IHXRenderer::EndStream//  Purpose://	Called by client engine to inform the renderer that the stream//	is was rendering is closed.//STDMETHODIMP CSDPRenderer::EndStream(){    Cleanup();        return HXR_OK;}///////////////////////////////////////////////////////////////////////////  Method://	IHXRenderer::OnHeader//  Purpose://	Called by client engine when a header for this renderer is //	available. The header will arrive before any packets.//STDMETHODIMP CSDPRenderer::OnHeader(IHXValues* pHeader){        return HXR_OK;}///////////////////////////////////////////////////////////////////////////  Method://	IHXRenderer::OnPacket//  Purpose://	Called by client engine when a packet for this renderer is //	due.//STDMETHODIMP CSDPRenderer::OnPacket(IHXPacket* pPacket, 				    LONG32 lTimeOffset){    HX_RESULT		rc = HXR_OK;    HX_ASSERT(lTimeOffset <= 0);    IHXBuffer* pBuffer = pPacket->GetBuffer();    if(pBuffer)    {	rc = ProcessSDP(pBuffer);    }    HX_RELEASE(pBuffer);    return rc;}///////////////////////////////////////////////////////////////////////////  Method://	IHXRenderer::OnTimeSync//  Purpose://	Called by client engine to inform the renderer of the current//	time relative to the streams synchronized time-line. The //	renderer should use this time value to update its display or//	render it's stream data accordingly.//STDMETHODIMP CSDPRenderer::OnTimeSync(ULONG32 ulTime){    return HXR_OK;}///////////////////////////////////////////////////////////////////////////  Method://	IHXRenderer::OnPreSeek//  Purpose://	Called by client engine to inform the renderer that a seek is//	about to occur. The render is informed the last time for the //	stream's time line before the seek, as well as the first new//	time for the stream's time line after the seek will be completed.//STDMETHODIMP CSDPRenderer::OnPreSeek(ULONG32 ulOldTime, ULONG32 ulNewTime){    return HXR_OK;}///////////////////////////////////////////////////////////////////////////  Method://	IHXRenderer::OnPostSeek//  Purpose://	Called by client engine to inform the renderer that a seek has//	just occured. The render is informed the last time for the //	stream's time line before the seek, as well as the first new//	time for the stream's time line after the seek.//STDMETHODIMP CSDPRenderer::OnPostSeek(ULONG32 ulOldTime, ULONG32 ulNewTime){    return HXR_OK;}///////////////////////////////////////////////////////////////////////////  Method://	IHXRenderer::OnPause//  Purpose://	Called by client engine to inform the renderer that a pause has//	just occured. The render is informed the last time for the //	stream's time line before the pause.//STDMETHODIMP CSDPRenderer::OnPause(ULONG32 ulTime){    return HXR_OK;}///////////////////////////////////////////////////////////////////////////  Method://	IHXRenderer::OnBegin//  Purpose://	Called by client engine to inform the renderer that a begin or//	resume has just occured. The render is informed the first time //	for the stream's time line after the resume.//STDMETHODIMP CSDPRenderer::OnBegin(ULONG32 ulTime){    return HXR_OK;}///////////////////////////////////////////////////////////////////////////  Method://	IHXRenderer::OnBuffering//  Purpose://	Called by client engine to inform the renderer that buffering//	of data is occuring. The render is informed of the reason for//	the buffering (start-up of stream, seek has occured, network//	congestion, etc.), as well as percentage complete of the //	buffering process.//STDMETHODIMP CSDPRenderer::OnBuffering(ULONG32 ulFlags, UINT16 unPercentComplete){    return HXR_OK;}///////////////////////////////////////////////////////////////////////////  Method://	IHXRenderer::GetDisplayType//  Purpose://	Called by client engine to ask the renderer for it's preferred//	display type. When layout information is not present, the //	renderer will be asked for it's prefered display type. Depending//	on the display type a buffer of additional information may be //	needed. This buffer could contain information about preferred//	window size.//STDMETHODIMP CSDPRenderer::GetDisplayType(    REF(HX_DISPLAY_TYPE)   ulFlags,    REF(IHXBuffer*)	    pBuffer){    ulFlags = HX_DISPLAY_NONE;    return HXR_OK;}/************************************************************************ *	Method: *	    IHXRenderer::OnEndofPackets *	Purpose: *	    Called by client engine to inform the renderer that all the *	    packets have been delivered. However, if the user seeks before *	    EndStream() is called, renderer may start getting packets again *	    and the client engine will eventually call this function again. */STDMETHODIMP CSDPRenderer::OnEndofPackets(void){    return HXR_OK;}HX_RESULTCSDPRenderer::ProcessSDP(IHXBuffer* pSDPBuffer){    HX_RESULT           rc = HXR_OK;    UINT32              ulSDPBufferSize = 0;    char*               pszSDPBuffer = NULL;    CHXString           escapedSDP;    CHXString           url;    CHXHeader*          pTrackProps = NULL;    CHXBuffer*          pBuffer = NULL;    IHXGroupManager*    pGroupManager = NULL;    IHXGroup*           pGroup = NULL;    if (!pSDPBuffer)    {        rc = HXR_FAILED;        goto cleanup;    }    ulSDPBufferSize = pSDPBuffer->GetSize() + 1;    pszSDPBuffer = new char[ulSDPBufferSize];    if (NULL == pszSDPBuffer)    {        rc = HXR_OUTOFMEMORY;        goto cleanup;    }    memset(pszSDPBuffer, 0, ulSDPBufferSize);    strncpy(pszSDPBuffer, (const char*)pSDPBuffer->GetBuffer(), pSDPBuffer->GetSize());        CHXURL::encodeURL(pszSDPBuffer, escapedSDP);    url = HELIX_SDP_SCHEME;    url += ":";    url += escapedSDP;    if (HXR_OK != m_pContext->QueryInterface(IID_IHXGroupManager, (void**)&pGroupManager))    {        rc = HXR_FAILED;        goto cleanup;    }    pGroupManager->GetCurrentGroup(m_uGroupIndex);        if (HXR_OK != pGroupManager->GetGroup(m_uGroupIndex, pGroup))    {        HX_ASSERT(FALSE);        rc = HXR_FAILED;        goto cleanup;    }    pTrackProps = new CHXHeader;    pTrackProps->AddRef();    pBuffer = new CHXBuffer();    pBuffer->AddRef();    pBuffer->Set((UCHAR*)(const char*)url, url.GetLength() + 1);    pTrackProps->SetPropertyCString("src", pBuffer);    pGroup->AddTrack(pTrackProps);cleanup:    HX_VECTOR_DELETE(pszSDPBuffer);    HX_RELEASE(pGroup);    HX_RELEASE(pGroupManager);    HX_RELEASE(pBuffer);    HX_RELEASE(pTrackProps);    return rc;}voidCSDPRenderer::Cleanup(void){    HX_RELEASE(m_pStream);    HX_RELEASE(m_pPlayer);        return;}    

⌨️ 快捷键说明

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