亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? clientdlg.cpp

?? 利用rtp庫實(shí)現(xiàn)實(shí)時(shí)語音傳送
?? CPP
字號:
// ClientDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Client.h"
#include "ClientDlg.h"
static CLSID const CLSID_DIVX={
	0x78766964, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//extern CAsyncFilter *pFilter;
/////////////////////////////////////////////////////////////////////////////
// CClientDlg dialog

CClientDlg::CClientDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CClientDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CClientDlg)
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_pGraphBuilder = NULL;
	m_pMediaControl = NULL;
	m_pMediaEventEx = NULL;
	m_pMediaSeeking = NULL;
	m_pVideoWindow = NULL;
	m_pBasicVideo = NULL;
	m_pBasicAudio = NULL;
	m_pAsyncFilter = NULL;
	m_currentStatus = statusEmpty;
}

void CClientDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CClientDlg)
	DDX_Control(pDX, SLIDER_TIMER, mSliderGraph);
	DDX_Control(pDX, IDC_VIEW, m_View);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CClientDlg, CDialog)
	//{{AFX_MSG_MAP(CClientDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTPlay, OnBUTPlay)
	ON_BN_CLICKED(IDC_BUTSETRATE, OnButSetRate)
	ON_WM_TIMER()
	ON_WM_HSCROLL()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CClientDlg message handlers

BOOL CClientDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	mSliderGraph.SetRange(0,1000);
	mSliderGraph.SetPos(0);
	mSliderTimer = 0;
	SetDlgItemText(IDC_RATE,"30");
	
	if (FAILED(CoInitialize(NULL)))
	{
		AfxMessageBox("Failed to initialze COM", MB_ICONSTOP);
		return FALSE;
	}
	if (FAILED(BuildGraph()))
	{
		AfxMessageBox("Failed to BuildGraph", MB_ICONSTOP);
		return FALSE;
	}
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CClientDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CClientDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}
HRESULT CClientDlg::BuildGraph()
{
	HRESULT hr;
	hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&m_pGraphBuilder);
	if (FAILED(hr))
	{
		MessageBox("Failed to create an instance of FilterGraph\n");
		return hr;
	}

	m_pAsyncFilter = (CAsyncFilter*)CAsyncFilter::CreateInstance(&hr);
	if (FAILED(hr))
	{
		MessageBox("Failed to create an instance of AsyncFilter\n");
		return hr;
	}
	hr = m_pGraphBuilder->AddFilter(m_pAsyncFilter, L"Source Filter");
	if (SUCCEEDED(hr))
	{
		MessageBox("Source inserted in graph\n");
	}
	return S_OK;
}/*
void CClientDlg::OnBUTPlay()
{

	unsigned long remoteIP = inet_addr(MCAST_IP);
		_ASSERT(remoteIP != INADDR_NONE);
  // 創(chuàng)建RTP會話
  status = m_rtpSession.Create(LOCAL_PORT,localIP);
  //checkerror(status);
   m_rtpSession.JoinMulticastGroup(remoteIP);
   int index=0;
   MessageBox("ok1");
  do {
    // 接受RTP數(shù)據(jù)
    status = sess.PollData();
	// 檢索RTP數(shù)據(jù)源
    if (sess.GotoFirstSourceWithData()) {
      do {
        RTPPacket* packet;
        // 獲取RTP數(shù)據(jù)報(bào)
        while ((packet = sess.GetNextPacket()) != NULL) {
         // printf("Got packet !\n");
			index index++;
			MessageBox("ok");
          // 刪除RTP數(shù)據(jù)報(bào)
          delete packet;
        }
      } while (sess.GotoNextSourceWithData());
    }
  } while(1);
}*/
IPin *CClientDlg::GetPin(IBaseFilter *pFilter,PIN_DIRECTION PinDir)
{
	BOOL bFound=FALSE;
	IEnumPins *pEnum;
	IPin *pPin;
	pFilter->EnumPins(&pEnum);
	while(pEnum->Next(1,&pPin,0)==S_OK)
	{
		PIN_DIRECTION PinDirThis;
		pPin->QueryDirection(&PinDirThis);
		if(bFound=(PinDir=PinDirThis))
			break;
		pPin->Release();
	}
	pEnum->Release();
	return(bFound?pPin:0);
}

void CClientDlg::OnBUTPlay() 
{
	// TODO: Add your control notification handler code here
    HRESULT   hr;
		MessageBox("succeeded to begin\n");
			IBaseFilter *pDecoderFilter = NULL;
		/*	hr = CoCreateInstance(CLSID_RM_MPEG2_VIDEO_SUBPICTURE, NULL, CLSCTX_INPROC_SERVER,
			IID_IBaseFilter, (LPVOID *) &pDecoderFilter);
		if (FAILED(pigb->AddFilter(pDecoderFilter, L"MPEG4 Source")))
		{
		//	MessageBox(ghApp, "Cannot load decoder filter in Graph!!!", "Error", MB_ICONSTOP);
			return;
		}*/
		 hr=CoCreateInstance(CLSID_DIVX,NULL,CLSCTX_INPROC_SERVER,IID_IBaseFilter,(void **)&pDecoderFilter);
	if(FAILED(hr))
	{
		MessageBox("Decoder failed111");
	}
	hr =  m_pGraphBuilder->AddFilter(pDecoderFilter, L"Video Decoder");
	if(FAILED(hr))
	{
		MessageBox("Decoder failed1");
	}

//m_pAsyncFilter=pFilter;
		IPin *pPin = GetPin(m_pAsyncFilter, PINDIR_OUTPUT);
		if(pPin!=NULL)
		{
				MessageBox("SUCCEEDED to PIN the Async Filter\n");
//	hr = m_pGraphBuilder->Render(m_pAsyncFilter->GetPin(0));
//IGraphBuilder::Render從某輸出PIN開始,建立Graph剩余部分。此函數(shù)在下一級添加必要的
				//Filter直到到達(dá)Renderer Filter.

	hr = m_pGraphBuilder->Render(pPin);
		}
	if (FAILED(hr))
	{
		MessageBox("Failed to render the Async Filter\n");
	}
	else
		MessageBox("succeeded to render\n");
	if (FAILED(m_pGraphBuilder->QueryInterface(IID_IMediaControl, (void**)&m_pMediaControl)) ||
		FAILED(m_pGraphBuilder->QueryInterface(IID_IMediaEventEx, (void**)&m_pMediaEventEx)) ||
		FAILED(m_pGraphBuilder->QueryInterface(IID_IMediaSeeking, (void**)&m_pMediaSeeking)) ||
		FAILED(m_pGraphBuilder->QueryInterface(IID_IBasicVideo, (void**)&m_pBasicVideo)) ||
		FAILED(m_pGraphBuilder->QueryInterface(IID_IBasicAudio, (void**)&m_pBasicAudio)) ||
		FAILED(m_pGraphBuilder->QueryInterface(IID_IVideoWindow, (void**)&m_pVideoWindow)))
	{
		MessageBox("Failed to obtain at least one DirectShow interface\n");
		ReleaseMediaInterfaces();
		return ;
	}
	else 
			MessageBox("succeeded to filter\n");
	hr = m_pVideoWindow->put_Visible(OAFALSE);	
	hr = m_pVideoWindow->put_Owner((OAHWND)m_View.m_hWnd);
	hr = m_pVideoWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
	hr = m_pVideoWindow->put_MessageDrain((OAHWND)m_View.m_hWnd);
	hr = m_pVideoWindow->put_Visible(OATRUE);
	ResizeVideoWindow();
#ifdef REGISTER_FILTERGRAPH
    hr = AddGraphToRot(m_pGraphBuilder, &m_dwGraphRegister);
    if (FAILED(hr))
    {
        TRACE("Failed to register filter graph with ROT!  hr=0x%x", hr);
        m_dwGraphRegister = 0;
    }
#endif
	m_pMediaControl->Run();
	
	if (mSliderTimer == 0)
	{
		mSliderTimer = SetTimer(SLIDER_TIMER,100,NULL);
	}

	return ;
}

void CClientDlg::ResizeVideoWindow(void)
{
    // Resize the video preview window to match owner window size
    if (m_pVideoWindow)
    {
        CRect rect;
        
        // Make the preview video fill our window
		::GetClientRect(m_View.m_hWnd,&rect);
        m_pVideoWindow->SetWindowPosition(rect.left,rect.top,
			rect.right,rect.bottom);
    }
}

void CClientDlg::RemoveGraphFromRot(DWORD pdwRegister)
{
    IRunningObjectTable *pROT;
    if (SUCCEEDED(GetRunningObjectTable(0, &pROT))) {
        pROT->Revoke(pdwRegister);
        pROT->Release();
    }
}

void CClientDlg::ReleaseMediaInterfaces()
{
	// Release the graph registration
    if (m_dwGraphRegister)
    {
        RemoveGraphFromRot(m_dwGraphRegister);
        m_dwGraphRegister = 0;
    }

	// Release all COM interfaces to DirectShow
	if(m_pAsyncFilter)
		m_pAsyncFilter->Release();
	m_pAsyncFilter = NULL;

	if (m_pMediaControl)
		m_pMediaControl->Release();
	m_pMediaControl = NULL;
	if (m_pMediaEventEx)
		m_pMediaEventEx->Release();
	m_pMediaEventEx = NULL;
	if (m_pMediaSeeking)
		m_pMediaSeeking->Release();
	m_pMediaSeeking = NULL;
	if (m_pVideoWindow)
		m_pVideoWindow->Release();
	m_pVideoWindow = NULL;
	if (m_pBasicVideo)
		m_pBasicVideo->Release();
	m_pBasicVideo = NULL;
	if (m_pBasicAudio)
		m_pBasicAudio->Release();
	m_pBasicAudio = NULL;

	if (m_pGraphBuilder)
		m_pGraphBuilder->Release();
	m_pGraphBuilder = NULL;
}

HRESULT CClientDlg::AddGraphToRot(IUnknown *pUnkGraph, DWORD *pdwRegister)
{
    IMoniker * pMoniker;
    IRunningObjectTable *pROT;
    if (FAILED(GetRunningObjectTable(0, &pROT))) {
        return E_FAIL;
    }
    WCHAR wsz[128];
    wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());
    HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);
    if (SUCCEEDED(hr)) {
        hr = pROT->Register(0, pUnkGraph, pMoniker, pdwRegister);
        pMoniker->Release();
    }
    pROT->Release();
    return hr;
}

void CClientDlg::OnButSetRate() 
{
	// TODO: Add your control notification handler code here
	double oldRefTime;
	UINT Fps = GetDlgItemInt(IDC_RATE);
	//m_pMediaControl->Pause();
	//CComQIPtr<IBasicVideo , &IID_IBasicVideo > spBaseVideo(m_pGraphBuilder);
	HRESULT hr = m_pBasicVideo->get_AvgTimePerFrame(&oldRefTime);

	//CComQIPtr<IMediaSeeking , &IID_IMediaSeeking > spMediaCSeeking(m_pGraphBuilder);
	if(SUCCEEDED(hr)) {
		double dblNewRat = 1./(1./(double)Fps/oldRefTime);

		m_pMediaSeeking->SetRate(dblNewRat);
	}
	//m_pMediaControl->Run();
	return;
}

void CClientDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if ( nIDEvent == mSliderTimer) {
		double pos = 0, duration = 1;
		m_pMediaSeeking->GetCurrentPosition((__int64*)&pos);
		m_pMediaSeeking->GetDuration((__int64*)&duration);
		int newPos = int(pos * 1000 / duration);
		if(mSliderGraph.GetPos() != newPos)
			mSliderGraph.SetPos(newPos);
	}
	CDialog::OnTimer(nIDEvent);
}

void CClientDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	if (pScrollBar->GetSafeHwnd() == mSliderGraph.GetSafeHwnd()) {
		if (m_pMediaSeeking) {
			double duration = 1.;
			m_pMediaSeeking->GetDuration((__int64*)&duration);
			double pos = duration * mSliderGraph.GetPos() / 1000.;
			m_pMediaSeeking->SetPositions((__int64*)&pos,AM_SEEKING_AbsolutePositioning,
				NULL,AM_SEEKING_NoFlush);

		}
	} else
		CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线一区二区综合免费视频| 男男gaygay亚洲| 8v天堂国产在线一区二区| 国产资源精品在线观看| 亚洲黄色小视频| 国产欧美日韩一区二区三区在线观看 | 99久久99久久精品免费观看| 婷婷中文字幕综合| 亚洲欧洲制服丝袜| 久久久亚洲欧洲日产国码αv| 欧美伦理电影网| 91在线观看下载| 国产精品资源网站| 麻豆精品精品国产自在97香蕉| 亚洲最大成人网4388xx| 国产精品另类一区| 久久久综合网站| 日韩三级精品电影久久久| 欧美影院一区二区三区| 99久久综合国产精品| 国产精品一区二区在线观看不卡| 日韩国产欧美在线视频| 亚洲在线观看免费视频| 亚洲色图在线视频| 中文在线一区二区| 国产午夜三级一区二区三| 欧美一级理论片| 911精品产国品一二三产区| 欧美午夜片在线看| 欧美在线999| 色呦呦日韩精品| 99精品热视频| 97精品久久久久中文字幕| 99精品视频在线播放观看| 99在线精品一区二区三区| 丁香啪啪综合成人亚洲小说| 国产成人午夜精品影院观看视频| 国产在线精品一区二区夜色| 激情丁香综合五月| 国内久久精品视频| 国产精品91一区二区| 国产一区二区三区不卡在线观看| 久久99精品国产.久久久久久| 蜜臀av在线播放一区二区三区| 日本成人在线一区| 久久国内精品自在自线400部| 久久国内精品视频| 国产精品亚洲一区二区三区在线| 风间由美一区二区av101| 成人免费观看男女羞羞视频| 成人性色生活片| 91蝌蚪porny| 欧美在线影院一区二区| 在线不卡a资源高清| 欧美一级在线观看| 2020国产精品自拍| 国产精品乱人伦中文| 亚洲色图制服诱惑| 亚洲成a人片在线观看中文| 日韩精品午夜视频| 美国十次了思思久久精品导航| 精品一区二区在线视频| av在线综合网| 欧美天天综合网| 日韩三级中文字幕| 欧美极品aⅴ影院| 一区二区三区高清在线| 欧美aⅴ一区二区三区视频| 国产一区二区按摩在线观看| av午夜精品一区二区三区| 91丨九色丨国产丨porny| 色哟哟欧美精品| 日韩欧美国产电影| 欧美激情一区二区三区蜜桃视频| 亚洲欧洲色图综合| 日韩黄色片在线观看| 国产69精品久久久久毛片| 欧美最猛性xxxxx直播| 精品国产乱码久久久久久牛牛| 国产精品不卡在线| 美腿丝袜亚洲三区| av网站一区二区三区| 欧美一区二区三区男人的天堂| 国产欧美一区二区精品秋霞影院| 亚洲一线二线三线久久久| 极品少妇一区二区三区精品视频 | 亚洲v精品v日韩v欧美v专区| 国产一区二区三区日韩| 色欧美日韩亚洲| 亚洲精品一区二区三区影院| 亚洲乱码日产精品bd| 激情久久五月天| 欧美日韩在线综合| 国产精品私人影院| 奇米四色…亚洲| 99精品热视频| 2022国产精品视频| 日韩电影在线免费看| av电影一区二区| 精品福利一区二区三区免费视频| 一区二区三区精品视频在线| 国产一区二区精品久久99| 欧美日韩高清在线播放| 中文字幕久久午夜不卡| 麻豆精品一二三| 欧美日韩一区中文字幕| 亚洲天堂精品在线观看| 国产一区二区三区蝌蚪| 欧美区视频在线观看| 综合欧美一区二区三区| 激情国产一区二区| 欧美一级高清片| 亚洲福利视频导航| 91欧美一区二区| 国产精品人成在线观看免费| 国产一区欧美一区| 欧美sm美女调教| 免费观看日韩av| 91精品国产综合久久久久久久久久| 一区二区三区在线视频免费 | 激情五月播播久久久精品| 欧美日本在线观看| 伊人夜夜躁av伊人久久| 91麻豆精品在线观看| 国产精品理论片| 成人性生交大片| 国产精品蜜臀在线观看| 国产成人亚洲综合色影视| 国产亚洲一区字幕| 国产成人午夜视频| 国产免费久久精品| 国产福利一区二区三区视频在线 | 99精品热视频| 亚洲视频资源在线| 91丨九色丨蝌蚪富婆spa| 亚洲婷婷在线视频| 色久优优欧美色久优优| 亚洲乱码国产乱码精品精可以看| 成人永久aaa| 国产精品超碰97尤物18| 91在线视频在线| 伊人色综合久久天天人手人婷| 欧美在线你懂得| 亚洲国产另类av| 678五月天丁香亚洲综合网| 丝袜亚洲另类欧美| 欧美精品 日韩| 麻豆精品久久久| 久久久精品黄色| 99在线视频精品| 亚洲一区在线观看免费观看电影高清 | 成人免费看黄yyy456| 亚洲人成网站色在线观看| 色噜噜久久综合| 日韩成人dvd| 久久久91精品国产一区二区三区| 成人久久久精品乱码一区二区三区 | 日韩黄色片在线观看| 久久日韩精品一区二区五区| 国产精品88av| 亚洲黄色小说网站| 日韩久久久精品| 国产福利一区在线| 一区二区三区影院| 日韩一二三区视频| 国产91丝袜在线18| 一区二区三区免费网站| 91精品国产免费| 成人免费视频网站在线观看| 亚洲资源中文字幕| 日韩精品一区二区三区四区视频| 国产在线视频精品一区| 亚洲区小说区图片区qvod| 这里只有精品免费| 成人综合激情网| 首页国产丝袜综合| 中文字幕成人av| 欧美一区二区三区性视频| 国产成人在线免费观看| 亚洲成a人v欧美综合天堂下载 | 国产精品萝li| 在线播放91灌醉迷j高跟美女| 国产一区二区三区四| 亚洲国产日产av| 国产清纯白嫩初高生在线观看91| 欧美色网站导航| 成人美女视频在线观看| 免费在线观看不卡| 国产精品全国免费观看高清| 欧美肥妇free| 成人一级视频在线观看| 日韩国产在线观看| 亚洲人成网站影音先锋播放| 精品理论电影在线| 欧美亚男人的天堂| 成人av在线资源网| 久久 天天综合| 亚洲成年人网站在线观看| 中文字幕在线不卡| 欧美成人欧美edvon|