2013-08-08 2 views
1

나는 mp3 파일을 다운로드하는 프로그램을 썼다. 괜찮아. 다음 작업은 DirectShow를 사용하여 동시에 다운로드되는 파일을 재생하는 것입니다. MSDN 웹 사이트에 나는 발견하고이 코드를 복사 :동시에 다운로드되는 mp3를 재생하는 방법은 무엇입니까?

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 함수를 사용했지만 결과는 같습니다.

어디에서 실수 했습니까?

도와주세요. - 지금 다운로드 한 파일을 재생하는 방법은 무엇입니까?

답변

2

표준 DirectShow 재생에서는 파일에서 데이터를 가져온 것으로 가정합니다 (File Source (Async) Filter 또는 WM ASF Reader Filter). 파일 경로와 스트림 데이터를 더 취합니다. 다운로드가 진행 중이므로 완전한 파일을 제공 할 수 없으며 이러한 구성 요소는 불완전 성 및/또는 위반 사항 공유로 인해 데이터를 재생할 수 없습니다.

파일을 재생 가능하게 만들려면 내부 버퍼의 데이터를 스트리밍하는 사용자 지정 원본 필터를 구현하는 것이 좋습니다. 데이터가 아직 이용 가능하지 않은 경우, 그러한 필터는 데이터가 도착하자마자 다운로드 및 서빙 파일 판독 요청과 동기화 될 것이다. 이 방법으로 작성된 사용자 지정 필터는 파이프 라인의 파일 원본 (비동기) 필터를 동일한 필터를 사용하여 작성된 나머지 파이프 라인으로 대체합니다.

Windows SDK Async Filter Sample (\ Samples \ multimedia \ directshow \ filters \ async)은 이러한 사용자 지정 필터의 좋은 시작점 일 수 있습니다.

관련 문제