У меня проблема в windows 10 (не проблема на сервере 2016), где IMFSourceReader-> ReadSample (reader-> ReadSample в приведенном ниже коде) никогда не вернется, если устройство было отключено во время захвата.Это приводит к тому, что ошибки не возникают, когда устройство отключено во время захвата.Все работает нормально, если ни одно устройство не отключено.Я ожидаю, что будет возвращено что-то вроде MF_E_INVALIDREQUEST, но вместо этого оно будет зависать вечно.Любые мысли о том, что может быть проблемой или руководством, будут высоко оценены.
capture::Sample *capture::MfDeviceSampleProvider::GetNextSample(bool video) {
Sample *sample = NULL;
IMFSample *mfSample = NULL;
DWORD streamFlags;
if (reader) {
HRESULT hr = reader->ReadSample(streamIndex, 0, NULL, &streamFlags, NULL, &mfSample);
LOG_IF_FAILED(hr, "Unable to read sample from device.");
if (SUCCEEDED(hr)) {
if (streamFlags == 0) {
if (type == DeviceBase::Type::Video) {
sample = new MFVideoSample(prop.type, mfSample, prop.size.width, prop.size.height);
} else if (type == DeviceBase::Type::Audio) {
sample = new MFAudioSample(mfSample);
}
} else if (streamFlags & MF_SOURCE_READERF_STREAMTICK) {
return GetNextSample(video);
}
}
SafeRelease(&mfSample);
return sample;
}
`