我想用DirectShow播放视频流,这个流是从网络上传输过来的,解压好的Sample形式。不知道怎么播放
我自己写好了一个Source Filter,但是不知道怎么播放,如果播放是在Renderer Filter里的,那播放操作具体是怎么实现的?希望路过的高手给段代码看看,要播放视频流的,不是播放本地文件!

解决方案 »

  1.   

    要有文件格式信息,以设置媒体格式,来同下游filter连接
    选择合适的解码器和render,就可以播放了
      

  2.   

    选择合适的解码器和render有哪些解码器和render啊?选择了之后又是怎么用的?
      

  3.   

    问题是我没有写 Transfrom Filter 和 Renering Filter ,有没有现成的,我试了IMediaControl来播放但是不行。
    最好给段代码看看
      

  4.   

    1。设置source filter的输出pin的媒体类型
    2。取得该输出pin,然后render它,后面智能连接,不用你处理
      

  5.   

    我就是按照你的方法做的,但是没有播放成功,发现根本就没有调用到source filter的FillBuffer这个函数,也许是我这个source filter本来就写错了
      

  6.   

    1。filter本身没问题
    2。里面的socket工作正常
    3。格式设置对
    4。机器安装了对应格式的解码器
      

  7.   

    static const GUID gd = 
    { 0x504ff8e4, 0xdd79, 0x49fc, { 0xb4, 0x18, 0x1, 0x62, 0x34, 0x30, 0xa4, 0xd3 } };

    CSFilter *pSour=new CSFilter(_T("Source"),NULL,gd); CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void**)&pGraph);
    pGraph->AddFilter((IBaseFilter*)pSour,L"Source");
    pGraph->QueryInterface(IID_IMediaControl,(void**)&pControl);
    pGraph->QueryInterface(IID_IMediaEvent,(void**)&pEvent);
    pGraph->QueryInterface(IID_IVideoWindow,(void**)&pWnd); CSPin *pin=(CSPin*)(pSour->GetPin(0));

    pGraph->Render(pin);
    pControl->Run(); long code;
    pEvent->WaitForCompletion(15,&code);
    我是这样播放的,不知道有没有错,还有 那个GD也没注册过
      

  8.   

    1。进程内new方式,不需要注册
    2。应该每步返回HRESULT,判断是否成功
    3。那个CSPin 是什么,你封装的pin类???
    4。有解码器没?
      

  9.   

    添加filter后,可以加个AddRef,防止其自动销毁