Нужна помощь. Direct Show
От: it.devs  
Дата: 07.01.08 15:33
Оценка:
Помогите разобраться. Пытаюсь захватывать потоковое видео следующим способом (ниже приведен код). Для некоторых урлов данных механизм работает, а для некоторых (например 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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.