Media Foundation H264 编码器的 CLSID 在哪里?

Posted

技术标签:

【中文标题】Media Foundation H264 编码器的 CLSID 在哪里?【英文标题】:Where is the CLSID for Media Foundation H264 Encoder? 【发布时间】:2014-04-23 17:48:41 【问题描述】:

Media Foundation H264 Encoder MFT 文档没有提到编码器的 CLSID。其他编码器类 ID 和 H264 解码器 MFT 类 ID 定义在

\Program Files (x86)\Microsoft SDKs\7.1\Include\wmcodecdsp.h or
\Program Files (x86)\Windows Kits\8.x\Include\am\wmcodecdsp.h 

我在枚举设备时看到此编解码器,并且可以从枚举列表中获取 CLSID,即 6ca50344-051a-4ded-9779-a43305165e35,但我找不到命名的 GUID,这是我所期望的类似于:CLSID_CH264MediaEncObject

在根据用户选择的编码器构建拓扑时,我想使用 GUID(而不是枚举名称)来做出决定。我可以定义_guid 这个,但它看起来很奇怪。

所以: 为什么 H264 编码器 MFT 没有命名 guid?

【问题讨论】:

【参考方案1】:

这看起来是故意的,因为 Media Foundation API 建议您让 API 为您选择合适的编码器。您的职责是构建合适的配置文件并让转码 API 使用请求的参数创建拓扑。

我想你知道 MSDN 的线索,但记录在案:Tutorial: Encoding an MP4 File - Create the Transcode Profile。

特别是,他们似乎希望保留对编码器选择的控制权,以便在适用的情况下自动使用硬件编码器:

Certified Hardware Encoder

如果存在经过认证的硬件编码器,通常会在 Media Foundation 相关场景中使用它来代替收件箱系统编码器。

DirectShow 中的压缩器问题之一是压缩器之间的通用列表和竞争。由于许多原因,应用程序宁愿硬编码特定的压缩器,而不是使用给定格式的最佳选择。在 MF 中,方法有所不同:配置文件定义了您最终希望输出的内容,然后 API 负责提供编码器。

【讨论】:

感谢罗曼!这有点道理。我正在尝试构建一个实时捕获应用程序,在其中从网络摄像头捕获音频+视频,但还没有看到任何好的示例或教程。这会修改你的答案吗? 我不知道好的样品。我会采用上面答案中提到的本教程,并以某种方式将其与另一个视频/音频捕获示例合并。我自己还没有接触 MF,我仍在使用 DirectShow 进行生产中的一切。【参考方案2】:

在 Windows SDK 8.1 上,名称为 CLSID_CMSH264EncoderMFT (wmcodecdsp.h)。

【讨论】:

以上是关于Media Foundation H264 编码器的 CLSID 在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Media Foundation h264 编码器设置自定义 SEI

Media Foundation 网络摄像头视频 H264 编码/解码在播放时会产生伪影

使用 Media Foundation SDK 进行直播

Windows Phone 8.1 Media Foundation H264 最大分辨率

怎样才能让windows media player能播放H264编码的AVI文件(音频是AC3)

UWP 硬件视频解码 - DirectX12 与 Media Foundation