2012-06-07 3 views
0

내도 기록 DirectshowLib 사용하여 웹캠 비디오 및 C#을하지만,이를 위해 전 단계를 수행했을 수 있도록 비디오 미리보기를 레코딩 비디오 동안에도PictureBox에서 미리보기를 표시하는 방법?

1.I가 가능한 비디오 장치를 가지고 표시되어있다

  1. init. IFilterGrapth2 개체를 사용하여 Graph = (IFilterGraph2)new FilterGraph();

  2. init. captureGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();

4.filter의 grapth를 사용하여 사용해 ICaptureGraphBuilder2 객체를 사용해 ICaptureGraphBuilder2 객체 captureGraph.SetFiltergraph(Graph);

  1. 설정하고 전체 코드는 아래와 같다

soursefilterformoniker() 및 출력 _()을 첨가 .it는 오류가 없지만 미리보기 창을 별도로 열어 그림 상자에서 미리보기를 표시하려고합니다 ..

picturebox에서 창을 미리 보는 방법?

는 여기에 내가이 사용 VMR9했을

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using DirectShowLib; 
using DirectShowLib.DMO; 
using System.Runtime.InteropServices; 
using System.Drawing.Drawing2D; 
using System.IO; 

namespace Cam_Recording_V1_directshow.net_ 
{ 
    public partial class Form1 : Form 
    { 
     string captureDeviceName = string.Empty; 
     IFilterGraph2 Graph = null; 
     IMediaControl m_mediaCtrl = null; 
     public List<DsDevice> AvailableVideoInputDevices { get; private set; } 
     IAMVideoProcAmp vpa; 
     [DllImport("olepro32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)] 
     private static extern int OleCreatePropertyFrame(IntPtr hwndOwner, int x, int y, 
      string lpszCaption, int cObjects, 
      [In, MarshalAs(UnmanagedType.Interface)] ref object ppUnk, 
      int cPages, IntPtr pPageClsID, int lcid, int dwReserved, IntPtr pvReserved); 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

      IBaseFilter capFilter = null; 
      IBaseFilter asfWriter = null; 
      IFileSinkFilter pTmpSink = null; 
      ICaptureGraphBuilder2 captureGraph = null; 
      object o; 

      // 
      //Get list of video devices 
      // 
      AvailableVideoInputDevices = new List<DsDevice>(); 
      DsDevice[] videoInputDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice); 
      AvailableVideoInputDevices.AddRange(videoInputDevices); 
      if (AvailableVideoInputDevices.Count > 0) 
      { 
       // 
       //init capture graph 
       // 
       Graph = (IFilterGraph2)new FilterGraph(); 
       captureGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2(); 

       // 
       //sets filter object from graph 
       // 
       captureGraph.SetFiltergraph(Graph); 
       // 
       //which device will use graph setting 
       // 
       Graph.AddSourceFilterForMoniker(AvailableVideoInputDevices.First().Mon, null, AvailableVideoInputDevices.First().Name, out capFilter); 
       captureDeviceName = AvailableVideoInputDevices.First().Name; 
       #region WMV 
       // 
       //sets output file name,and file type 
       // 
       captureGraph.SetOutputFileName(MediaSubType.Asf, /*DateTime.Now.Ticks.ToString() +".wmv"*/ "test.wmv", out asfWriter, out pTmpSink); 
       // 
       //configure which video setting is used by graph 
       //     
       IConfigAsfWriter lConfig = asfWriter as IConfigAsfWriter; 
       Guid cat = new Guid("8C45B4C7-4AEB-4f78-A5EC-88420B9DADEF"); 
       lConfig.ConfigureFilterUsingProfileGuid(cat); 
       #endregion      
       captureGraph.RenderStream(PinCategory.Preview, MediaType.Video, capFilter, null, null); 

       captureGraph.RenderStream(PinCategory.Capture, MediaType.Video, capFilter, null, asfWriter); 
       m_mediaCtrl = Graph as IMediaControl; 
       m_mediaCtrl.Run(); 
      } 
      else 
      { 
       MessageBox.Show("Video Capture Device Not Found!!"); 
       button1.Visible = false; 
      } 
     } 

답변

0

내 전체 코드입니다. 그래프에 VMR9 필터를 추가했습니다. 그리고 더 많은.

+0

Image 및 VMR9 필터를 실제로 연결 한 방법에 대해 좀 더 자세히 설명해 주시겠습니까? – OzBarry

관련 문제