繁体   English   中英

DirectShow连接过滤器

[英]DirectShow connect filters

我需要在视频上覆盖文字。

我的更改:源-> SampleGrabber->压缩器-> mux(out_file)

SetOutputFileName并添加源:

public void Start(object compr)
        {
            ICaptureGraphBuilder2 gb = new CaptureGraphBuilder2() as ICaptureGraphBuilder2;
            IBaseFilter mux;
            IFileSinkFilter sink;
            Guid MEDIASUBTYPE_Avi = new Guid(0xe436eb88, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);
            gb.SetOutputFileName(MEDIASUBTYPE_Avi,
                    out_file, out mux, out sink);

            IGraphBuilder gbi;
            gb.GetFiltergraph(out gbi).Check();
            f_fg = gbi as IFilterGraph2;
            IBaseFilter src;
            f_fg.AddSourceFilter(path_file, "Source", out src).Check();

添加过滤器SampleGrabber并连接Source:

        Type comType = Type.GetTypeFromCLSID(new Guid("C1F400A0-3F08-11d3-9F0B-006008039E37"));
        ISampleGrabber sampleGrabber = (ISampleGrabber)Activator.CreateInstance(comType);
        f_fg.AddFilter((IBaseFilter)sampleGrabber, "samplegrabber").Check();
        AMMediaType mediaType = new AMMediaType();
        mediaType.majorType = MediaType.Video;
        mediaType.subType = MediaSubType.RGB24;
        mediaType.formatType = FormatType.VideoInfo;
        sampleGrabber.SetMediaType(mediaType);
        sampleGrabber.SetCallback(this, 1);

        // connect filters src-->SampleGrabber
        gbi.ConnectFilters(src, (IBaseFilter)sampleGrabber);

添加过滤器Compressor并启动RenderStream:

 IBaseFilter compressor = ((DShowFilterInfo)compr).CreateFilter();
    f_fg.AddFilter(compressor, "Compressor").Check();
gb.RenderStream(null, null, (IBaseFilter)sampleGrabber, compressor, mux).Check();

(f_fg as IMediaFilter).SetSyncSource(IntPtr.Zero).Check();
(f_fg as IMediaControl).Run();
}

public int BufferCB(double sampleTime, IntPtr buffer, int bufferLen)
{
    return 0;
}

但是视频out_file无法打开(仅播放1秒和黑色窗口)。 为什么?

上面的代码正常工作...我只是在渲染调用后忘记了:

(f_fg as IMediaControl).Stop();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM