J'ai besoin d'aide pour sauvegarder une vidéo de la caméra de l'ordinateur portable dans un fichier. J'utilise maintenant un code pour rechercher les périphériques vidéo et la vidéo précédente sur pictureBox. J'ai essayé avec AVIFileWrite mais j'ai échoué. Comment utiliser VideoFileWriter pour atteindre mon objectif ?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using AForge.Video;
using AForge.Video.DirectShow;
using AForge.Video.FFMPEG;
using System.IO;
using AForge.Video.VFW;
using System.Drawing.Imaging;
namespace VideoCapture
{
public partial class Form1 : Form
{
private FilterInfoCollection VideoCaptureDevices;
private VideoCaptureDevice FinalVideo;
public static Bitmap _latestFrame;
//private VideoFileWriter writer;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo VideoCaptureDevice in VideoCaptureDevices)
{
comboBox1.Items.Add(VideoCaptureDevice.Name);
}
comboBox1.SelectedIndex = 0;
}
private void button1_Click(object sender, EventArgs e)
{
FinalVideo = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
FinalVideo.Start();
}
void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap video = (Bitmap)eventArgs.Frame.Clone();
pictureBox1.Image = video;
//int width = 640;
//int height = 480;
//VideoFileWriter writer = new VideoFileWriter();
//writer.Open(@"c:\video.avi", width, height, 25, VideoCodec.Default, 1000000);
//for (int i = 0; i < 1000; i++)
//{
// writer.WriteVideoFrame(video);
//}
//writer.Close();
//Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb);
//writer.WriteVideoFrame(image);
//MessageBox.Show("jest");
}
private void button2_Click(object sender, EventArgs e)
{
if (FinalVideo.IsRunning)
{
FinalVideo.Stop();
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (FinalVideo.IsRunning == true) FinalVideo.Stop();
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = "Device running..." + FinalVideo.FramesReceived.ToString() + " FPS";
}
}
}