Я пытаюсь передать динамически сгенерированные данные в Media Foundation Source Reader, используя поток в памяти в качестве потока источника:
InMemoryRandomAccessStream^ memstream = ref new InMemoryRandomAccessStream();
IRandomAccessStream^ pInputStream = (IRandomAccessStream^)memstream;
ComPtr<IMFByteStream> pInputByteStream;
MFCreateMFByteStreamOnStreamEx((IUnknown*)pInputStream, &pInputByteStream);
hr = MFCreateSourceReaderFromByteStream(pInputByteStream.Get(), NULL, &m_pSourceReader);
// last line FAILS, “The handle is invalid.”
Тем не менее, я застрял на ошибку выше. Почему это недействительно и как я могу это исправить? В качестве альтернативы, есть ли лучший способ создать фундамент мультимедийного конвейера с динамическими данными?
это раньше работало на меня:
void MyClass::Init(Windows::Storage::Streams::IRandomAccessStream^ stream)
{
ComPtr<IUnknown> pStreamUnk = reinterpret_cast<IUnknown*>(stream);
ComPtr<IMFByteStream> pMFStream;
hr = ::MFCreateMFByteStreamOnStreamEx(pStreamUnk.Get(), &pMFStream);
hr = ::MFCreateSourceReaderFromByteStream(pMFStream.Get(), NULL, &m_pSourceReader);
}
но это было для файлового потока.
в вашем случае поток памяти может не содержать всех данных, необходимых для конвейера.
Лучшее решение — реализовать медиа-источник. Взгляни на https://msdn.microsoft.com/en-us/library/windows/desktop/aa371827(v=vs.85).aspx (GeometricSource & Mpeg1Source)
Других решений пока нет …