IMFStreamSink的ProcessSample运行约30秒后就不再运行了
每次启动应用程序运行约30秒后就不再继续调用ProcessSample了,ProcessSample代码:
STDMETHODIMP VideoStreamSink::ProcessSample(IMFSample* pSample)
{
cout << "处理样本" << endl;
cout << "请求样本" << endl;
HRESULT hr = QueueEvent(MEStreamSinkRequestSample, GUID_NULL, S_OK, nullptr);
return S_OK;
}
控制台输出会停在请求样本:
Windows API - Win32
C++
-
Jeanine Zhang-MSFT 10,281 信誉分 • Microsoft 供应商
2025-01-02T06:44:07.8566667+00:00 请问IMFStreamSink::ProcessSample的返回值是什么?
-
HoWe Yu 61 信誉分
2025-01-02T06:48:42.52+00:00 我都是直接返回S_OK
-
Jeanine Zhang-MSFT 10,281 信誉分 • Microsoft 供应商
2025-01-02T08:17:40.9166667+00:00 你说的“直接返回S_OK”是什么意思,是指代码中的“return S_OK;”吗?
我说的返回值是指IMFStreamSink::ProcessSample方法返回的HRESULT的值, 可能的值包括但不限于下表中的值:https://learn.microsoft.com/en-us/windows/win32/api/mfidl/nf-mfidl-imfstreamsink-processsample#return-value
-
HoWe Yu 61 信誉分
2025-01-02T08:21:13.8033333+00:00 我上面写了return S_OK,所以只返回这一个值
-
Jeanine Zhang-MSFT 10,281 信誉分 • Microsoft 供应商
2025-01-02T08:55:44.0333333+00:00 我的意思是dubug,查看程序挂起时IMFStreamSink::ProcessSample方法的返回值是什么。如果返回值是“S_OK”则表示ProcessSample方法成功。那么程序就不应该在请求样本处停止。
如果在请求样本处停止的问题,则可能是由于媒体接收器被暂停或停止,这会阻止它处理样本。如果是这种情况,ProcessSample的返回值应该是
MF_E_INVALIDREQUEST
而不是S_OK
。 -
HoWe Yu 61 信誉分
2025-01-02T09:39:11.2166667+00:00 ProcessSample不是框架调用的吗,我又没有框架源码,怎么调试
-
Jeanine Zhang-MSFT 10,281 信誉分 • Microsoft 供应商
2025-01-03T05:40:42.14+00:00 请提供一个最小的示例帮助我们重现错误。
我建议你参考这个示例:WavSink sample 它演示了如何在 Media Foundation 中编写自定义媒体接收器。
-
HoWe Yu 61 信誉分
2025-01-03T06:20:23.4633333+00:00 https://drive.google.com/file/d/1QUwlxuAS8rCfB1B67ZhQSvIXyFU7Sskp/view?usp=sharing
我注意到ProcessSample运行时长与视频长短有关。
-
Jeanine Zhang-MSFT 10,281 信誉分 • Microsoft 供应商
2025-01-03T06:50:48.6733333+00:00 我注意到ProcessSample运行时长与视频长短有关。
有没有可能样本已经全部传送到流中?大多数媒体接收器以异步方式处理样本,因此 Stream Sink 可以一次发送多个样本请求。
-
HoWe Yu 61 信誉分
2025-01-03T07:13:23.3433333+00:00 我视频长达2小时
-
Jeanine Zhang-MSFT 10,281 信誉分 • Microsoft 供应商
2025-01-03T07:58:43.2166667+00:00 由于我的工作环境策略,我无法打开您共享的代码的链接。您能否通过 GitHub 提供最低限度的样本?
-
HoWe Yu 61 信誉分
2025-01-06T00:58:58.95+00:00 谷歌都打不开我是没想到的
登录以评论