private void Videotest1() { pGraphBuilder = (DirectShowLib.IGraphBuilder) new FilterGraph(); pMediaControl = (DirectShowLib.IMediaControl)pGraphBuilder; //controler pMediaEvent = (DirectShowLib.IMediaEvent)pGraphBuilder; //envent pMediaControl.RenderFile(@"C:\Users\trevor\Desktop\Videos\cctv2.wmv"); pVideoWindow = (DirectShowLib.IVideoWindow)pGraphBuilder; // renderFile을 실행 한 후 연결해줘야한다. 출력처를 알기위해서. //pVideoWindow.put_Caption("test"); // setTitle //pVideoWindow.put_FullScreenMode(OABool.True); //Video full Screen pVideoWindow.put_Owner(tabPage2.Handle); // tabPage2에 그리기. pVideoWindow.put_WindowStyle(WindowStyle.Child | WindowStyle.ClipSiblings); Rectangle rect = tabPage2.ClientRectangle; pVideoWindow.SetWindowPosition(0, 0, rect.Right, rect.Bottom); pMediaControl.Run(); // Video play pMediaEvent.WaitForCompletion(-1, out eventCode); //블로킹을 실시하는 메소드 switch (eventCode) { case 0: textBox1.Text = "TimeOut"; break; case EventCode.UserAbort: //ex) alt+f4 textBox1.Text = "User Abort"; break; case EventCode.Complete: textBox1.Text = "complete"; break; case EventCode.ErrorAbort: textBox1.Text = "Error Abort"; break; } //pVideoWindow.put_FullScreenMode(OABool.False); // !full Screen //free Marshal.ReleaseComObject(pGraphBuilder); pGraphBuilder = null; Marshal.ReleaseComObject(pMediaControl); pMediaControl = null; Marshal.ReleaseComObject(pMediaEvent); pMediaEvent = null; }
// Build the capture graph for grabber and renderer.</summary> // (Control to show video in, Filename to play) private void SetupGraph(string FileName) { int hr; // Get the graphbuilder object m_graphBuilder = new DirectShowLib.FilterGraph() as DirectShowLib.IFilterGraph2; // Get a ICaptureGraphBuilder2 to help build the graph DirectShowLib.ICaptureGraphBuilder2 icgb2 = new DirectShowLib.CaptureGraphBuilder2() as DirectShowLib.ICaptureGraphBuilder2; try { // Link the ICaptureGraphBuilder2 to the IFilterGraph2 hr = icgb2.SetFiltergraph(m_graphBuilder); DsError.ThrowExceptionForHR( hr ); #if DEBUG // Allows you to view the graph with GraphEdit File/Connect m_DsRot = new DsROTEntry(m_graphBuilder); #endif // Add the filters necessary to render the file. This function will // work with a number of different file types. IBaseFilter sourceFilter = null; hr = m_graphBuilder.AddSourceFilter(FileName, FileName, out sourceFilter); DsError.ThrowExceptionForHR( hr ); // Get the SampleGrabber interface m_sampGrabber = (DirectShowLib.ISampleGrabber) new DirectShowLib.SampleGrabber(); DirectShowLib.IBaseFilter baseGrabFlt = (DirectShowLib.IBaseFilter) m_sampGrabber; // Configure the Sample Grabber ConfigureSampleGrabber(m_sampGrabber); // Add it to the filter hr = m_graphBuilder.AddFilter( baseGrabFlt, "Ds.NET Grabber" ); DsError.ThrowExceptionForHR( hr ); // System.Windows.Forms.MessageBox.Show(Width.ToString(), Height.ToString(), System.Windows.Forms.MessageBoxButtons.OK); // A Null Renderer does not display the video // But it allows the Sample Grabber to run // And it will keep proper playback timing // Unless specified otherwise. DirectShowLib.NullRenderer nullRenderer = new DirectShowLib.NullRenderer(); m_graphBuilder.AddFilter((DirectShowLib.IBaseFilter) nullRenderer, "Null Renderer"); // Connect the pieces together, use the default renderer hr = icgb2.RenderStream(null, null, sourceFilter, baseGrabFlt, (DirectShowLib.IBaseFilter) nullRenderer); DsError.ThrowExceptionForHR( hr ); // Now that the graph is built, read the dimensions of the bitmaps we'll be getting SaveSizeInfo(m_sampGrabber); // Configure the Video Window //DirectShowLib.IVideoWindow videoWindow = m_graphBuilder as DirectShowLib.IVideoWindow; //ConfigureVideoWindow(videoWindow, hWin); // Grab some other interfaces m_mediaEvent = m_graphBuilder as DirectShowLib.IMediaEvent; m_mediaCtrl = m_graphBuilder as DirectShowLib.IMediaControl; } finally { if (icgb2 != null) { Marshal.ReleaseComObject(icgb2); icgb2 = null; } } #if DEBUG // Double check to make sure we aren't releasing something // important. GC.Collect(); GC.WaitForPendingFinalizers(); #endif }
// Build the capture graph for grabber and renderer.</summary> // (Control to show video in, Filename to play) private void SetupGraph(string FileName) { int hr; // Get the graphbuilder object m_graphBuilder = new DirectShowLib.FilterGraph() as DirectShowLib.IFilterGraph2; // Get a ICaptureGraphBuilder2 to help build the graph DirectShowLib.ICaptureGraphBuilder2 icgb2 = new DirectShowLib.CaptureGraphBuilder2() as DirectShowLib.ICaptureGraphBuilder2; try { // Link the ICaptureGraphBuilder2 to the IFilterGraph2 hr = icgb2.SetFiltergraph(m_graphBuilder); DsError.ThrowExceptionForHR(hr); #if DEBUG // Allows you to view the graph with GraphEdit File/Connect m_DsRot = new DsROTEntry(m_graphBuilder); #endif // Add the filters necessary to render the file. This function will // work with a number of different file types. IBaseFilter sourceFilter = null; hr = m_graphBuilder.AddSourceFilter(FileName, FileName, out sourceFilter); DsError.ThrowExceptionForHR(hr); // Get the SampleGrabber interface m_sampGrabber = (DirectShowLib.ISampleGrabber) new DirectShowLib.SampleGrabber(); DirectShowLib.IBaseFilter baseGrabFlt = (DirectShowLib.IBaseFilter)m_sampGrabber; // Configure the Sample Grabber ConfigureSampleGrabber(m_sampGrabber); // Add it to the filter hr = m_graphBuilder.AddFilter(baseGrabFlt, "Ds.NET Grabber"); DsError.ThrowExceptionForHR(hr); // System.Windows.Forms.MessageBox.Show(Width.ToString(), Height.ToString(), System.Windows.Forms.MessageBoxButtons.OK); // A Null Renderer does not display the video // But it allows the Sample Grabber to run // And it will keep proper playback timing // Unless specified otherwise. DirectShowLib.NullRenderer nullRenderer = new DirectShowLib.NullRenderer(); m_graphBuilder.AddFilter((DirectShowLib.IBaseFilter)nullRenderer, "Null Renderer"); // Connect the pieces together, use the default renderer hr = icgb2.RenderStream(null, null, sourceFilter, baseGrabFlt, (DirectShowLib.IBaseFilter)nullRenderer); DsError.ThrowExceptionForHR(hr); // Now that the graph is built, read the dimensions of the bitmaps we'll be getting SaveSizeInfo(m_sampGrabber); // Configure the Video Window //DirectShowLib.IVideoWindow videoWindow = m_graphBuilder as DirectShowLib.IVideoWindow; //ConfigureVideoWindow(videoWindow, hWin); // Grab some other interfaces m_mediaEvent = m_graphBuilder as DirectShowLib.IMediaEvent; m_mediaCtrl = m_graphBuilder as DirectShowLib.IMediaControl; } finally { if (icgb2 != null) { Marshal.ReleaseComObject(icgb2); icgb2 = null; } } #if DEBUG // Double check to make sure we aren't releasing something // important. GC.Collect(); GC.WaitForPendingFinalizers(); #endif }