Генерация данных на лету для потребления Media Foundation

Я пытаюсь передать динамически сгенерированные данные в 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.”

Тем не менее, я застрял на ошибку выше. Почему это недействительно и как я могу это исправить? В качестве альтернативы, есть ли лучший способ создать фундамент мультимедийного конвейера с динамическими данными?

2

Решение

это раньше работало на меня:

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)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]