?? serverdlg.cpp
字號:
if (SUCCEEDED(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&mGraph)))
{
mGraph->QueryInterface(IID_IMediaControl, (void **)&mMediaControl);
mGraph->QueryInterface(IID_IMediaSeeking, (void **)&mSeeking);
return TRUE;
}
mGraph = NULL;
}
return FALSE;
}
BOOL CServerDlg::AfterBuildGraph()
{
SOCKET videosocket=mVideo.GetSocket();
if(videosocket!=INVALID_SOCKET)
{
mVideoSender->SetStreamSocket(videosocket);
}
else
{
return FALSE;
MessageBox("video socket fail");
}
SOCKET audiosocket=mAudio.GetSocket();
if(audiosocket!=INVALID_SOCKET)
{
mAudioSender->SetStreamSocket(audiosocket);
}
else
{
return FALSE;
MessageBox("audio socket fail");
}
SetDisplayWindow(mVideoWnd.m_hWnd);
if (SUCCEEDED(mMediaControl->Run()))
{
mSliderTimer=SetTimer(1,2000,NULL);
mState=PLAY;
return TRUE;
}
return FALSE;
}
BOOL CServerDlg::SetDisplayWindow(HWND inWindow)
{
HRESULT hr = NOERROR;
IVideoWindow * mVideoWindow;
hr = mGraph->QueryInterface(IID_IVideoWindow, (void **)&mVideoWindow);
if (mVideoWindow)
{
mVideoWindow->put_Visible(OAFALSE);
mVideoWindow->put_Owner((OAHWND)inWindow);
RECT windowRect;
::GetClientRect(inWindow, &windowRect);
mVideoWindow->put_Left(0);
mVideoWindow->put_Top(0);
mVideoWindow->put_Width(windowRect.right - windowRect.left);
mVideoWindow->put_Height(windowRect.bottom - windowRect.top);
mVideoWindow->put_WindowStyle(WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS);
mVideoWindow->put_MessageDrain((OAHWND) inWindow);
if (inWindow != NULL)
{
mVideoWindow->put_Visible(OATRUE);
}
else
{
mVideoWindow->put_Visible(OAFALSE);
}
mVideoWindow->Release();
return TRUE;
}
mVideoWindow->Release();
return FALSE;
}
void CServerDlg::Deactivate()
{
if (mGraph && mMediaControl)
{
mMediaControl->Stop();
}
KillTimer(mSliderTimer);
mProgress.SetPos(0);
SAFE_RELEASE(mFile);
SAFE_RELEASE(mSplitter);
SAFE_RELEASE(mInfinitePin);
SAFE_RELEASE(mAudioInfinitePin);
SAFE_RELEASE(mTempInfinitePin);
SAFE_RELEASE(mVideoRenderer);
SAFE_RELEASE(mAudioRenderer);
SAFE_RELEASE(mVideoSender);
SAFE_RELEASE(mAudioSender);
SAFE_RELEASE(mVideoDecom);
SAFE_RELEASE(mAudioDecom);
SAFE_RELEASE(mGraph);
SAFE_RELEASE(mMediaControl);
SAFE_RELEASE(mSeeking);
}
void CServerDlg::OnDestroy()
{
CDialog::OnDestroy();
Deactivate();
}
BOOL CServerDlg::CreateAVIFilters()
{
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_MYAVISPLITTER, 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,"Stream");
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,"01");
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;
}
BOOL CServerDlg::CreateREALFilters()
{
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_MYREALSPLITTER, 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_MYREALAUDIODECOM, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&mAudioDecom)))
{
if (SUCCEEDED(mGraph->AddFilter(mAudioDecom,L"AudioDeocm")))
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,"Output 01");
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,"Output 00");
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(mAudioDecom,TRUE,"XForm In");
if (SUCCEEDED(mGraph->Connect(pOut,pIn)))
pass=TRUE;
}
if(pass)
{
pass=FALSE;
pOut=UFilterUtils::GetPin(mAudioDecom,FALSE,"XForm Out");
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -