Бесплатный фильтр прямых трансляций DirectShow - PullRequest
1 голос
/ 13 июля 2011

У меня есть график DirectShow, содержит фильтр исходного файла, фильтр сплиттера, декодеры для видео и аудио и средства визуализации. (Данные, возможно, зашифрованы, поэтому сплиттер просто разделяет их на видео и аудио, и декодеры фактически дешифруют данные).

Теперь я хочу изменить график для работы с живыми потоками вместо файлов в качестве источника. Существует ли бесплатный (предпочтительнее открытый исходный код) такой исходный фильтр?

Спасибо.

1 Ответ

1 голос
/ 13 июля 2011

Если под живыми потоками вы подразумеваете Windows Media через HTTP, вы можете попробовать это:

Сначала определите GUID для CLSID_NetShowSource, что-то вроде

#include <initguid.h>

DEFINE_GUID(CLSID_NetShowSource, 
            0x6b6d0800, 0x9ada, 0x11d0, 0xa5, 0x20, 0x0, 0xa0, 0xd1, 0x1, 0x29, 0xc0);

Тогда вы можете использовать его следующим образом:

IBaseFilter* wmsrc;
//create a basefilter instance from the GUID
hr = CoCreateInstance(CLSID_NetShowSource, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&wmsrc);
if(!FAILED(hr))
{
    IFileSourceFilter* fsf;
    //get us a file source filter, this can read from urls
    wmsrc->QueryInterface(IID_IFileSourceFilter, (void**)&fsf);

    if(fsf)
    {
        //wFilename is a widechar string containing the stream url
        hr = fsf->Load(wFilename, NULL);

        if(!FAILED(hr))
        {
            //at this point you can do as you wish with the filter
        }
    }
}

Прошло много времени с тех пор, как я это реализовал, надеюсь, это будет полезно. Я почти уверен, что в этом фрагменте отсутствует проверка ошибок.

...