2012-10-27 40 views
2

我試圖通過使用一個內存流作爲源流動態生成的數據提供給媒體基礎源讀取器:生成數據

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.」 

不過,我被上面的錯誤所困住。爲什麼這不是有效的,我該如何糾正?或者,是否有更好的方式來創建具有動態數據的媒體基礎管道?

回答

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)