2

我正在尝试通过使用内存流作为源流将动态生成的数据馈送到 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.”

但是,我被上面的错误困住了。为什么这无效,我该如何纠正?或者,是否有更好的方法来创建包含动态数据的媒体基础管道?

4

1 回答 1

0

这曾经对我有用:

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)

于 2013-08-01T20:49:45.257 回答