我有一个DirectShow图,包含文件源过滤器,分离器过滤器,视频和音频的解码器以及渲染器。 (数据可能已加密,因此拆分器将其拆分为视频和音频,解码器实际上将数据解密)。

现在,我想更改图形以使用实时流而不是文件作为源。是否有免费(首选开源)的此类源过滤器?

谢谢。

最佳答案

如果通过实时流表示Windows Media over HTTP,则可以尝试以下操作:

首先为CLSID_NetShowSource定义一个GUID,类似

#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
        }
    }
}


自实施此功能已有一段时间以来,我希望它会有所帮助。我很确定这个代码片段缺少一些错误检查。

关于c++ - 免费的DirectShow实时流源过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6674652/

10-16 19:15