DSPack各种使用方法

简介: DSPack各种使用方法 2009年08月23日 星期日 16:13 一:用DSPack播放视频 首先,要阅读一下(DSPackDir)\help目录下的help.chm文件,粗略地看了一下,内容太多看不出头绪。
DSPack各种使用方法
2009年08月23日 星期日 16:13

一:用DSPack播放视频

首先,要阅读一下(DSPackDir)\help目录下的help.chm文件,粗略地看了一下,内容太多看不出头绪。
还是先学习一下(DSPackDir)\Demos\D6-D7目录下的那些例子,边动手做边学习吧。

研究的第一个例子是PlayWin。研究了一下,主要使用TFilterGraph和TVideoWindow来完成。
TFilterGraph是DSPack中的核心类,其他类都要围绕着它,但是怎么理解它还不清楚。TVideoWindow是个显示播放视频的控件。这两个类的关系好像是数据库控件中Dataset控件和DBGrid控件的关系一样。

看得差不多后,自己照葫芦画瓢仿制一个。

1. 新建一个应用,在界面上先放4、5个按钮。
2. 在控件面板上选择DSPack那页,把前两个控件(TFilterGraph和TVideoWindow)在窗口上各放一个。
3. 关联
   选中VideoWindow1控件,在属性窗口中将FilterGraph属性设置为FilterGraph1。
   选中FilterGraph1控件,确认属性窗口中的Mode属性为gmNormal。

4.为Form1增加一个onCreate事件处理程序。
内容为:
    if not FilterGraph1.Active then FilterGraph1.Active := true;
    FilterGraph1.ClearGraph;
    FilterGraph1.RenderFile('E:\v\951.wmv'); // 简化一点,这里用你本地硬盘上的一个视频文件

5. 为Form1增加一个onCloseQuery事件处理程序。
内容为:
    FilterGraph1.Active := false ;

6.把button1的Caption改为Start,并增加一个OnClick事件
内容为:
    FilterGraph1.Play;

运行一下,就可以播放了。下面再增加几个功能按钮,如pause、stop。

7. 把button2的Caption改为Pause,并增加一个OnClick事件
内容为:
   FilterGraph1.Pause;


8. 把button3的Caption改为Stop,并增加一个OnClick事件
内容为:
    FilterGraph1.stop;

可以看出4-8步都是调用了TFilterGraph类的方法。

下面,再增加个全屏功能吧。
9. 把button4的Caption改为FullScreen,并增加一个OnClick事件
内容为:
    VideoWindow1.FullScreen :=true ;
   
10. 为VideoWindow1增加一个OnClick事件
内容为:
if videowindow1.FullScreen then
    videowindow1.FullScreen := false ; //退出全屏方式

一般的视频播放创窗口都有一个进度条,现在我们也来加一个。
A.1. 在DSPack控件面板上选择倒数第2个控件(TDSTrackBar),放到在窗口上。
A.2. 关联
   选中DSTrackBar1控件,在属性窗口中将FilterGraph属性设置为FilterGraph1。(这一步好像很熟悉哦)

重新运行程序,你就会看到一个进度条,并且能够使用这一进度条来调整播放的进度。

二:使用DSPack打开摄像头

现在我们来看看(DSPackDir)\Demos\D6-D7目录下的PlayVideoCap,这是一个打开本机的视频输入设备的例子。

在这个例子中,又用到了一个新类:TFilter。

在我们依葫芦画瓢之前,你要装个摄像头或虚拟摄像头。虚拟摄像头可以用VCDCut、Softcam或Vcam等软件,也可以使用9158(http://www.9158.com/)或MVBox(http://www.mvbox.cn/)的虚拟视频。

先跟上次一样:

1. 新建一个应用,在界面上先放4、5个按钮,这次多放一个Listbox,这个列表框中将列出系统中安装的视频输入设备。
2. 在控件面板上选择DSPack那页,把前两个控件(TFilterGraph和TVideoWindow)在窗口上各放一个。

下面该有所不同了

3.在DSPack中选择TFilter控件,放到窗口上。
4.选中FilterGraph1控件,在属性窗口中将Mode属性设为gmCapture。
5. 关联
   选中VideoWindow1控件,将FilterGraph属性设置为FilterGraph1。
   选中Filter1控件,将FilterGraph属性设置为FilterGraph1。

6. 在代码模式中,在Interface后的Uses中增加
DSUtil, DirectShow9,
在implementation前面的Var中增加
SysDev: TSysDevEnum;


7. 为Form1增加一个onCreate事件处理程序,读取系统中的视频输入设备。
内容为:
var
i: integer;
begin
// 读取系统中的视频输入设备
SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
if SysDev.CountFilters > 0 then
    for i := 0 to SysDev.CountFilters - 1 do
    begin
      Listbox1.Items.Add(SysDev.Filters[i].FriendlyName)
    end;

end;

7. 同前。为Form1增加一个onCloseQuery事件处理程序。
内容为:
    SysDev.Free;
    FilterGraph1.ClearGraph;
    FilterGraph1.Active := false ;

8. 为Listbox1增加一个onClick事件处理程序
内容为:
FilterGraph1.ClearGraph;
FilterGraph1.Active := false;
//设filter为所选视频输入设备
Filter1.BaseFilter.Moniker := SysDev.GetMoniker(Listbox1.ItemIndex);
FilterGraph1.Active := true;
// 打开所选的视频输入设备
with FilterGraph1 as ICaptureGraphBuilder2 do
    RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter1 as IBaseFilter, nil, VideoWindow1 as IbaseFilter);
// 显示出来
FilterGraph1.Play;


运行一下试试,看是否能看到自己的摄像头的内容。


几个按钮没用,等到下一个例子用吧。
三:DSPack抓帧
在例子PlayVideoCap中,还有抓帧和回放的功能。这用到第4个控件TSampleGrabber。

我们以前两个例子为基础,增加抓帧的功能。
打开前面的例子,然后:

1. 在DSPack中选择TSampleGrabber控件,放到窗口上。然后将其FilterGraph属性设置为FilterGraph1。
2. 在选择一个标准控件TImage(在Additional页签中),放在窗口上。
3.讲一个没用的按钮的Caption改为“Snapshot”,在它的OnClick事件中写:
SampleGrabber1.GetBitmap(Image1.Picture.Bitmap);

前面两个例子都可以这样增加抓帧功能。不过,对于第二个例子(即操作摄像头的例子),需要做额外的修改,就是:

    RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter, nil, VideoWindow as IbaseFilter);
改为
    RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter, SampleGrabber as IBaseFilter, VideoWindow as IbaseFilter);

这样就可以了

相关文章
|
8月前
PADS新建封装
前面我们已经讲解过如何新建一个电阻元器件,那么接下来我们就要新建一个该电阻元器件在现实世界中的映射——封装(Footprint)。打开PADS Layout,执行如下步骤: 1、打开库管理器,选中新建的库ubug_lib,点击“封装”按钮后“新建”按钮变为可点击,如下图所示:
158 0
|
8月前
|
安全
PADS VX1.2安装
关于PADS的文章都是基于PADS VX1.2进行讲解的,所以这里提供PADS VX1.2的下载及安装。下载方法:在公众号回复“PADS下载”获取下载链接(百度网盘)。下面我们来讲一下安装过程,主要提一下需要注意的环节,其它的都是正常点击“同意”或者“下一步”即可。
576 0
|
10月前
|
存储 JSON 安全
msgpack,fmtlib和RPClib库的介绍及使用
msgpack,fmtlib和RPClib库的介绍及使用
|
存储 JSON 缓存
MessagePack - 简介及使用
MessagePack - 简介及使用
692 1
MessagePack - 简介及使用
|
并行计算 数据安全/隐私保护 计算机视觉
TX2 通过jetpack 配置环境 详解步骤
TX2 通过jetpack 配置环境 详解步骤
TX2 通过jetpack 配置环境 详解步骤
|
Python
Python----configparser模块的用法
Python----configparser模块的用法
461 0
|
Shell Python Windows
Python参数配置库ConfigParser详解
参数配置是项目开发过程中必不可少的环节,好的参数配置能够提升代码的易读性、开发效率、减少维护成本。其中,常见的就是自己实现一个Python函数去解析一个配置文件,本文将会介绍一个Python自带的配置文件解析工具包,让参数配置变的更加简单易懂。
|
测试技术
如何使用 jMeter CSV Data Set config
如何使用 jMeter CSV Data Set config
如何使用 jMeter CSV Data Set config
|
分布式计算 分布式数据库 Spark
X-Pack Spark使用[FAQ]
概述 本文主要列出在使用X-Pack Spark的FAQ。 Spark Connectors 主要列举Spark 对接其它数据源遇到的问题 Spark on HBase Spark on HBase Connector:如何在Spark侧设置HBase参数。
2252 0
X-Pack Spark用户手册
概述 Spark是大数据平台的通用计算平台,应用非常广泛。本文主要介绍Spark相关的知识,主要包括:了解Spark,使用Spark,使用Spark过程中遇到的问题FAQ等,谨帮助用户快速的掌握Spark以及如何使用Spark。
3253 0

热门文章

最新文章