📄 basestream.cpp
字号:
// BaseStream.cpp: implementation of the CBaseStream class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BaseStream.h"
#include "MultiSock_s.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBaseStream::CBaseStream()
{m_zStreamStatus=S_S_Idle;
m_hBeginPlay=m_hPausePlay=m_hStopPlay=m_hTerminateThread=m_hThread=NULL;
m_fStreamBitrate=0;
// TRACE("Create Base Stream\n");
}
CBaseStream::~CBaseStream()
{
Close();
}
DWORD CBaseStream::StreamThread()
{ return BS_OK;
}
int CBaseStream::Create(SOCKADDR_IN myAddr, SOCKADDR_IN multiAddr)
{ //TRACE("Create base Thread\n");
//int nRet=m_MultiSock.Startup(myAddr,multiAddr);
TRACE("sdsd");
// int nRet=m_MultiSock.Startup("226.8.8.8",9002,"",9002,1);
int nRet;
if(nRet==INVALID_SOCKET)
{
return BS_FAIL;
}
m_hTerminateThread = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hBeginPlay = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hPausePlay = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hStopPlay = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hThread = CreateThread(NULL,0,InitialThread,this,0,&m_dwThreadId);
m_zStreamStatus=S_S_Inited;
return BS_OK;
}
void CBaseStream::Start()
{
if(m_zStreamStatus==S_S_Running) return ;
SetEvent(m_hBeginPlay);
}
void CBaseStream::Pause()
{
if(m_zStreamStatus!=S_S_Running) return ;
SetEvent(m_hPausePlay);
}
void CBaseStream::Stop()
{
if(m_zStreamStatus!=S_S_Running) return ;
SetEvent(m_hStopPlay);
}
void CBaseStream::Close()
{
if(m_zStreamStatus==S_S_Idle||m_zStreamStatus==S_S_Closed)
return;
SetEvent(m_hTerminateThread);
if (WaitForSingleObject(m_hThread,100)!=WAIT_OBJECT_0){
TerminateThread(m_hThread,CLOSETHREADCODE);
}
PubCloseHandle(m_hTerminateThread);
PubCloseHandle(m_hBeginPlay);
PubCloseHandle(m_hPausePlay);
PubCloseHandle(m_hStopPlay);
if(m_nSockType==2)
m_AsyMultiSocket.LeaveGroup();
else
m_MultiSock.Close();
m_zStreamStatus=S_S_Idle;
}
Stream_Status CBaseStream::GetStreamStatus()
{
return m_zStreamStatus;
}
float CBaseStream::GetStreamBitrate()
{
return m_fStreamBitrate;
}
int CBaseStream::SendData(LPVOID lpBuf, int iSize)
{if(m_nSockType==2)
return m_AsyMultiSocket.Send(lpBuf,iSize);
else
return m_MultiSock.SendData(lpBuf,iSize);
}
int CBaseStream::Create(char *strMultiIp, char *strLocapIP,
DWORD dwport, int nttl)
{
SOCKADDR_IN m_HostAddr, multiAddr;
int nRet;
m_HostAddr.sin_family=multiAddr.sin_family=AF_INET;
if(g_bPortIschanged){
m_HostAddr.sin_port=INADDR_ANY;
multiAddr.sin_port=htons(dwport);
}
else
{
m_HostAddr.sin_port=INADDR_ANY;
multiAddr.sin_port=dwport;
}
switch(m_nSockType){
case 0:/***********bsd 2.0*******************/
if(strlen(strLocapIP)<=0)
m_HostAddr.sin_addr.s_addr=INADDR_ANY;
else
m_HostAddr.sin_addr.s_addr=inet_addr(strLocapIP);
multiAddr.sin_addr.s_addr=inet_addr(strMultiIp);
nRet=m_MultiSock.Startup(m_HostAddr,multiAddr,nttl);
break;
case 1:/***************wsa join***********/
if(strcmp(strLocapIP,"127.0.0.1")==0)
m_HostAddr.sin_addr.s_addr=INADDR_ANY;
else
m_HostAddr.sin_addr.s_addr=inet_addr(strLocapIP);
multiAddr.sin_addr.s_addr=inet_addr(strMultiIp);
nRet=m_MultiSock.Startup_(m_HostAddr,multiAddr,nttl);
break;
case 2:
nRet=m_AsyMultiSocket.JoinGroup(strMultiIp,dwport,nttl,g_bIsLoopBack);
break;
}
if(nRet==INVALID_SOCKET)
{
return BS_FAIL;
}
m_hTerminateThread = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hBeginPlay = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hPausePlay = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hStopPlay = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hThread = CreateThread(NULL,0,InitialThread,this,0,&m_dwThreadId);
m_zStreamStatus=S_S_Inited;
return BS_OK;
}
void CBaseStream::SetSocketType(int ntype)
{
m_nSockType=ntype;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -