Пример #1
0
        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;
        }
Пример #2
0
	// 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
	}
Пример #3
0
    // 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
    }