博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DirectShow 制作在Unity3D中可以设置进度的视频播放插件
阅读量:5162 次
发布时间:2019-06-13

本文共 1780 字,大约阅读时间需要 5 分钟。

     如果想在Unity3D中去播放视频文件,那么最方便的方法就是使用它自带的MovieTexture. 可以实现简单的视频播放功能. Play Pause Stop. 有也只有这三个功能,  如果你想要一个进度条,并且可以随意的拖拽视频的进度的话, 那就不能满足你的需求了.  所以想使用 DirectShow 这个视频开发包.来实现我们的想法.

     这东西是基于COM组件的一套 C++ 开发库. 所以花了两天时间,各种Google. 把这个功能实现了, 在这里把流程记录一下,做为备忘.

   DirectShow 是由各种的 过虑器(Filter) 及 接口(Interface) 组成的. 处理过程就是 根据你的需求,构建 Filter图表,然后 使用 IMediaControl->Run() 方法.运行这个图表,就可以了.我们这里的 图表是这样的 :

 

使用 FilterGraphManager 做为总的管理类.   所以一切的开始都要先 构建一个 IGraphBuilder : 创建 的方法与创建 IBaseFilter的方法相同 是这样的:

1     // Initialize COM Libs *初始化COM库 别忘了*2     hr = CoInitialize(NULL);3     // Filter Graph4     hr = CoCreateInstance(5         CLSID_FilterGraph,     // CLSID6         NULL,7         CLSCTX_INPROC_SERVER,  // SERVER8         IID_IFilterGraph,      // IID (Interface ID)9         (void**)&pGraph);      // var's Ptr

从过滤器(Filter)中,获得接口的方法是这样的:

1 // Sample Grabber Filter 这是构建 ISampleGrabber 过滤器 2     hr = CoCreateInstance( 3         CLSID_SampleGrabber,     // 注意 CLSID的变化 4         NULL, 5         CLSCTX_INPROC_SERVER, 6         IID_IBaseFilter,                // IID 为 IBaseFilter  7         (void**)&pGrabberF); 8     // *将视频捕捉Filter加入图表* 9     pGraph->AddFilter(pGrabberF,L"Sample Grabber");10     11         // *得到接口*12     pGrabberF->QueryInterface(IID_ISampleGrabber,(void**)&pGrabber);

这是从FilterGraph 构建SourceFilter 也就是得到 源文件过滤器:

1 // 媒体文件 我们传入的是 char* 字符串,这里需要转化WCHAR 宽字节2     TCHAR _fileName[MAX_PATH];3     memset(_fileName,0,sizeof(_fileName));4     MultiByteToWideChar(CP_ACP,0,fileName,strlen(fileName)+1,_fileName, sizeof(_fileName)/sizeof(_fileName[0]));  5         // 这是 构建 源文件过滤器 Filter6     hr = pGraph->AddSourceFilter(_fileName,L"Source Filter",&pSrc);

记录的流程与代码先写这么多。。 自己写的一个 VideoCapture 类,已经同步到百度云了。 以后如果有疑问可以翻出来看看~~    都是记忆碎片呀~~ ^_^

 

 

转载于:https://www.cnblogs.com/easyfrog/p/3415151.html

你可能感兴趣的文章
学习springMVC实例1——配置和跳转到HelloWorld
查看>>
寻找完美平方数
查看>>
初学反编译-.-
查看>>
防御式编程
查看>>
单线程并发的server端
查看>>
View可以设置tag携带数据
查看>>
individual reading task ---12061183 叶露婷
查看>>
delphi的消息对话框
查看>>
java:Apache Shiro 权限管理
查看>>
38.输出1到最大的N位数[Print 1 to max number of N bits]
查看>>
ZOJ - 2165 Red and Black
查看>>
objective c的注释规范
查看>>
FreeNas安装配置使用
查看>>
机器学习中的F1-score
查看>>
编译安装php5.5.38
查看>>
常用查找数据结构及算法(Python实现)
查看>>
Scrapy框架-CrawlSpider
查看>>
Django(一)框架简介
查看>>
java.lang.OutOfMemoryError: Java heap space
查看>>
popular short sentences
查看>>