📄 mediastation.cpp
字号:
// MediaStation.cpp: implementation of the CMediaStation class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MediaStation.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMediaStation::CMediaStation()
{
//InitCOM();
CreateObjects();
}
CMediaStation::~CMediaStation()
{
//ReleaseCOM();
ClearObjects();
}
BOOL CMediaStation::ConnectToServer(LPCSTR mServerName)
{
char mbuf[30];
//HRESULT hRc;
if(mServerName==NULL)
{
ZeroMemory(mbuf,sizeof(mbuf));
gethostname (mbuf,sizeof(mbuf));
try
{
mServer.Connect((LPCSTR)mbuf);
}
catch(...)
{
return FALSE;
}
}
else
{
try
{
mServer.Connect(mServerName);
}
catch(...)
{
return FALSE;
}
}
return TRUE;
}
BOOL CMediaStation::CreateStation(LPCSTR mStationName,LPCSTR mMulticastAddress,int mPort,LPCSTR mNetCardAddress,LPCSTR mNSCPath,LPCSTR mStationFormatFile,LPCSTR mFormatType)
{
if(mServer==NULL) return FALSE;
mChannels=mServer.GetChannels();//取得站点对象集
if(mChannels==NULL) return FALSE;
mChannel=mChannels.Find(mStationName);//取得站点对象
if(mChannel==NULL)
{
mChannel=mChannels.Open(mStationName,1/*MCM_PA_READ*/);//创建站点对象
}
mChannel.SetMulticastAddress(mMulticastAddress);//多播地址
mChannel.SetPort(mPort);//多播端口
mChannel.SetDeliveryMode(15/*MCM_DM_ALL*/);//发布方式
mChannel.SetMulticastAdapterAddress(mNetCardAddress);//本机地址
mChannelFormats=mChannel.GetChannelFormats();//取得站点格式对象集
mChannelFormats.Add(mStationFormatFile,3/*MCM_ASF_CH_FORMAT_FILE*/);//添加站点格式描述
TCHAR mNSCFileName[256];
ZeroMemory(mNSCFileName,sizeof(mNSCFileName));
wsprintf(mNSCFileName,"%s\\%s.nsc",mNSCPath,mStationName);
mChannel.WriteNSC(mNSCFileName,TRUE); //生成NSC文件
return TRUE;
}
BOOL CMediaStation::DeleteStation(LPCSTR mStationName)
{
if(mServer==NULL) return FALSE;
mChannels=mServer.GetChannels();
if(mChannels==NULL) return FALSE;
mChannel=mChannels.Find(mStationName);
if(mChannel==NULL)
{
return FALSE;
}
mChannel.Close(); //删除站点
return TRUE;
}
BOOL CMediaStation::CreateStream(LPCSTR mStreamSource, LPCSTR mStreamAlias)
{
if(mServer==NULL) return FALSE;
mStreams=mServer.GetStreams();//取得流集对象
mStream=mStreams.Find(mStreamAlias);
if(mStream==NULL)
{
mStream=mStreams.Open(mStreamSource,mStreamAlias,7/*MCM_PA_ALL_ACCESS*/);//添加流
}
else
{
}
return TRUE;
}
BOOL CMediaStation::StartStream(LPCSTR mStationName,LPCSTR mStreamAlias)
{
if(mServer==NULL) return FALSE;
mChannels=mServer.GetChannels();
if(mChannels==NULL) return FALSE;
mChannel=mChannels.Find(mStationName);
if(mChannel==NULL)
{
return FALSE;
}
mStreams=mServer.GetStreams();
mStream=mStreams.Find(mStreamAlias);
if(mStream==NULL)
{
return FALSE;
}
mChannel.SetActiveStream(mStream) ;//设置活动流
mStream.Start(0); //启动流,从0开始
return TRUE;
}
BOOL CMediaStation::StopStream(LPCSTR mStationName,LPCSTR mStreamAlias)
{
if(mServer==NULL) return FALSE;
mChannels=mServer.GetChannels();
if(mChannels==NULL) return FALSE;
mChannel=mChannels.Find(mStationName);
if(mChannel==NULL)
{
return FALSE;
}
mStreams=mServer.GetStreams();
mStream=mStreams.Find(mStreamAlias);
if(mStream==NULL)
{
return FALSE;
}
mStream.Stop();//停止流
mChannel.SetActiveStream(NULL);//取消活动流
return TRUE;
}
void CMediaStation::CreateObjects()
{
mServer.CreateDispatch("NSChannelMgrObj.1");
}
void CMediaStation::ClearObjects()
{
mServer.ReleaseDispatch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -