在中Visual Studio .NET 2003利用DirectShow播放媒体文件(四)

原创 2004年04月12日 12:55:00

// IDC_VW_FRAME控件Picture Control主要作用是控制Vedio Window的显示位置<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

void CPlayWndDlg::MoveVideoWindow(void)

{

    IVideoWindow* pVideoWinow = NULL;

    if(m_pGraph)

    {

       m_pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVideoWinow);

 

       CRect rc;

       GetDlgItem(IDC_VW_FRAME)->GetWindowRect(rc);

       ScreenToClient(rc);

       pVideoWinow->SetWindowPosition(rc.left, rc.top, rc.Width(), rc.Height());

       pVideoWinow->Release();

       pVideoWinow = NULL;

    }

}

 

void CPlayWndDlg::CleanUp(void)

{

    long levCode;

    IVideoWindow *pVidWin = NULL;

 

    if(!m_pGraph)

       return;

 

    m_pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);

 

    m_pEvent->WaitForCompletion(INFINITE, &levCode);

 

    pVidWin->put_Visible(OAFALSE);

    pVidWin->Release();

    m_pMediaSeeking->Release();

    m_pMediaControl->Release();

    m_pEvent->Release();

    m_pGraph->Release();

 

    m_pMediaSeeking = NULL;

    m_pMediaControl = NULL;

    m_pEvent = NULL;

    m_pGraph = NULL;

 

    UpdateData(FALSE);

    CClientDC dc(GetDlgItem(IDC_VW_FRAME));

    dc.SetBkColor(RGB(0,0,0));

 

    CRect rc;

    GetDlgItem(IDC_VW_FRAME)->GetClientRect(rc);

    ClientToScreen(rc);

    dc.FillRect(rc, CBrush::FromHandle((HBRUSH)GetStockObject(BLACK_BRUSH)));

    Invalidate();

}

 

 

BOOL CPlayWndDlg::Stop(void)

{

    IVideoWindow *pVidWin = NULL;

    HRESULT hr;

 

    if(m_pMediaControl)

    {

       LONGLONG pos = 0;

       hr = m_pMediaControl->Stop();

 

       hr = m_pMediaSeeking->SetPositions(&pos, AM_SEEKING_AbsolutePositioning ,

           &pos, AM_SEEKING_NoPositioning);

 

       m_pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);

       pVidWin->put_Visible(OAFALSE);

 

       m_isPlaying = FALSE;

       GetDlgItem(IDC_PLAY_BUTTON)->EnableWindow(TRUE);

       GetDlgItem(IDC_PAUSE_BUTTON)->EnableWindow(FALSE);

 

       pVidWin->Release();

 

       long levCode;

 

       m_pEvent->WaitForCompletion(INFINITE, &levCode);

       m_pMediaControl->Release();

 

       return TRUE;

    }

 

    return FALSE;

}

 

BOOL CPlayWndDlg::Play(void)

{

    // 运行

    IVideoWindow *pVidWin = NULL;

 

    if(m_pGraph)

    {

       m_pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);

       pVidWin->put_Visible(OATRUE);

 

       m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pMediaControl);

 

       m_pMediaControl->Run();

 

       m_isPlaying = TRUE;

       GetDlgItem(IDC_PLAY_BUTTON)->EnableWindow(FALSE);

       GetDlgItem(IDC_PAUSE_BUTTON)->EnableWindow(TRUE);

 

 

       return TRUE;

    }

 

    return FALSE;

}

VS2010基于DirectShows实现视频预览控件

之前用VFW实现视频预览控件,使用的时候经常会弹出视频源选择窗口,为了解决这个问题,采用最新的DirectShow来实现视频预览,而且VFW目前基本上已经不使用了,DirectX的功能比较强大。因需求...
  • wu_tongyu
  • wu_tongyu
  • 2014年12月16日 23:14
  • 1064

DirectShow Filter 基础与简单的示例程序

DirectShow 是一个 Windows 平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。 Filter 实质是一个 COM 组件,所以学习开发 Filter 前你应该对 COM 相关...
  • 91program
  • 91program
  • 2014年06月05日 07:32
  • 2406

Visual Studio 2013中.dll文件的显式调用方法

http://blog.csdn.net/cd520yy/article/details/49455127 http://www.jb51.net/article/36447.htm http:/...
  • piaoxuezhong
  • piaoxuezhong
  • 2017年03月12日 22:33
  • 1249

Visual Studio 2008 可扩展性开发(四):添加新的命令

概述:Visual Studio 2008 可扩展性开发(四):添加新的命令 前言 在之前的两篇随笔中,我介绍了Add-In的运行机制,这样对Add-In的事件、生命周期、与VS如何交互可...
  • t729468926
  • t729468926
  • 2016年02月14日 16:59
  • 476

最简单的基于DirectShow的示例:视频播放器自定义版

本文记录一个简单的基于DirectShow的自定义的视频播放器。这里所说的“自定义播放器”,实际上指的是自己在Filter Graph中手动逐个添加Filter,并且连接这些Filter的后运行的播放...
  • leixiaohua1020
  • leixiaohua1020
  • 2015年01月11日 18:05
  • 10030

DirectShow 播放mp4编码 视频

转载 自 : http://blog.csdn.net/wuanshi5/article/details/50392111 最主要的开发资料还是在 : http://blog.csdn.net/s...
  • xiaojun111111
  • xiaojun111111
  • 2016年08月09日 14:49
  • 1600

C#使用DirectShow播放视频文件

最近在开发一个视频播放软件,主要要求就是循环播放多个视频文件,并且要求两个视频文件切换时,不能有黑屏现象发生。 无论是使用Winform的Mediaplayer控件还是WPF的MediaElement...
  • openzpc
  • openzpc
  • 2015年09月14日 18:03
  • 2195

Visual Studio 20周年,我和VS不得不说的故事(内含福利)

Visual Studio 2017版本正式发布,让我们一起分享对Visual Studio的独特感受。
  • powertoolsteam
  • powertoolsteam
  • 2017年03月09日 15:18
  • 1147

扬长避短使用Windbg和Visual Studio高效调试调试你的代码

经常被问及这样的问题: 你为什么非要使用Windbg调试你的程序? 记得有一次面试的时候笔者也被问到这样的问题,我的回答是:不是我非要使用Windbg, 只是在不同的情况下使用不同的工具会更加方便...
  • lonelyrains
  • lonelyrains
  • 2016年03月13日 12:51
  • 808

c++ DirectShow播放任意格式的视频

利用opencv只能处理.avi的视频,opencv之前的版本之前试过好像是只能处理.avi未压缩版本的视频,未压缩过的视频相当大,一个文件大概是几十个G。(这个不确定,因为之前用的压缩过的.avi的...
  • KUAILE123
  • KUAILE123
  • 2013年09月08日 16:29
  • 2215
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在中Visual Studio .NET 2003利用DirectShow播放媒体文件(四)
举报原因:
原因补充:

(最多只允许输入30个字)