2016-12-14 14 views
0

비디오에 텍스트를 오버레이해야합니다.DirectShow 연결 필터

내 변화 : 소스 -> SampleGrabber -> 압축기 -> 먹스 (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를 추가하고 소스와 연결 :

 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); 

필터 압축기를 추가하고 시작 RenderStream :

,723,321 0

그러나 비디오 out_file이 열리지 않습니다 (1 초만 재생하고 검은 색 창). 왜?

+0

이 .RUN (IMediaControl로 f_fg)()의 결과는 무엇입니까? 믹서 대신 비디오 렌더러를 사용하여 그래프를 작성하여 작동하는지 확인할 수 있습니까? – VuVirt

답변

0

위의 코드는 그냥 렌더링 호출 후 잊어 버렸습니다 ... 제대로 작동 :

(f_fg as IMediaControl).Stop();