일반 미디어 파일을 재생할 때 제대로 작동하는 사용자 지정 할당 자/발표자를 만들었습니다. 그러나 다음 코드를 사용하여 DVD를 재생하려고하면 스택 오버플로 예외로 인해 실패합니다.DirectShow DVD 재생
vmr9_ap = new vmr9ap();
HMONITOR monitor = MonitorFromWindow(hwnd, NULL);
IGraphBuilder *graph;
IBaseFilter *filter;
IDvdGraphBuilder *builder;
CoCreateInstance(CLSID_DvdGraphBuilder, NULL, CLSCTX_INPROC_SERVER, IID_IDvdGraphBuilder, reinterpret_cast<void**>(&builder));
CoCreateInstance(::CLSID_VideoMixingRenderer9, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast<void**>(&filter));
builder->GetDvdInterface(IID_IVMRFilterConfig9, (void**)&vmr9_config);
vmr9_ap->Initialize(g_pd3dDevice, monitor, vmr9_config);
HRESULT hr = builder->RenderDvdVideoVolume(L"G:\\VIDEO_TS", AM_DVD_SWDEC_PREFER | AM_DVD_VMR9_ONLY, &status);
builder->GetFiltergraph(&graph);
IDvdControl2 *dvdControl;
builder->GetDvdInterface(::IID_IDvdControl2, (void**)&dvdControl);
graph->QueryInterface(::IID_IMediaControl, (void**)&control);
HRESULT h = control->Run();
스택 오버플로는 control-> Run()을 호출 한 직후에 발생합니다. 그것은 내가 정말로 정말로 단순한 것을 잊고 있다고 확신하기 때문에 견과를 몰고 간다.
감사합니다.
감사합니다. 매우 도움이됩니다. :) 나는 방금 끝난 코드를 게시했다. 디버거가 부착 된 상태에서 재생이 여전히 작동하지 않지만 DRM과 같지 않다는 것에 동의합니다. 안티 리버스 엔지니어링 전술 일 수 있습니다. 그것이 바로 Google이 생각하는 것입니다. 나를 위해 – Alex