C++ 免费DirectShow实时流源过滤器

C++ 免费DirectShow实时流源过滤器,c++,directshow,source-filter,C++,Directshow,Source Filter,我有一个DirectShow图形,包含文件源过滤器、拆分器过滤器、视频和音频解码器以及渲染器。(数据可能是加密的,所以拆分器只是将其拆分为视频和音频,而解码器实际上对数据进行解密) 现在,我想将图形更改为使用实时流,而不是将文件作为源。是否有免费(首选开源)的源代码过滤器 谢谢。如果您所说的实时流是指通过HTTP的Windows Media,您可以尝试以下方法: 首先定义CLSID_NetShowSource的GUID,类似于 #include <initguid.h> DEFIN

我有一个DirectShow图形,包含文件源过滤器、拆分器过滤器、视频和音频解码器以及渲染器。(数据可能是加密的,所以拆分器只是将其拆分为视频和音频,而解码器实际上对数据进行解密)

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


谢谢。

如果您所说的实时流是指通过HTTP的Windows Media,您可以尝试以下方法:

首先定义CLSID_NetShowSource的GUID,类似于

#include <initguid.h>

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

我已经有一段时间没有实现这个了,我希望它能有所帮助。我很确定这段代码缺少一些错误检查。

Live streams of。。。。?HTTP?RTSP?RTMP?彩信?您确实需要在此处指定实时流媒体协议;没有单一的“实时流”源过滤器。您的桌面的实时流?@rogerdpack-是。出于某些测试目的。谢谢我想到过一次。。。
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
        }
    }
}