내도 기록 DirectshowLib 사용하여 웹캠 비디오 및 C#을하지만,이를 위해 전 단계를 수행했을 수 있도록 비디오 미리보기를 레코딩 비디오 동안에도PictureBox에서 미리보기를 표시하는 방법?
1.I가 가능한 비디오 장치를 가지고 표시되어있다
init. IFilterGrapth2 개체를 사용하여
Graph = (IFilterGraph2)new FilterGraph();
init.
captureGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
4.filter의 grapth를 사용하여 사용해 ICaptureGraphBuilder2 객체를 사용해 ICaptureGraphBuilder2 객체 captureGraph.SetFiltergraph(Graph);
- 설정하고 전체 코드는 아래와 같다
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;
}
}
Image 및 VMR9 필터를 실제로 연결 한 방법에 대해 좀 더 자세히 설명해 주시겠습니까? – OzBarry