📄 serverdlg.cpp
字号:
pIn=mAudioSender->GetPin(0);
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
return pass;
}
BOOL CServerDlg::CreateOGGFilters()
{
HRESULT hr = NOERROR;
BOOL pass = FALSE;
IPin * pOut = NULL;
IPin * pIn = NULL;
IFileSourceFilter * mFileFilter;
if (SUCCEEDED(CoCreateInstance(CLSID_MYFILESOURCEFILTER, NULL, CLSCTX_INPROC_SERVER,
IID_IFileSourceFilter, (void **)&mFileFilter)))
{
WCHAR playingID[200];
MultiByteToWideChar(CP_ACP,0,mPlayingMedia.mFilePath,-1,playingID,200);
if(SUCCEEDED(mFileFilter->Load(playingID,NULL)))
{
if(SUCCEEDED(mFileFilter->QueryInterface(IID_IBaseFilter,(void **)&mFile)))
{
mGraph->AddFilter(mFile,L"File");
pass=TRUE;
}
}
mFileFilter->Release();
}
if(pass)
{
pass=FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_MYOGGSPLITTER, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mSplitter)))
{
if (SUCCEEDED(mGraph->AddFilter(mSplitter,L"Splitter")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_MYINFINITEPIN, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mInfinitePin)))
{
if (SUCCEEDED(mGraph->AddFilter(mInfinitePin,L"InfinitePin")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_VideoRenderer, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mVideoRenderer)))
{
if (SUCCEEDED(mGraph->AddFilter(mVideoRenderer,L"VideoRenderer")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
mVideoSender = new CFilterNetSender(NULL, &hr);
IBaseFilter * pFilter = NULL;
mVideoSender->QueryInterface(IID_IBaseFilter, (void**)&pFilter);
if (SUCCEEDED(mGraph->AddFilter(pFilter, L"Video Sender")))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_MYINFINITEPIN, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mTempInfinitePin)))
{
if (SUCCEEDED(mGraph->AddFilter(mTempInfinitePin,L"TempInfinitePin")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_DSoundRender, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mAudioRenderer)))
{
if (SUCCEEDED(mGraph->AddFilter(mAudioRenderer,L"AudioRenderer")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
mAudioSender = new CFilterNetSender(NULL, &hr);
IBaseFilter * pFilter = NULL;
mAudioSender->QueryInterface(IID_IBaseFilter, (void**)&pFilter);
if (SUCCEEDED(mGraph->AddFilter(pFilter, L"Audio Sender")))
pass=TRUE;
}
if(pass)
{
pOut=UFilterUtils::GetPin(mFile,FALSE,"Output");
pIn=UFilterUtils::GetPin(mSplitter,TRUE,"Input");
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pOut=UFilterUtils::GetPin(mSplitter,FALSE,"Video");
pIn=UFilterUtils::GetPin(mInfinitePin,TRUE,"Input");
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
pOut=UFilterUtils::GetPin(mInfinitePin,FALSE,"Output1");
pIn=UFilterUtils::GetPin(mVideoRenderer,TRUE,"Input");
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
pOut=UFilterUtils::GetPin(mInfinitePin,FALSE,"Output2");
pIn=mVideoSender->GetPin(0);
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_MYINFINITEPIN, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mAudioInfinitePin)))
{
if (SUCCEEDED(mGraph->AddFilter(mAudioInfinitePin,L"AudioInfinitePin")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
pOut=UFilterUtils::GetPin(mSplitter,FALSE,"Vorbis");
pIn=UFilterUtils::GetPin(mAudioInfinitePin,TRUE,"Input");
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
IBaseFilter * AudioTempInfinitePin;
if (SUCCEEDED(CoCreateInstance(CLSID_MYINFINITEPIN, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&AudioTempInfinitePin)))
{
if (SUCCEEDED(mGraph->AddFilter(AudioTempInfinitePin,L"AudioTempInfinitePin")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
pOut=UFilterUtils::GetPin(mAudioInfinitePin,FALSE,"Output1");
pIn=UFilterUtils::GetPin(mAudioRenderer,TRUE,"Audio");
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
pOut=UFilterUtils::GetPin(mAudioInfinitePin,FALSE,"Output2");
pIn=mAudioSender->GetPin(0);
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
return pass;
}
BOOL CServerDlg::CreateMPEGFilters()
{
HRESULT hr = NOERROR;
BOOL pass = FALSE;
IPin * pOut = NULL;
IPin * pIn = NULL;
IFileSourceFilter * mFileFilter;
if (SUCCEEDED(CoCreateInstance(CLSID_MYFILESOURCEFILTER, NULL, CLSCTX_INPROC_SERVER,
IID_IFileSourceFilter, (void **)&mFileFilter)))
{
WCHAR playingID[200];
MultiByteToWideChar(CP_ACP,0,mPlayingMedia.mFilePath,-1,playingID,200);
if(SUCCEEDED(mFileFilter->Load(playingID,NULL)))
{
if(SUCCEEDED(mFileFilter->QueryInterface(IID_IBaseFilter,(void **)&mFile)))
{
mGraph->AddFilter(mFile,L"File");
pass=TRUE;
}
}
mFileFilter->Release();
}
if(pass)
{
pass=FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_MYMPEGSPLITTER, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mSplitter)))
{
if (SUCCEEDED(mGraph->AddFilter(mSplitter,L"Splitter")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_MYINFINITEPIN, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mInfinitePin)))
{
if (SUCCEEDED(mGraph->AddFilter(mInfinitePin,L"InfinitePin")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_VideoRenderer, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mVideoRenderer)))
{
if (SUCCEEDED(mGraph->AddFilter(mVideoRenderer,L"VideoRenderer")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
mVideoSender = new CFilterNetSender(NULL, &hr);
IBaseFilter * pFilter = NULL;
mVideoSender->QueryInterface(IID_IBaseFilter, (void**)&pFilter);
if (SUCCEEDED(mGraph->AddFilter(pFilter, L"Video Sender")))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_MYINFINITEPIN, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mTempInfinitePin)))
{
if (SUCCEEDED(mGraph->AddFilter(mTempInfinitePin,L"TempInfinitePin")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_DSoundRender, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mAudioRenderer)))
{
if (SUCCEEDED(mGraph->AddFilter(mAudioRenderer,L"AudioRenderer")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
mAudioSender = new CFilterNetSender(NULL, &hr);
IBaseFilter * pFilter = NULL;
mAudioSender->QueryInterface(IID_IBaseFilter, (void**)&pFilter);
if (SUCCEEDED(mGraph->AddFilter(pFilter, L"Audio Sender")))
pass=TRUE;
}
if(pass)
{
pOut=UFilterUtils::GetPin(mFile,FALSE,"Output");
pIn=UFilterUtils::GetPin(mSplitter,TRUE,"Input");
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pOut=UFilterUtils::GetPin(mSplitter,FALSE,"Video");
pIn=UFilterUtils::GetPin(mInfinitePin,TRUE,"Input");
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
pOut=UFilterUtils::GetPin(mInfinitePin,FALSE,"Output1");
pIn=UFilterUtils::GetPin(mVideoRenderer,TRUE,"Input");
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
pOut=UFilterUtils::GetPin(mInfinitePin,FALSE,"Output2");
pIn=mVideoSender->GetPin(0);
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_MYINFINITEPIN, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mAudioInfinitePin)))
{
if (SUCCEEDED(mGraph->AddFilter(mAudioInfinitePin,L"AudioInfinitePin")))
pass=TRUE;
}
}
if(pass)
{
pass=FALSE;
pOut=UFilterUtils::GetPin(mSplitter,FALSE,"Audio");
pIn=UFilterUtils::GetPin(mAudioInfinitePin,TRUE,"Input");
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
pOut=UFilterUtils::GetPin(mAudioInfinitePin,FALSE,"Output1");
pIn=UFilterUtils::GetPin(mAudioRenderer,TRUE,"Audio");
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
pOut=UFilterUtils::GetPin(mAudioInfinitePin,FALSE,"Output2");
pIn=mAudioSender->GetPin(0);
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
return pass;
}
void CServerDlg::SendSimpleCommand(long inCommand)
{
char buf[MAX_COMMAND_SIZE];
long len = sizeof(Net_Command);
// Specify command id first
long * pCmd = (long *) buf;
*pCmd = inCommand;
*pCmd = htonl(*pCmd);
mControll.Send(buf, len);
}
void CServerDlg::OnTimer(UINT nIDEvent)
{
if(nIDEvent==mSliderTimer)
{
double pos=0,duration=1;
if (mSeeking)
{
GetCurrentPosition(&pos);
GetDuration(&duration);
int newpos=int(pos*1000/duration);
if(mProgress.GetPos()!=newpos)
{
mProgress.SetPos(newpos);
SendProgress(newpos);
}
}
}
CDialog::OnTimer(nIDEvent);
}
void CServerDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if(pScrollBar->GetSafeHwnd()==mProgress.GetSafeHwnd())
{
if(mGraph)
{
double duration=1;
GetDuration(&duration);
double pos=duration*mProgress.GetPos()/1000.;
SetCurrentPosition(pos);
}
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CServerDlg::GetDuration(double *outDuration)
{
if (mSeeking)
{
__int64 length = 0;
if (SUCCEEDED(mSeeking->GetDuration(&length)))
{
*outDuration = ((double)length) / 10000000.;
}
}
}
void CServerDlg::GetCurrentPosition(double *outPosition)
{
if (mSeeking)
{
__int64 position = 0;
if (SUCCEEDED(mSeeking->GetCurrentPosition(&position)))
{
*outPosition = ((double)position) / 10000000.;
}
}
}
void CServerDlg::SetCurrentPosition(double inPosition)
{
if (mSeeking)
{
__int64 one = 10000000;
__int64 position = (__int64)(one * inPosition);
HRESULT hr = mSeeking->SetPositions(&position, AM_SEEKING_AbsolutePositioning | AM_SEEKING_SeekToKeyFrame,
0, AM_SEEKING_NoPositioning);
}
}
void CServerDlg::SendProgress(int pos)
{
char buf[MAX_COMMAND_SIZE];
long len = sizeof(Net_Command) + sizeof(Media_Progress);
long * pCmd = (long *) buf;
*pCmd = Cmd_SetProgress;
*pCmd = htonl(*pCmd);
pCmd++;
Media_Progress * pData = (Media_Progress *) pCmd;
pData->program_Progress = pos;
pData->my_hton();
mControll.Send(buf, len);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -