【问题标题】:Windows Media Foundation — IMFActivate::ActivateObject - MF_E_INVALIDMEDIATYPEWindows Media Foundation - IMFActivate::ActivateObject - MF_E_INVALIDMEDIATYPE
【发布时间】:2021-10-20 16:46:12
【问题描述】:

我正在使用 Windows Media Foundation 从视频采集卡中读取数据,我发现在某些机器上,ActivateObject 返回 MF_E_INVALIDMEDIATYPE。代码非常简单:

CComPtr<IMFAttributes> pAttributes = nullptr;        
HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE);
hr = MFStartup(MF_VERSION);
if (hr != S_OK)
{
    return false;
}
// Create an attribute store to specify the enumeration parameters.
hr = MFCreateAttributes(&pAttributes, 1);
if (hr != S_OK)
{
    return false;
}

// Source type: video capture devices
hr = pAttributes->SetGUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID);
if (hr != S_OK)
{
    return false;
}
IMFActivate** ppDevices = nullptr;
bool success = true;
UINT32 count = 0;
// Enumerate devices.
HRESULT hr = MFEnumDeviceSources(pAttributes, &ppDevices, &count);
//Returns MF_E_INVALIDMEDIATYPE on some machines (using the same device/drivers)
hr = ppDevices[0]->ActivateObject(IID_PPV_ARGS(&m_pMediaSource));

【问题讨论】:

  • 可能此设备无法与 Media Foundation 一起正常工作。那可能是驱动问题。这是特殊的硬件吗?
  • Blackmagic Design 硬件,例如,已知有这种行为(与他们的驱动程序有关)。
  • 是的,它是 Osprey Raptor 系列 935 PCIe 采集卡。如果这在任何机器上都不起作用,我倾向于同意它只是不受支持。事实上,它在一台让我感到困惑的机器上运行良好(一台机器恰好运行不同版本的 windows - windows LTSB,其他机器运行 windows 10 Pro)。
  • 你应该联系供应商,如果他们支持MF,它应该可以工作。
  • 我已经联系了供应商,他们不支持MF。

标签: c++ windows ms-media-foundation


【解决方案1】:

我已经联系了供应商,他们不支持 MF

我认为这需要翻译成普通语言。

Media Foundation 是 Windows 中唯一与视频采集硬件一起使用的“当前”API。未能支持硬件供应商的 Media Foudantion 意味着无法为硬件提供适用于该平台的有效兼容驱动程序。

与另一家供应商类似(参见 herehere),Osprey Video 似乎决定不为其硬件提供 Windows 集成,而不仅仅是 Media Foundation。

硬件很可能随供应商特定的 SDK 一起提供,因此 Windows 集成(例如在 SDK 上开发 Media Foundation 包装器或自定义集成)的负担转嫁给了开发人员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多