2010-06-11 31 views
1

是否有方法来捕获每个WPF MediaElement框架?就像在每个渲染框架中触发并允许我访问它的事件一样。如果MediaElement没有提供这样的功能,那么它如何实现或者我可以使用哪些其他控制?请注意,是否有这样一种控制或方法可以实现在屏幕上快速渲染带有帧捕捉的媒体剪辑? (所以我可以尽可能快地处理帧)捕获每个WPF MediaElement框架

回答

3

试用我的WPF MediaKit项目。允许您使用Media在WPF中执行任何操作。试用MediaDetector.cs,它可以让你随时从媒体中提取出帧。这是一个小错误,因为我从来没有花太多时间,但应该为你需要的东西工作。

+0

+1这很好,但我不确定在获取每一帧时会有多稳定。我可以根据每秒媒体帧的数量得到一帧定时器发射,但我猜测它仍然容易产生四舍五入误差和时间变化,以便捕获和返回帧... – luvieere 2010-06-13 05:36:27

+1

我将修改MediaUriPlayer.cs文件以将SampleGrabber过滤器添加到图中以接收每个样本。您可以通过查看VideoCapturePlayer.cs来了解如何执行此操作,因为它会接收每个样本。将传递的IntPtr转换为位图的代码位于MediaDetector.cs中。所以简而言之,我相信我的项目有你需要的所有代码,但是有一些复制/粘贴重构要做:) – 2010-06-14 21:33:53

+0

WPF媒体工具包已经转移到https://github.com/Sascha-L/WPF-MediaKit – xmedeko 2017-08-31 09:54:30

0

没有内置WPF方式:

  • 的MediaElement不具备这种能力。
  • BitmapDecoder提供API来请求这一点,但是使用BitmapDecoder从任意媒体中提取帧没有实现:它只能从几个动画位图格式(如.gif)中提取帧。

我能够使用DirectShow从.mpg,.wmv,.mov,.flv,.avi和其他电影格式获取帧图像。我使用DirectShow的COM图形构建器接口构建了一个过滤器图形。生成的滤镜图解码电影并将其连接到用C#编写的自定义渲染器过滤器。我的自定义过滤器接收到帧数据,并将其转换为BitmapSource对象以供使用BitmapSource.Create进行显示。

DirectShow解决方案执行得非常好,托管到非托管转换没什么大不了的,但花了一段时间才弄清楚了DirectShow图形构建的细节。