我使用MediaFoundation API从摄像机获取样本,并且遇到了这样的问题。
创建一个source reader object(例如,使用函数MFCreateSourceReaderFromMediaSource),我们可以在异步模式下使用IMFSourceReader。为此,我们必须在属性存储上设置MF_SOURCE_READER_ASYNC_CALLBACK属性。然后将此属性存储传递给MFCreateSourceReaderFromMediaSource函数。
HRESULT hr = S_OK;
IMFAttributes *pAttributes = NULL;
hr = MFCreateAttributes(&pAttributes, 1);
// set our callback
hr = pAttributes->SetUnknown(MF_SOURCE_READER_ASYNC_CALLBACK, pCallback);
// pass attributes and create source reader
hr = MFCreateSourceReaderFromMediaSource(pMediaSource, pAttributes, ppSourceReader);
逻辑上,我们在创建IMFSourceReader时设置的参数应存储在其中的某个位置。
实际上是问题。是否可以获取我们在MFCreateSourceReaderFromMediaSource中传递的IMFSourceReader对象的IMFAttributes(尤其是MF_SOURCE_READER_ASYNC_CALLBACK属性的值)?
我试图通过QueryInterface获得它们
pSourceReader->QueryInterface(IID_IMFAttributes, (void**)&pAttributes);
但是返回值表明不支持该接口。
媒体源对象返回属性,但不包含必需的属性。我认为可以使用IMFSourceReader :: GetServiceForStream方法获得所需的信息,但我不知道需要什么服务。
谢谢您,我会很高兴。
我使用MediaFoundation API从摄像机获取样本,并且遇到了这样的问题。创建源阅读器对象(例如,使用MFCreateSourceReaderFromMediaSource函数),我们可以...
没有定义的方法来读取回调的值。