zoukankan      html  css  js  c++  java
  • DirectShow 最简单的入门 -- 播放一段视频

     1 #include <dshow.h>
     2 
     3 #pragma comment(lib,"strmbase.lib")
     4 #pragma comment(lib,"quartz.lib")
     5 
     6 int main() {
     7     // Filter Graph Builder
     8     IGraphBuilder *pGraph = NULL;
     9     // Media Control
    10     IMediaControl *pControl = NULL;
    11     // Media Event
    12     IMediaEvent *pEvent = NULL;
    13     // 初始化COM库,HRESULT 就是函数运行的结果是成功了还是失败了,使用FAILED(hr),SUCCEEDED(hr) 来判断
    14     HRESULT hr = CoInitialize(NULL);
    15 
    16     // 如果初始化COM库失败的话,就返回
    17     if (FAILED(hr))
    18     {
    19         return 0;
    20     }
    21 
    22     // 创建 Filter Graph Manager
    23     hr = CoCreateInstance(
    24         CLSID_FilterGraph,
    25         NULL,
    26         CLSCTX_INPROC_SERVER,
    27         IID_IGraphBuilder,
    28         (void**) &pGraph
    29         );
    30 
    31     // 如果创建失败 返回
    32     if (FAILED(hr))
    33     {
    34         return 0;
    35     }
    36 
    37     // 使用 Filter Graph Manager 得到 MediaControl & MediaEvent
    38     hr = pGraph->QueryInterface(IID_IMediaControl,(void**)&pControl);
    39     hr = pGraph->QueryInterface(IID_IMediaEvent,(void**)&pEvent);
    40 
    41     // 设置渲染一个视频文件
    42     hr = pGraph->RenderFile(L"E:/学习/WPF/VS2008WPFVideo07.wmv",NULL);
    43 
    44     if (SUCCEEDED(hr))
    45     {
    46         // 使用 pControl 的 RUN 方法,开始播放视频
    47         hr = pControl->Run();
    48 
    49         if (SUCCEEDED(hr))
    50         {
    51             // 等待播放结束
    52             long evCode;
    53             pEvent->WaitForCompletion(INFINITE,&evCode);
    54         }
    55     }
    56 
    57     // 释放资源
    58     pControl->Release();
    59     pEvent->Release();
    60     pGraph->Release();
    61     // 释放COM库
    62     CoUninitialize();
    63 
    64     return 0;
    65 }

    DirectShow 是基于COM 组件的, 所以在使用前最好先了解一下COM编辑的一些基础的知识.

    最近也是刚开始接触DS ,因为在做新媒体应用 的时候总是很常用到.所以很有了解学习的必要

    做了一个最简单的入门程序(来自己网络),用来敲开DirectShow的大门!!!

  • 相关阅读:
    极速安装JumpServer
    高并发限流策略
    JDK1.8源码分析:Future和FutureTask-任务异步执行结果
    nginx 转发 header 数据丢失
    zookpeer 和 redis 集群内一致性协议 及 选举 对比
    Spring Boot 中 Druid 的监控页面配置
    eclipse使用正则表达式查找替换
    jvm 线程状态
    Redis做分布式锁
    Dubbo的异常处理
  • 原文地址:https://www.cnblogs.com/easyfrog/p/3391121.html
Copyright © 2011-2022 走看看