如果想在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. Jenkins进阶-Gitlab使用Webhook实现Push代码自动部署(3)

    1.Jenkins 安装完成以后,首先我们在Jenkins中需要安装一下,Gitlab Hook Plugin 插件: 2.插件安装完成我们创建任务,在任务重构建触发器下获取回调URL: 注意: 注意 ...

  2. 虚拟机 VMware Tools 安装

    Ubuntu 或具有图形用户界面的 Ubuntu Server 要挂载 CD 镜像并解压,请按以下步骤操作: 启动此虚拟机. 使用具有管理员权限或 root 用户权限的帐户登录此虚拟机. 选择:对于F ...

  3. C语言实现<读取>和<写入> *.ini文件(转)

    原地址:https://blog.csdn.net/niha1993825jian/article/details/41086403 #include <stdio.h> #include ...

  4. python下的类的部分特点

    #coding=utf-8 class data: def __init__(self): #构造函数 self.name=' def pp(self): print self.name class ...

  5. puppet 工作原理

    Puppet的工作细节分成如下几个步骤: 1.客户端puppetd调用facter,facter会探测出这台主机的一些变量如主机名.内存大小.IP地址等.然后puppetd把这些信息发送到服务器端. ...

  6. ASP.NET Web Pages:Razor

    ylbtech-.Net-ASP.NET Web Pages:Razor 1.返回顶部 1. ASP.NET Web Pages - 添加 Razor 代码 在本教程中,我们将使用 C# 和 Visu ...

  7. [UE4]蓝图转换成C++代码

    版本:4.12 1.进行如下设置 2.将项目打包出来(任意一平台都行,本文以Windows为例) 3.打包完成后才会在原项目工程中生成蓝图转换成c++的代码 4.如图路径(转换后的代码路径较深所以一步 ...

  8. osx 安装redis

    brew install redis 想关文章 http://www.tuicool.com/articles/nM73Enr http://www.iteye.com/topic/1124400

  9. Spark交互式工具spark-shell

    REPL Spark REPL Spark shell 下面我们启动一下(我这里搭建的是3节点集群) sc.后面按TAB键可以把提示调出来 查看hdfs上文件内容 这个数据从这里下载的 https:/ ...

  10. Introducing Deep Reinforcement

    The manuscript of Deep Reinforcement Learning is available now! It makes significant improvements to ...