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

📄 cmediasocketclient.cpp

📁 一个用VC实现的流媒体客服端接收程序。采用了directshow实现
💻 CPP
字号:
// 
// CMediaSocketClient.cpp
// 

#include "stdafx.h"
#include "CMediaSocketClient.h"
#include "CDataAdmin.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//////////////////////////////////////////////////////////////////////////////
CMediaSocketClient::CMediaSocketClient()
{
	m_dwRecvCount   = 0;
	m_bGraphStarted = false;
	m_pDataList = NULL;
	m_hCountWnd = NULL;
	m_LocalFile = NULL;	
	m_LocalFile = new CFile("receive.mpg", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
}

CMediaSocketClient::~CMediaSocketClient()
{
	if (m_LocalFile)
	{
		m_LocalFile->Close();
		delete m_LocalFile;
		m_LocalFile = NULL;
	}
	m_pDataList = NULL;
}

void CMediaSocketClient::ReceivingLoop(void)
{
	int    nret     = 0;
	char   buff[ MPEG1_PACK_SIZE];
    CSocket Creceive;
	Creceive.Create(8005,SOCK_DGRAM); 
	unsigned int port=8007;
    CString ip="127.0.0.1";

	while (m_bReceiving)
	{
	    /***删了***//////		
			while ((nret = Creceive.ReceiveFrom(buff, MPEG1_PACK_SIZE,ip,port)) == E_SOCKET_NOT_READY)
			{
				Sleep(50);
			}
			
			if (m_LocalFile)
			{
				m_LocalFile->Write(buff, MPEG1_PACK_SIZE);
			}
			// Add to buffer list for filter graph using
			if (m_pDataList)
			{
				PMPEG1_PACK pData = m_pDataList->GetWriteBuffer();
				if (pData == NULL && m_pDataList->GetListSize() < PACK_MAX_COUNT)
				{
					// Allocate more buffer
					pData = new MPEG1_PACK;
				}
				if (pData != NULL)
				{
					memcpy(pData, buff, MPEG1_PACK_SIZE);
					m_pDataList->ReleaseWriteBuffer(pData);
				}

				// Receive data pack counting...
				m_dwRecvCount++;
				if ((m_dwRecvCount >= PACK_INIT_COUNT) && 
					!m_bGraphStarted)
				{
					::SetEvent(m_pDataList->m_hBufEnough);  //大于100开始运行
					m_bGraphStarted = true;
				}
//#ifdef _DEBUG
				if (m_hCountWnd != NULL)
				{
					char buff[15];
					itoa(m_dwRecvCount, buff,10);
					::SendMessage(m_hCountWnd, WM_SETTEXT, 0, (LPARAM)buff);
				}
//#endif
			}

	}

	// If no more data receiving, flush data
	if (m_pDataList)
	{
		m_pDataList->SetFlushing();
	}
}

void CMediaSocketClient::SetRecvBuffer(CDataAdmin * inBuf)
{
	if (m_pDataList == NULL)
	{
		m_pDataList = inBuf;
	}
}

void CMediaSocketClient::SetCountWnd(HWND inWnd)
{
	m_hCountWnd = inWnd;
}

⌨️ 快捷键说明

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