我觉得各个滤波器都已经创建了,但针连接失败,搜索下说是 媒体类型 没有设置,针匹配失败
不明确还差点什么代码,请熟悉的人帮修改下.获取针的函数是使用DSHOW文档里的例子函数 HRESULT hr = 0;
UpdateData(); hr=CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,IID_IGraphBuilder, (void **)&pGraph);  //滤波管理器 hr=CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER,IID_ICaptureGraphBuilder2, (void **)&pBuilder);  //辅助滤波管理器 hr = pBuilder->SetFiltergraph(pGraph);    //设置使用的滤波管理器 hr = pGraph->AddSourceFilter(_T("d:\\shou.mpg"), L"Source", &pSourceBase);  //增加输入文件  据说自动创建源滤波器 hr=CoCreateInstance(CLSID_AviSplitter, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&splitter);  //AVI 分拆器 //GetSplitter(&splitter);  //获取媒体分拆器  这个函数是从  CLSID_LegacyAmFilterCategory  寻找  AVI Splitter   GetDecode(&decode); //获取视频解码器  这个函数是从  CLSID_LegacyAmFilterCategory 寻找  ffdshow Video Decoder GetCompressor(&m_pCompressor);   //从列表框里获取编码器  这个函数是从  CLSID_VideoCompressorCategory  寻找  ffdshwo Video Encoder hr=CoCreateInstance(CLSID_AviDest,NULL,CLSCTX_ALL,IID_IBaseFilter,(void **)&pMux); hr=CoCreateInstance(CLSID_FileWriter,NULL,CLSCTX_ALL,IID_IBaseFilter,(void **)&pWritter); hr = pGraph->AddFilter(splitter, L"VideoSplitter");   //增加媒体分拆器 hr = pGraph->AddFilter(decode, L"VideoDecode");  //增加视频解码器 hr = pGraph->AddFilter(m_pCompressor, L"Compressor");    //增加视频编码器 hr = pGraph->AddFilter(pMux,L"Mux"); hr = pGraph->AddFilter(pWritter,L"Writter"); pWritter->QueryInterface(IID_IFileSinkFilter2,(void **)&pSink); pSink->SetFileName(_T("d:\\123.avi"),NULL); ////从各滤波器设置各针
         //FindPin 函数是包装DSHOW文档里的例子函数
hr=FindPin(pSourceBase,   PINDIR_OUTPUT, &pSourceOut);  //获取源的输出针
hr=FindPin(splitter,  PINDIR_INPUT, &pSplitterIn);      //获取分拆器的输入针 hr=pGraph->Connect(pSourceOut, pSplitterIn);   //连接针 hr=FindPin(splitter,  PINDIR_OUTPUT, &pSplitterOut);    //获取分拆器输出针 hr=FindPin(decode,  PINDIR_INPUT, pDecodeIn);           //获取解码器的输入针 hr = pGraph->Connect(pSplitterOut, pDecodeIn);   //连接针 hr=FindPin(decode,  PINDIR_OUTPUT, &pDecodeOut);        //获取解码器的输出针 hr=FindPin(m_pCompressor, PINDIR_INPUT, &pCompressorIn); //获取编码器的输入针 hr = pGraph->Connect(pDecodeOut, pCompressorIn); //连接针 hr=FindPin(m_pCompressor, PINDIR_OUTPUT, &pCompressorOut);  //获取编码器的输出针 hr=FindPin(pMux, PINDIR_INPUT, pMuxIn1);                 //获取合成器的输入针 hr = pGraph->Connect(pCompressorOut, pMuxIn1);   //连接针 hr=FindPin(pMux, PINDIR_OUTPUT, pMuxOut);                //获取合成器的输出针 hr=FindPin(pWritter, PINDIR_INPUT, pWriterIn);           //获取写器的输入针 hr = pGraph->Connect(pMuxOut, pWriterIn);        //连接针