zoukankan      html  css  js  c++  java
  • [MFC][DShow]简单例子

    DirectShow是微软提供的视频播放SDK,本文介绍了如果在MFC应用程序中使用[DShow]来播放视频

    #include <DShow.h>        // DirectShow头文件

    需要在工程里面添加该头文件,然后定义个4个指针。

    IGraphBuilder*  m_pGraphBuilder;              
    IMediaControl*    m_pMediaControl;
    IMediaSeeking*    m_pMediaSeeking;
    IMediaEventEx*  m_pMediaEventEx;

    // 创建GraphBuilder实例
    CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
        (void**)&m_pGraphBuilder);

    // 通过该实例获取Media控制、Media定位、Media事件接口
    hr = m_pGraphBuilder->QueryInterface(IID_IMediaControl, (void**)&m_pMediaControl);
    hr = m_pGraphBuilder->QueryInterface(IID_IMediaSeeking, (void**)&m_pMediaSeeking);
    hr = m_pGraphBuilder->QueryInterface(IID_IMediaEventEx, (void**)&m_pMediaEventEx);

    // 设置消息通知窗体
    m_pMediaEventEx->SetNotifyWindow((OAHWND)(pWnd->GetSafeHwnd()), WM_GRAPHNOTIFY, 0);
    #define  WM_GRAPHNOTIFY  (WM_USER  + 13)
    WM_GRAPHNOTIFY  是自定义的,最后DShow会以该消息通知窗体

    在消息接收窗体的BOOL CMFCPlayerDlg::PreTranslateMessage(MSG* pMsg)函数中,查询具体消息

    BOOL CMFCPlayerDlg::PreTranslateMessage(MSG* pMsg)
    {
        if (pMsg->message == WM_GRAPHNOTIFY)
        {
            long evCode, param1, param2;
            if (m_pMediaEventEx)
            {
                m_pMediaEventEx->GetEvent(&evCode, &param1, &param2, 0);    // 获取西澳西
                switch(evCode)
                {
                case EC_COMPLETE:
                    break;
                default:
                    break;
                }
                m_pMediaEventEx->FreeEventParams(evCode, param1, param2);     
            }
            return TRUE;
        }
        return CDialog::PreTranslateMessage(pMsg);
    }

    // 设置播放文件
    m_pGraphBuilder->RenderFile(strFilePath, NULL);
    m_pMediaSeeking->GetDuration(&lDuration);       // 获取文件持续时间

    m_pMediaControl->Run();      // 开始播放

    这个工程是将codeproject上的DPlayer工程改用MFC实现,为了简单演示如何使用DShow播放视频。

    流程为: 创建DShow GraphBuilder接口->创建3个Media接口->设置事件通知窗体->设置播放文件并获取文件持续时间
    ->播放

    工程: https://files.cnblogs.com/ityujian/MFCPlayer.zip

  • 相关阅读:
    AntSword 中国蚁剑的下载安装配置(附下载文件)
    开园第一笔
    四舍五入小技巧
    PAT B# 1025 反转链表
    WebService如何根据对方提供的xml生成对象
    解决Web部署 svg/woff/woff2字体 404错误
    解决TryUpdateModel对象为空的问题
    IIS集成模式下,URL重写后获取不到Session值
    SQLServer清空数据库中所有的表并且ID自动归0
    win2003 64位系统IIS6.0 32位与64位间切换
  • 原文地址:https://www.cnblogs.com/ityujian/p/3043755.html
Copyright © 2011-2022 走看看