高于 FullHD 分辨率的帧丢失。MediaFoundation 中是不是提供 AVI Decompressor 变换过滤器?

Posted

技术标签:

【中文标题】高于 FullHD 分辨率的帧丢失。MediaFoundation 中是不是提供 AVI Decompressor 变换过滤器?【英文标题】:Frame loss for above FullHD resolution .Is AVI Decompressor transform filter available in MediaFoundation?高于 FullHD 分辨率的帧丢失。MediaFoundation 中是否提供 AVI Decompressor 变换过滤器? 【发布时间】:2017-01-19 12:41:05 【问题描述】:

我正在使用 SourceReader MediaFoundation 技术为桌面开发一个多媒体流应用程序。

我正在使用 USB 摄像头设备来显示流媒体。相机支持两种视频格式:YUY2 和 MJPG

对于 1980x1080p YUY2 视频分辨率,60fps 只能接收 48fps。我从 MSDN 页面获取 YUY2-RGB32 转换并在我的应用程序中使用(注意:我没有使用任何变换过滤器进行颜色转换)。

对于MJPG视频格式,我使用MJPEG Decoder MFT将MJPG - YUY2 - RGB32转换成Direct3D9在窗口上显示。对于特定分辨率,我正面临从 60fps 到 30fps 的帧率下降(Ex: 1920x1080 60fps 但仅绘制 30-33fps)。

两种方法,我在 Graphedit 中验证以确认过滤器:

    添加了 MJPEG Decompressor 过滤器,并为 MJPG 视频格式构建图表,以检查 fps 是否为 FullHD 分辨率,显示 28fps 为 60fps。

    添加了 AVI 解压器过滤器并为 MJPG 视频格式构建图表,以检查 fps 的 FullHD 分辨率及其显示 60fps。

我在许多网站上搜索过用于媒体基础的 AVI 解压缩器,但没有运气。

有人确认,MFT 中是否有可用的过滤器?

【问题讨论】:

这可能会有所帮助:***.com/questions/9111362/… 但是,在 Windows 8(及更高版本)上,我建议使用 Video Processor MFT 而不是 Color Converter DSP 从 YUY2 转换为 RGB32。 Video Processor MFT 应该更快,因为它使用图形硬件。此外,如果您使用 IDirect3dDeviceManager9 进行配置,视频处理器 MFT 应该直接为您提供 RGB32 IDirect3DSurface9 表面(包装在 IMFMediaBuffer 中)。 这是 USB3 相机吗?我不认为带有 YUY2 或 MJPEG 的 1080p60 无法使用 USB2 相机。您是否确认您在没有任何解码器的情况下获得了 60fps? (NullRenderer 或写入 avi) 是的,它的 USB3 摄像头,支持 ​​YUY2 和 MJPEG 的 60fps。在不使用任何解码器的情况下,我可以达到 60fps。所以我的设备没有问题。 感谢您的回复,VuVrit。我没有在我的应用程序中配置 IDirect3dDeviceManager9。如果不进行此配置,我将接收 RGB32 帧,并且对于 1920x1080 YUY2 格式可以实现 49 到 53fps 的帧速率,但帧绘制非常非常慢。它在窗口上渲染像 4 到 5 fps...是否需要配置这个接口来解决这个渲染问题?如果是,你能指导我写一个配置它。 任何想法,Vuvrit? 【参考方案1】:

Microsoft 提供带有库存 Motion JPEG 解码器的 [最新版本] Windows:

MJPEG Decompressor Filter DirectShow 用于媒体基础的 MJPEG 解码器 MFT

据我所知,它们不共享代码库,但两者都不应该是性能高效的解码器。

您使用 GraphEdit 意味着您正在尝试 DirectShow 解码器,而 AVI Decompressor 据说正在使用您未识别的另一个(Windows 视频)编解码器。

对于 Media Foundation,如果您有相应的硬件和驱动程序,您也许可以使用 Intel Hardware M-JPEG Decoder MFT 或 NVIDIA MJPEG Video Decoder MFT。据推测,供应商特定的解码器提供更好的性能,并且与通用软件同行相比也具有更高的优先级。除此之外,对于 MFT 形式因素,您可能需要查看商业解码器和/或定制开发,因为 API 本身并不是很受欢迎,无法提供广泛的选项。

【讨论】:

感谢您的回复,Roman...我使用图形编辑工具来验证 DirectShow 中的 fps。我将列举英特尔硬件 M-JPEG 解码器 MFT 并在我的应用程序中使用它。为什么 1920x1080 YUY2 分辨率会出现丢帧?我正在使用此 MSDN 页面中的颜色转换算法:msdn.microsoft.com/en-us/library/windows/desktop/…。你能告诉我原因吗?再次感谢您。 您可能会使用不同的选项遇到不同的瓶颈。使用 MJPG 视频慢速解码器可能会成为瓶颈,您可能会得到原始问题中描述的症状。如果您捕获 YUY2,则没有解码步骤,但带宽可能是一个问题,也是捕获帧速率降低的原因,以及在演示时上传到视频子系统的速度较慢。

以上是关于高于 FullHD 分辨率的帧丢失。MediaFoundation 中是不是提供 AVI Decompressor 变换过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

当分辨率高于 320 像素时,Mandelbrot 代码不令人兴奋? [复制]

当屏幕分辨率高于 1920x1080 时捕获视频

视频帧数,普清,高清,超清,分辨率

iPhone 6和6 plus给出错误的帧,边界值[重复]

我可以在 nVidia GPU 中使用硬件编码器 NVEN 压缩 8 个 FullHD 30fps 视频流吗?

小米12x参数配置详细