【问题标题】:Getting codec name from IMFMediaType从 IMFMediaType 获取编解码器名称
【发布时间】:2021-09-18 23:47:51
【问题描述】:

是否可以从 IMFMediaType 获取编解码器名称?在我的代码中,我想在 IMFSourceReader 中记录与特定流索引相对应的音频或视频编解码器。从我从 IMFSourceReader::GetCurrentMediaType() 获得的 IMFMediaType 中,我获得了代码用于成功播放媒体的比特率、帧大小和所有其他参数,但我无法弄清楚如何获取编解码器名称。我查看了 https://docs.microsoft.com/en-us/windows/win32/medfound/media-foundation-attributes ,但没有看到任何有用的信息。

【问题讨论】:

  • 感谢您的指点。我将检查查询 MFT_TRANSFORM_CLSID_Attribute 是否适用于解码情况。
  • 在我的 MFT_TRANSFORM_CLSID_Attribute 中没有设置 - 我在查询时得到 MF_E_ATTRIBUTENOTFOUND。
  • 从媒体类型以外的其他对象中尝试。

标签: ms-media-foundation


【解决方案1】:

Media Foundation Media Types 不携带编解码器名称信息。与编解码器标识相对应的典型通用属性是MF_MT_MAJOR_TYPE attribute,这可能没有用,因为您已经知道您持有的视频或音频媒体类型。第二个是MF_MT_SUBTYPE attribute,它基本上描述了一般数据的编码。您应该自己从那里将 GUID 值转换为一些用户友好的“编解码器名称”。

【讨论】:

  • 我尝试了 MF_MT_SUBTYPE 属性,但它似乎给出了输出的格式,而不是解码媒体的原始格式。特别是,对于 h264 视频,我得到了 MFVideoFormat_YV12,而不是 MFVideoFormat_H264。
  • 这是因为 H.264 和 YV12 都是格式,因此是“媒体类型”。根据您查询的管道中的点,格式会有所不同。如果您将源阅读器设置为不解码视频,您将获得与解复用器输出相对应的媒体类型(通常),这将获得 H.264。
  • 你说得对,我是在流初始化后查询格式的。在构造 IMFSourceReader 并使用 IMFSourceReader::GetNativeMediaType 检索其媒体类型后立即查询 MF_MT_SUBTYPE 得到 MFVideoFormat_H264。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 2012-05-07
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
相关资源
最近更新 更多