• 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的大门!!!

  • 相关阅读:
    Kotlin之类属性延迟初始化
    Android 之ANR
    Android之Handler基础篇
    Android Handler进阶篇
    Android 进程与线程管理
    Android 启动模式LaunchMode详解(LaunchMode四种模式详解)
    Android 应用版本号配置修改
    Android ViewGroup
    Android app与Activity主题配置
    Android 本地序列化
  • 原文地址:https://www.cnblogs.com/easyfrog/p/3391121.html
Copyright © 2020-2023  润新知