[英]How to play mp3 that is downloaded at the same time?
我寫了下載mp3文件的程序。 很好 我的下一個任務是使用DirectShow播放同時下載的文件。 在MSDN網站上,我找到並復制了以下代碼:
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
//
}
IGraphBuilder *pGraph;
hr = CoCreateInstance(CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);
IMediaControl *pControl;
IMediaEvent *pEvent;
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
hr = pGraph->RenderFile(L"C:\\Test.mp3", NULL);
hr = pControl->Run();
long evCode = 0;
pEvent->WaitForCompletion(INFINITE, &evCode);
pControl->Release();
pEvent->Release();
pGraph->Release();
CoUninitialize();
問題是程序無法播放此文件。 為了寫入數據,我使用以下代碼打開文件:
TFileStream *MyFile = new TFileStream(path,fmOpenWrite | fmShareDenyNone);
允許其他應用程序讀取文件。 我還使用WINAPI函數打開和寫入文件,但是結果是相同的。
我在哪里弄錯了?
請幫助我-播放當前下載文件的方式是什么?
標准DirectShow播放假定數據取自文件: File Source (Async) Filter
或WM ASF Reader Filter
將獲取文件路徑並進一步傳輸數據。 由於下載仍在進行中,由於不完整和/或由於共享沖突,您無法提供完整的文件,並且這些組件也無法播放數據。
為了使文件可播放,您可能需要實現一個自定義源過濾器,該過濾器從內部緩沖區流式傳輸數據。 如果數據尚不可用,則此類過濾器將與下載同步並在數據到達后立即處理文件讀取請求。 以這種方式構建的自定義篩選器將用相同的篩選器構建的其余管道替換管道上的文件源(異步)篩選器。
Windows SDK 異步過濾器示例 (\\ Samples \\ multimedia \\ directshow \\ filters \\ async)可能是此類自定義過濾器的良好起點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.