DirectShow的有关问题
DirectShow的问题
请问为什么hr = pWnd->put_Owner((OAHWND)m_hWnd); 总是返回E_NOINTERFACE 我用的是单文档创建的也试过多文档 结果都一样,播放avi视频只有声音没有图像 我试过把m_hWnd 改成GetParent()->m_hWnd 还是一样的结果请问怎么解决啊
------解决方案--------------------
你用的智能连接,"只有声音没有图像",很明显是没有注册视频解码器
- C/C++ code
void CVideoView::OnPlay() { // TODO: 在此添加命令处理程序代码 IGraphBuilder *pGraph = NULL; IMediaControl *pControl = NULL; IMediaEvent *pEvent = NULL; // Initialize the COM library. HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) { printf("ERROR - Could not initialize COM library"); return; } // Create the filter graph manager and query for interfaces. hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph); if (FAILED(hr)) { printf("ERROR - Could not create the Filter Graph Manager."); return; } hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl); hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); IVideoWindow* pWnd = NULL; hr = pGraph->QueryInterface(IID_IVideoWindow,(void**)&pWnd); hr = pWnd->put_Owner((OAHWND)m_hWnd); pWnd->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS); CRect rc; GetClientRect(&rc); pWnd->SetWindowPosition(rc.left,rc.top,rc.Width(),rc.Height()); // Build the graph. IMPORTANT: Change this string to a file on your system. hr = pGraph->RenderFile(L"E://111.avi", NULL); if (SUCCEEDED(hr)) { // Run the graph. hr = pControl->Run(); if (SUCCEEDED(hr)) { // Wait for completion. long evCode; // pEvent->WaitForCompletion(INFINITE, &evCode); } } pControl->Release(); pEvent->Release(); pGraph->Release(); CoUninitialize(); }
请问为什么hr = pWnd->put_Owner((OAHWND)m_hWnd); 总是返回E_NOINTERFACE 我用的是单文档创建的也试过多文档 结果都一样,播放avi视频只有声音没有图像 我试过把m_hWnd 改成GetParent()->m_hWnd 还是一样的结果请问怎么解决啊
------解决方案--------------------
你用的智能连接,"只有声音没有图像",很明显是没有注册视频解码器