Помогите разобраться. Пытаюсь захватывать потоковое видео следующим способом (ниже приведен код). Для некоторых урлов данных механизм работает, а для некоторых (например
http://www.telecentro.com.ar/canal26/Canal26.wvx) — нет, хотя данный ресурс открывается медиаплеером. Ошибка происходит при вызове pFileSourceFilter->Load... Помогите разобраться, буду рад любому совету.
Заранее спасибо.
m_pGraphBuilder.CoCreateInstance(CLSID_FilterGraph);
if (!m_pGraphBuilder)
return false;
m_pMediaControl = m_pGraphBuilder;
if (!m_pMediaControl)
return false;
m_pSourceFilter.CoCreateInstance(CLSID_WMAsfReader);
if (!m_pSourceFilter)
return false;
m_pDestFilter.CoCreateInstance(CLSID_WMAsfWriter);
if (!m_pDestFilter)
return false;
if (FAILED(m_pGraphBuilder->AddFilter(m_pSourceFilter, L"WM ASF Reader")))
return false;
CComQIPtr<IFileSourceFilter> pFileSourceFilter(m_pSourceFilter);
if (!pFileSourceFilter)
return false;
if (FAILED(pFileSourceFilter->Load(CComBSTR(m_strUrl),NULL)))
return false;
CComQIPtr<IFileSinkFilter> pDestSinkFilter(m_pDestFilter);
if (!pDestSinkFilter)
return false;
if (FAILED(pDestSinkFilter->SetFileName(CComBSTR(m_strFileName), NULL)))
return false;
CComPtr<IEnumPins> pEnumPins;
if (FAILED(m_pSourceFilter->EnumPins(&pEnumPins)))
return false;
if (!pEnumPins)
return false;
if (FAILED(pEnumPins->Reset()))
return false;
while (1)
{
CComPtr<IPin> pPin;
if (pEnumPins->Next(1, &pPin, 0) != S_OK)
break;
PIN_DIRECTION PinDirThis;
if (FAILED(pPin->QueryDirection(&PinDirThis)))
continue;
if (PINDIR_OUTPUT == PinDirThis)
{
m_pGraphBuilder->Render(pPin);
}
}
HRESULT hr = m_pMediaControl->Run();
m_bRunning = (hr == S_OK);
return m_bRunning;