我有一个DirectShow图,包含文件源过滤器,分割器过滤器,视频和音频解码器以及渲染器。 (数据可能是加密的,因此拆分器只是将其拆分为视频和听觉,而解码器实际上会对数据进行解密)。
现在,我想更改图表以使用实时流而不是文件作为源。是否有免费(首选开源)这样的源过滤器?
谢谢。
答案 0 :(得分:1)
如果直播是指Windows上的Windows Media,您可以试试这个:
首先为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
}
}
}
我实施此功能已经有一段时间了,我希望它有所帮助。我很确定这个片段缺少一些错误检查。