DirectShow之接口实战篇(三)

原创 2003年05月22日 08:39:00

DirectShow之接口实战篇(三)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

播放速度的设定

需要使用ImediaPosition的方法。

MediaPosition.put_Rate(1);//正常

MediaPosition.put_Rate(0.25);//慢速

MediaPosition.put_Rate(2);//快速

 

单帧播放控制

需要使用IvideoFrameStep的方法

VideoFrameStep.Step(1, nil);

 

音量控制

需要使用IbasicAudio的方法

增加音量:
BasicAudio.get_Volume (&volume);//
得到音量
volume:= volume +volumestep;
BasicAudio.put_Volume (volume);//
增加一定的音量的分贝
减小音量:
BasicAudio.get_Volume (&volume); //
得到音量
volume:= volume -volumestep;
BasicAudio.putVolume (volume); //
减小一定音量的分贝

 

显示放大缩小控制

只需改变Edit1的大小,然后使用IvideoWindow接口方法即可

VideoWindow.SetWindowPosition(0, 0, Edit1.Width, Edit1.Height);

 

单帧捕获,抓图

其实很多接口都提供了此功能,但是我更倾向于使用IsampleGrabber接口来实现,相对来说,效率高些。

这个控制起来做的工作稍微多些,首先,在打开文件的时候

var  MediaType: TAM_MEDIA_TYPE;

ZeroMemory(@MediaType, SizeOf(TAM_MEDIA_TYPE));

    MediaType.majortype := MEDIATYPE_Video;//视频流

    MediaType.subtype := MEDIASUBTYPE_RGB24;//24位图象

    MediaType.formattype := FORMAT_VideoInfo;

    SampleGrabber.SetMediaType(MediaType);//关联接口

SampleGrabber.SetBufferSamples(True);

然后在抓图按钮事件中如下操作

var

  MediaType: TAM_MEDIA_TYPE;

  VideoInfoHeader: TVideoInfoHeader;

  BitmapInfo: TBitmapInfo;

  Bitmap: HBitmap;

  Buffer: Pointer;

  BufferSize: Integer;

begin

  SampleGrabber.GetConnectedMediaType(MediaType);

 

  ZeroMemory(@VideoInfoHeader, SizeOf(TVideoInfoHeader));

  CopyMemory(@VideoInfoHeader, MediaType.pbFormat, SizeOf(VideoInfoHeader));

 

  ZeroMemory(@BitmapInfo, SizeOf(TBitmapInfo));

  CopyMemory(@BitmapInfo, @VideoInfoHeader.bmiHeader, SizeOf(VideoInfoHeader.bmiHeader));

 

  Bitmap:=CreateDIBSection(0, BitmapInfo, DIB_RGB_COLORS, Buffer, 0, 0);

  SampleGrabber.GetCurrentBuffer(BufferSize, Buffer);

 

  Image1.Picture.Bitmap.Handle:=Bitmap

end;

即可。

 

在这里,先总结这么多,希望对大家有所帮助,这些只是DirectX的一个皮毛,它可以实现的功能十分强大,我也只是把我在实际中的遇到的问题总结出来供大家参考,后面的工作还很多,我想我会逐步的更深入的总结这方面的经验发表出来与大家分享,好了,DirectShow接口施展篇到这里该完结了,如果大家有补充或者想法,请发表出来以便我总结整理,谢谢大家。

                                                                 

                                                                    完结

DirectShow之接口实战篇、

现今自己编程做一个多媒体播放工具是一件很令人开心愉悦的事情,但如果使用MediaPlay控件开发则会受到很多限制,自己的很多好的创意想法都无法或者很难实现,如果利用微软的DirectX接口开发则可以充...
  • zhang_zxk
  • zhang_zxk
  • 2016年06月26日 19:20
  • 94

DirectShow之接口实战篇

现今自己编程做一个多媒体播放工具是一件很令人开心愉悦的事情,但如果使用MediaPlay控件开发则会受到很多限制,自己的很多好的创意想法都无法或者很难实现,如果利用微软的DirectX接口开发则可以充...
  • ccx_john
  • ccx_john
  • 2013年10月29日 13:49
  • 729

DirectShow之接口实战篇(二)

DirectShow之接口实战篇(二) 大体说来,一般使用DirectShow接口编程无非3个步骤,初始化接口,利用接口中的控制函数使用控制操作,最后释放接口。(当然这里假定你已经拥有了directs...
  • u2m
  • u2m
  • 2003年05月19日 21:30
  • 1003

DirectShow之接口实战篇_多媒体播放器

今自己编程做一个多媒体播放工具是一件很令人开心愉悦的事情,但如果使用MediaPlay控件开发则会受到很多限制,自己的很多好的创意想法都无法或者很难实现,如果利用微软的DirectX接口开发则可以充分...
  • langyifei
  • langyifei
  • 2008年05月23日 17:56
  • 2190

DirectShow之接口实战篇(一)

DirectShow之接口实战篇(一)现今自己编程做一个多媒体播放工具是一件很令人开心愉悦的事情,但如果使用MediaPlay控件开发则会受到很多限制,自己的很多好的创意想法都无法或者很难实现,如果利...
  • u2m
  • u2m
  • 2003年05月22日 08:40
  • 952

转载--DirectShow之接口实战篇

既然是接口实战篇,就先把一些常用的接口列出来,让大家有一些基本的认识,都是用来做什么的,什么时候我们会需要用到此接口。 IFilterGraph 过滤通道接口 IFilterGraph2 ...
  • Happylss
  • Happylss
  • 2010年06月09日 09:18
  • 546

Java 基础:认识&理解关键字 native 实战篇

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket     泥瓦匠初次遇见 navicat 是在 java.lang.Object 源码...
  • u010378410
  • u010378410
  • 2015年04月25日 21:10
  • 1113

spring-boot实战:shiro

有很长一段时间都觉得自己添加个filter,基于RBAC模型,就能很轻松的实现权限控制,没必要引入shiro,spring-security这样的框架增加系统的复杂度。事实上也的确这样,如果你的需求仅...
  • u014411966
  • u014411966
  • 2017年10月02日 15:43
  • 129

Storm流计算项目视频教程

Storm流计算项目视频教程 Storm在大数据领域的影响已经不用多说,大数据实时性计算已经是发展趋势。目前在各大互联网、电商、电信、金融业等领域,Storm已经功不可没,被广泛应用...
  • xkqueen2
  • xkqueen2
  • 2014年09月12日 11:14
  • 609

39 Spring Boot Shiro权限管理【从零开始学Spring Boot】

这个章节牵涉到知识点比较多,具体参考如下教程: 39.4 Spring Boot Shiro权限管理【从零开始学Spring Boot】   39.3 Spring Boot Shiro权限管理...
  • linxingliang
  • linxingliang
  • 2016年08月20日 21:59
  • 2062
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DirectShow之接口实战篇(三)
举报原因:
原因补充:

(最多只允许输入30个字)