【发布时间】:2021-03-16 06:40:12
【问题描述】:
我正在尝试实现一个自定义 Windows Media Foundation 媒体接收器,以用于 UWP 应用程序,该应用程序将通过 MediaCapture::PrepareLowLagRecordToCustomSinkAsync() 使用它。
但是,我目前遇到了一个问题,即我的IMFStreamSink 的ProcessSample() 函数永远不会被调用,即使我在我的IMFMediaSink::OnClockStart() 中排队事件。
我已遵循此处的文档 (https://docs.microsoft.com/en-us/windows/win32/medfound/media-sinks) 并查看了“简单通信”示例。
这是我得到的输出,我记录了每个函数调用和接收器执行的每个调用的 HRESULT:
MyCaptureMediaSink::SetPresentationClock
OK: Clock->AddClockStateSink(this)
MyCaptureStreamSink::BeginGetEvent
OK: MediaEventQueue->BeginGetEvent(pCallback, punkState)
MyCaptureMediaSink::OnClockStart
MyCaptureStreamSink::QueueEvent
OK: MediaEventQueue->QueueEventParamVar(met, guidExtendedType, hrStatus, pvValue)
OK: Sink->QueueEvent(MEStreamSinkStarted, GUID_NULL, S_OK, nullptr)
MyCaptureStreamSink::QueueEvent
OK: MediaEventQueue->QueueEventParamVar(met, guidExtendedType, hrStatus, pvValue)
OK: Sink->QueueEvent(MEStreamSinkRequestSample, GUID_NULL, S_OK, nullptr)
我认为在最后一行之后我应该看到的是对 MyCaptureStreamSink::EndGetEvent() 的呼叫,因为收到了 MEStreamSinkStarted,然后是另一个 BeginGetEvent() 和 EndGetEvent() 对和一个呼叫 ProcessSample(),因为下一个事件将是MEStreamSinkRequestSample 事件。
我是否遗漏了一些仍然需要调用才能让 MediaCapture 系统调用这些函数的函数?
【问题讨论】:
标签: c++ uwp ms-media-foundation