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

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

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

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

     // Initialize COM Libs *初始化COM库 别忘了*
hr = CoInitialize(NULL);
// Filter Graph
hr = CoCreateInstance(
CLSID_FilterGraph, // CLSID
NULL,
CLSCTX_INPROC_SERVER, // SERVER
IID_IFilterGraph, // IID (Interface ID)
(void**)&pGraph); // var's Ptr

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

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

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

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

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

DirectShow 制作在Unity3D中可以设置进度的视频播放插件的更多相关文章

  1. Unity3D中灵活绘制进度条

    有时我们需要在Unity3D中绘制进度条,如:           或        如果使用4.6版本以下的unity绘制环形的进度条可能需要费点劲.我搜到的大多数方法都是用NGUI插件,但有时只是 ...

  2. myeclipse中UTF-8设置

      myeclipse中UTF-8设置 如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码.然而,Eclipse工作空间(workspace ...

  3. 【转】Unity3d中制作Loading场景进度条所遇到的问题 LoadLevelAsync,AsyncOperation

    背景 通常游戏的主场景包含的资源较多,这会导致加载场景的时间较长.为了避免这个问题,可以首先加载Loading场景,然后再通过Loading场景来加载主场景.因为Loading场景包含的资源较少,所以 ...

  4. Unity3d中制作异步Loading进度条所遇到的问题

    背景 通常游戏的主场景包括的资源较多,这会导致载入场景的时间较长.为了避免这个问题,能够首先载入Loading场景.然后再通过Loading场景来载入主场景. 由于Loading场景包括的资源较少,所 ...

  5. Unity3D中制作Loading场景进度条

    背景 通常游戏的主场景包含的资源较多,这会导致加载场景的时间较长.为了避免这个问题,可以首先加载Loading场景,然后再通过Loading场景来加载主场景.由于Loading场景包含的资源较少,所以 ...

  6. Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系

    2条评论 Unity3D 的 Mecanim 动画系统可以直接复用 3DS MAX 中制作的动画文件中的位移,这个就是通过 applyRootMotion 来达成的,我们只需要在使用 Animator ...

  7. Unity3d中使用摄像机制作实时显示小地图

    Unity3d中使用摄像机制作实时显示小地图,以之前的tank为例.开始制作之前场景中物体如图. 开始制作,步骤1:新建一个camera及一个plane.对齐位置,将camera改名为camera_U ...

  8. Unity3D中UGUI不使用DOTween制作渐隐渐现效果

    在做UI后期设计时,我们可能要对UI做一些特效,这篇文章我们来学习下如何在Unity3d中对实现渐隐渐现的效果, 首先我们看下Unity New UI即UGUI中渐隐渐现的做法. 观察我们会发现Uni ...

  9. (转) [教程] Unity3D中角色的动画脚本的编写(一)

    ps: 这两天研究unity3d,对动画处理特别迷糊,不知FBX导入以后,接下来应该怎么操作,看到这篇文章,感觉非常好,讲解的很详细. 已有好些天没写什么了,今天想起来该写点东西了.这次我所介绍的内容 ...

随机推荐

  1. Apache Spark 内存管理详解

    在spark里面,内存管理有两块组成,一部分是JVM的堆内内存(on-heap memory),这部分内存是通过spark dirver参数executor-memory以及spark.executo ...

  2. AngularJs $scope 里面的$apply 方法和$watch方法

    Angular $scope 里面的$apply 方法 Scope提供$apply方法传播Model变化 <!DOCTYPE html> <html> <head> ...

  3. Heritrix3.x自定义扩展Extractor

    一.引言: Heritrix3.x与Heritrix1.x版本差异比较大,全新配置模式的引入+扩展接口的变化,同时由于说明文档的匮乏,给Heritrix的开发者带来困惑,前面的文章已经就Heritri ...

  4. 基于jQuery的表单操作

    1,文本框的聚焦和失焦 在对文本框进行操作时,通常为了提升用户体验,是用户的操作得到及时的反馈,会在文本框获得焦点时,让其颜色改变,然后在失去焦点时恢复为原来的样式,一般情况下,我们可以通过css的伪 ...

  5. jenkins 定时构建 位置

    定时器构建语法 * * * * * 星号中间用空格隔开 第一个*表示分钟,取值0~59 第二个*表示小时,取值0~23 第三个*表示一个月的第几天,取值1~31 第四个*表示第几月,取值1~12 第五 ...

  6. [转]LAMP(Linux-Apache-MySQL-PHP)网站架构

    本文转自 http://www.williamlong.info/archives/1908.html LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框 ...

  7. shell 12输入输出重定向

    shell输入/输出重定向 unix系统命令从终端接受输入并将产生的输出发送回终端.命令读取输入的地方,成为标准输入,默认是终端:命令的输出,为标准输出,默认也是终端. command > fi ...

  8. Shell的for和select

    环境准备: [root@nodchen-db01-test day07]# mkdir -p /server/scripts/day07/test/{test.txt,oldboy.txt,oldgi ...

  9. Matlab2013a打开M文件乱码解决

    win10开发者英文版x64    Matlab2013a 解决方法:format改为chinese 

  10. python Web开发你要理解的WSGI & uwsgi详解

    原文:https://www.jb51.net/article/144852.htm WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,W ...