Windows Media Foundation 使用 IMFTransform 将 mp4 电影帧解码为 2D 纹理

2023-12-24

我正在尝试使用 Windows Media Foundation 类解码 mp4 视频,并将帧转换为可由 DirectX 着色器用于渲染的 2D 纹理。我已经能够使用读取源流MF从URL创建SourceReader并能够读取具有主要类型的流的媒体类型MFMEdiaType_Video和次要类型为MFVideoFormat_H264正如预期的那样。

我现在需要将此格式转换为 RGB 格式,该格式可用于初始化 D3D11_TEXTURE2D 资源和资源视图,然后将其传递到 HLSL 像素着色器进行采样。我已经厌倦了使用IMF变换类为我进行转换,但是当我尝试将转换上的输出类型设置为任何 MFVideoFormat_RGB 变体时,我收到错误。我还尝试在源阅读器上设置新的输出类型,并进行采样,希望获得正确格式的样本,但我再次没有运气。

所以我的问题是:

  • 这种类型的转换可能吗?

  • 这可以通过 IMFTransform/SourceReader 类来完成吗?就像我上面已经厌倦的那样,我是否只需要调整代码,或者我是否需要手动进行这种类型的转换?

  • 这是将视频纹理数据输入着色器进行采样的最佳方法还是有我没有想到的更简单的替代方法。

使用的操作系统是 Windows 7,因此我无法使用 SourceReaderEx 或 ID3D11VideoDevice 接口,因为据我所知,这些解决方案似乎仅在 Windows 8 上可用。

任何正确方向的帮助/指针将不胜感激,如果需要,我还可以提供一些源代码。


这种类型的转换可能吗?

对的,这是可能的。库存H.264 视频解码器 https://msdn.microsoft.com/en-us/library/windows/desktop/dd797815MFT 是“Direct3D 感知”,这意味着它可以利用 DXVA 将视频解码为 Direct3D 9 表面/Direct3D 11 纹理。或者,如果硬件能力不足,也可以采用软件回退模式。出于性能原因,您有兴趣将输出直接传递到纹理中(否则您必须自己加载此数据,从而消耗 CPU 和视频资源)。

这可以通过 IMFTransform/SourceReader 类来完成吗?就像我上面已经厌倦的那样,我是否只需要调整代码,或者我是否需要手动进行这种类型的转换?

IMFTransform是抽象接口。它由 H.264 解码器(以及其他 MFT)实现,您可以直接使用它,或者您可以使用更高级别的 Source Reader API 来让它管理从文件读取视频并使用此 MFT 进行解码。

也就是说,MFT 和 Source Reader 实际上并不是唯一的替代选项,而是更高和更低级别的 API。 MFT 接口由解码器提供,您负责输入 H.264 并排出解码输出。 Source Reader 管理相同的 MFT 并添加文件读取功能。

来源阅读器 https://msdn.microsoft.com/en-us/library/windows/desktop/dd374655顺便说一句,它本身在 Windows 7 中可用(即使在 Vista 上,但与较新的操作系统相比,功能集可能会受到限制)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows Media Foundation 使用 IMFTransform 将 mp4 电影帧解码为 2D 纹理 的相关文章

  • 使用 ffmpeg 将视频与其自身连接,但相反

    我能够逆转 ffmpeg i input mp4 vf reverse output reversed mp4 我可以连接 ffmpeg i input mp4 i input mp4 filter complex 0 0 0 1 1 0
  • VideoJs 在 Firefox 中的 Flash 回退问题

    我尝试将 videoJs 添加到我的网站来播放 MP4 文件 所有这些在 Chrome 中都能完美运行 但当我转到 Firefox 不支持 MP4 文件 时 Flash 播放器停留在黑屏上 按钮不执行任何操作 简单的问题 为什么 我不明白
  • Windows 批处理:如何添加主机条目?

    我想使用此批处理脚本通过使用自动将新条目添加到我的主机文件中windows questions tagged windows batch 不幸的是 剧本只需在主机文件中添加一行 当我以管理员身份运行脚本时 又出了什么问题 echo off
  • 流媒体视频文件?

    我需要流式传输 flv 文件 流媒体应该看起来像直播 我应该有一种方法可以更改目标文件 抱歉我的英语不好 如果 流式传输 的意思是 显示 Flash 视频剪辑 则 flv streaming 并不是真正的流式传输 而是正常的文件传输 即使文
  • 创建另一个进程的 HWND 的子窗口? (例如屏幕保护程序预览)

    我正在用 Java 编写一个屏幕保护程序 它主要适用于 Windows 但我更希望它尽可能便携且实用 根据http support microsoft com kb 182383 http support microsoft com kb
  • 有没有办法在 .ogg 视频完全加载之前知道其文件大小?

    我知道 ogg 视频和 mp4 视频之间的一个区别是 ogg 视频没有描述文件大小的元数据 因此当加载 ogg 视频时 控件无法显示文件完全加载之前的剩余时间 如果 ogg 视频长度超过几分钟 这可能会成为问题 有没有办法在请求页面时获取此
  • 如何在没有拓扑的情况下将 Windows Media Foundation 与 UWP 结合使用

    我一直在阅读 Polinger 的书 开发 Microsoft Media Foundation 应用程序 以便了解 Hololens 的 Microsoft 示例 MixedRemoteViewCompositor 文本的一个关键概念是媒
  • 如何防止文件重定向到 VirtualStore 来读/写文件?

    我正在使用 C 和 net 2 0 我将程序数据保存在以下文件中 C ProgramData MyProgramName fileName xml 安装并运行我的应用程序一次后 我将其卸载 在卸载过程中 我从 程序数据 中删除了所有文件 然
  • 检测注册表虚拟化

    我有一组 C v2 应用程序 并且在 Win7 以及较小程度上的 Vista 中的注册表虚拟化方面遇到了困难 我有一个共享注册表配置区域 我的应用程序需要在 HKLM Software Company 中访问该区域 在 Vista 之前 所
  • 用于裁剪和转置视频的 FFMPEG 命令放大后质量较差

    我正在尝试将尺寸通常为 960x720 的 mp4 视频转换为方形 480 480 视频 但它通常看起来被压扁 命令是 y i s vf crop 480 480 transpose d threads 5 metadata s v rot
  • 如何从 Linux 命令行获取视频文件的分辨率(宽度和高度)?

    我一直在挖掘 mplayer mencoder 和 ffmpeg 文档 但我似乎无法想出anything 我对输出格式不是特别挑剔 因为我可以使用正则表达式将其拉出来 我只是似乎无法首先获取数据 Use ffprobe https ffmp
  • 如何使用javascript将视频文件转换为字符串?

    我在 signalR 工作 我想通过将视频文件拆分为不同部分来将视频文件从一个客户端发送到另一个客户端 我已经通过分割图像源数据发送图像并在另一个客户端上接收该图像 document getElementById fileUpload ad
  • 如何在 Windows 7 中使用 Python 廉价地创建非常大的文件? [复制]

    这个问题在这里已经有答案了 可能的重复 在Windows系统上快速创建大文件 https stackoverflow com questions 982659 quickly create large file on a windows s
  • Android 从 C++ 端播放原始音频

    我需要能够在 Android 系统的 C 端以自定义文件格式传输音频 我正在致力于移植自定义媒体播放器 并且需要能够打开自定义文件并从中传输音频 这很重要 因为我认为从性能角度来看将整个播放器移植到 JAVA 是不可行的 并且通过 JNI
  • iOS 如何触发视频退出全屏后继续播放?

    我正在构建一个在 iOS 中播放视频的网站 我有一个在 iOS 中工作的全屏按钮 但是退出全屏时视频会暂停 有谁知道一种方法可以强制视频在退出全屏时继续播放 或者如何设置一个侦听器来触发视频在退出全屏时自动播放 这是我的代码
  • FFmpeg - 来自 NodeJS 的 RTMP 流,流比实时更快

    我的目标是在 Node 中渲染画布 并将该画布流式传输到 RTMP 服务器 最终是 Twitch 但现在我正在在本地 RTMP 服务器上测试 流式传输到 RTMP 的标准方式似乎是ffmpeg 所以我使用它 从 NodeJS 中作为子进程生
  • 了解 JavaScript - 资源

    使用 StackOverflow 的微型 Digit Blog 功能进行描述here https stackoverflow com about 我想发布以下我刚刚看到的 我觉得很有趣的谷歌技术谈话视频 我一直在理解 javascript
  • 在 Windows 7 中使用 ActivePerl @ARGV 为空

    我有以下 Perl 脚本 我正在尝试使用 ActivePerl 在 Windows 7 中运行它 c Perl64 bin perl exe w use strict my mp3splt exe c Program Files x86 m
  • 如何强制我的 .NET 应用程序以管理员身份运行?

    一旦我的程序安装在客户端计算机上 如何强制我的程序以管理员身份运行Windows 7的 您需要修改嵌入到程序中的清单 这适用于 Visual Studio 2008 及更高版本 项目 添加新项目 选择 应用程序清单文件 改变
  • 证书问题 - Windows 7 升级后导入密钥“对象已存在”时出错

    我有大约 60 个 pfx 文件 用于项目的所有主要程序集 它们是独特的文件 但我对所有文件使用相同的密码 从 Windows Vista 升级到 Windows 7 后 当我在 Visual Studio 2008 中单击 生成 时 会出

随机推荐

  • 路由音频输入以从 iPhone 上的 TOP 麦克风接收

    我正在编写一个小应用程序来录制多个曲目并相互播放 我正在使用 PlaybackAndRecord 模式 并将输出路由到主扬声器 问题是底部麦克风仍然用于输入 所以现在当我录制时 我会在新轨道上得到其他轨道的输出 声音非常大 这是我到目前为止
  • 在 Python 中解析 PAC 文件而不使用 C 模块

    我处于无法使用 pacparser 库的困境 我希望有人有一个纯 python 解决方案 没有 C c 模块 我有一个返回多个代理的 PAC 文件 function FindProxyForURL url host if isPlainHo
  • Jetty注解超时原因

    我正在使用 Maven jetty 插件运行我的 Web 应用程序 但启动一段时间后 出现错误 INFO Web defaults org eclipse jetty webapp webdefault xml INFO Web overr
  • 仅使用 Android 中的电子邮件客户端应用程序发送电子邮件

    我想实现一个发送电子邮件的选项 现在我可以发送电子邮件 但问题是 Android 显示了许多可以发送的应用程序 例如蓝牙 facebook 消息等 但这些不是必需的 我需要避免这种情况并仅显示电子邮件客户端应用程序 Intent inten
  • 在 shell 脚本之间导出变量

    我有两个独立运行的脚本 第一个假设脚本 A 计算一些值 我想从其他名为 B 的脚本中回显这些值 这些脚本不会互相调用 我使用了导出关键字 但没有用 我怎样才能做到这一点 如果我理解了这个要求 那么两个脚本就不能简单地在同一个子 shell
  • rsync .git 目录

    这个问题可能是因为我对 gits 和 git 存储库的一般作用缺乏了解 但是 我可以将目录与我创建的内容同步吗git init机器之间 我的笔记本电脑上有一个存储库 将其从那里获取的唯一方法是 scp rsync 到远程主机 我可以从中再次
  • 在 C 中将字母转换为数字

    我正在尝试编写一个将字母转换为数字的代码 例如 一个 gt 0 B gt 1 C gt 2 等等 我正在考虑编写 26 个 if 语句 我想知道是否有更好的方法来做到这一点 谢谢你 这是我觉得比以前更好的方式switch方法 但符合标准 不
  • 函数无法处理较大的 n 值(接近 400)

    这是来自一个统计项目 我定义了下面的函数 但是当 n 接近 400 时 第二个方法很慢 第一个方法很好 这里有些人帮助了我在这个问题中 https stackoverflow com questions 32608913 how to op
  • 使用libxml2 sax解析器时如何从xml中获取属性的名称和值?

    我一直试图通过使用 libxml2 解析 iPhone 应用程序上的 api 来检测一些通用 xml 中属性的名称和值对 对于我的项目来说 解析速度非常重要 所以我决定使用 libxml2 本身而不是使用 NSXMLParser 现在 参考
  • ubuntu 中的 libc 还是 glibc?

    我对这些库有点困惑 我现在在 Ubuntu 上工作 我使用 g 5 我看到我的应用程序链接在 libc so 中 它是Ubuntu的C标准库的实现吗 和glibc有区别吗 ldd application exe libc so 6 gt l
  • 分离实体和延迟加载字段 - 工作线程

    我有以下问题 A 类从数据库中检索一些对象 这些对象本身就是可运行的 并在线程池中运行它们 它们需要在运行时更新其状态 它们更新在其上注册的侦听器 问题是它们在实体处于分离状态时访问延迟加载的字段 因为事务仅覆盖主线程 所以当然有例外 调用
  • 如何使用Serde解析多种不同类型的YAML文件? [复制]

    这个问题在这里已经有答案了 我正在尝试解析这个 YAML 文件 application build something container name another thing environment ONE ENV fake SEC EN
  • 如何加速rbind?

    我应该从 MS SQL 服务器下载一个表 行数大于600万 服务器无法一次返回全部数据 因此 我编写了一次下载 10 000 行的代码 并且 它在循环中绑定行 假使 假设getData 函数一次返回一个包含 10000 行的数据框 伪代码
  • 更改 NSButton 突出显示的背景颜色

    我有一个 NSButton 我希望在突出显示时和不突出显示时具有不同的背景颜色 不突出显示时透明 如果这有什么区别 目前 我有以下代码 view setWantsLayer YES NSButton button NSButton allo
  • 使用 JSF、JDBC 和 HttpServlet 搜索和检索 dataTable 中的数据 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 以下是我的代码 我的豆子 impor
  • 无法重现keycloak直接裸冒

    经过一番努力 我还是无法重现直接裸冒OIDC的功能 refs https www keycloak org docs latest securing apps direct naked impersonation https www key
  • java - 使用数组调用 PL/SQL 存储过程

    我有一个类似于以下内容的 PL SQL 存储过程 我需要在 Java 中调用它 TYPE AssocArrayVarchar20 t is table of VARCHAR2 20 index by BINARY INTEGER TYPE
  • std::map 与 std::pair 键,其中对元素没有顺序重要性

    正如问题所说 我需要以这种方式使用 std map std map
  • GridLayout的rowOrderPreserved和columnOrderPreserved

    有人可以解释一下吗GridLayout s rowOrderPreserved and columnOrderPreserved mean 我不明白这些文档 将值设置为 true 或 false 有什么区别 插图会很有帮助 考虑下面的代码G
  • Windows Media Foundation 使用 IMFTransform 将 mp4 电影帧解码为 2D 纹理

    我正在尝试使用 Windows Media Foundation 类解码 mp4 视频 并将帧转换为可由 DirectX 着色器用于渲染的 2D 纹理 我已经能够使用读取源流MF从URL创建SourceReader并能够读取具有主要类型的流