Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2011, 16:19   #1
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию AForge.NET запись с WEB камеры видеофайла

Подскажите пожалуйста,сообственно AForge.NET есть примеры вещание видео с видеокамеры (Например:webcam-in-c-aforgenet).Смысл заключается в постоянном снятии снимка изображение и дальнейшей вставки в пикчер бокс,как слайд шоу.Меня интересует как можно эти картинки компоновать в видеофайл (avi и.т.д.), или сразу писать как видео.Помогите с примерчиком пожалуйста.
bondik вне форума Ответить с цитированием
Старый 20.08.2011, 09:37   #2
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

Например вот:
Цитата:
Namespace: AForge.Video.VFW
Код:
// instantiate AVI writer, use WMV3 codec
AVIWriter writer = new AVIWriter( "wmv3" );
// create new AVI file and open it
writer.Open( "test.avi", 320, 240 );
// create frame image
Bitmap image = new Bitmap( 320, 240 );

for ( int i = 0; i < 240; i++ )
{
    // update image
    image.SetPixel( i, i, Color.Red );
    // add the image as a new frame of video file
    writer.AddFrame( image );
}
writer.Close( );
Но что то падает на
Код:
writer.Open( "test.avi", 320, 240 );
, выход за границы массива.Хз из за чего.Пример с оф сайта
bondik вне форума Ответить с цитированием
Старый 20.08.2011, 09:44   #3
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

Вообщем вот рабочий пример может кому пригодится
Код:
 AVIWriter writer = new AVIWriter("DIB ");
          //  writer.Codec = "DivX";
            // create new AVI file and open it
            writer.Open("test1.avi", 768, 576);
            // create frame image
            Bitmap image = new Bitmap(768, 576);

            for (int i = 0; i < 240; i++)
            {
                // update image
                image.SetPixel(i, i, Color.Red);
                // add the image as a new frame of video file
                writer.AddFrame(image);
            }
            writer.Close();
        }
а пикчи для создания берем с камеры , пример ссылка в первом посте
bondik вне форума Ответить с цитированием
Старый 20.08.2011, 10:33   #4
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

И вот полностью рабочая программа,так как на русском языке мало примеров,решил выложить. Немного комментариев,но достаточно чтобы понять суть.
Код:
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 AForge.Video.VFW;
using AForge.Video;
using AForge.Video.DirectShow;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {   
         private bool DeviceExist = false;
	     private FilterInfoCollection videoDevices;
	     private VideoCaptureDevice videoSource = null;
         public AVIWriter writer;

        public Form1()
        {
            InitializeComponent();
        }

        private void getCamList()
	        {
	            try
	            {
	                videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
	                comboBox1.Items.Clear();
	                if (videoDevices.Count == 0)
	                    throw new ApplicationException();
	 
	                DeviceExist = true;
	                foreach (FilterInfo device in videoDevices)
	                {
	                    comboBox1.Items.Add(device.Name);
	                }
	                comboBox1.SelectedIndex = 0; //make dafault to first cam
	            }
	            catch (ApplicationException)
	            {
	                DeviceExist = false;
	                comboBox1.Items.Add("No capture device on your system");
	            }
	        }
	

        private void button1_Click(object sender, EventArgs e)   //рефреш списка подключенных веб камер
        {
            getCamList();
        }

        private void button2_Click(object sender, EventArgs e)  //непостредственно запись
        {
             writer = new AVIWriter("DIB ");

            //  writer.Codec = "DivX";

            // create new AVI file and open it

             writer.Open("video.avi", 160, 120);

            // create frame image

            Bitmap image = new Bitmap(160, 120);


            videoSource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString);
 	        videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
	        
	        videoSource.DesiredFrameSize = new Size(160, 120);
	                    //videoSource.DesiredFrameRate = 10;
	        videoSource.Start();
	                    
                 }

        private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) //обработчик события NewFrame 
	        {
	            Bitmap img = (Bitmap)eventArgs.Frame.Clone();
	            //do processing here
	            writer.AddFrame( img ); 
	        }

         
	        private void CloseVideoSource()  //отключить камеру
	        {
	            if (!(videoSource == null))
	                if (videoSource.IsRunning)
	                {
	                    videoSource.SignalToStop();
	                    videoSource = null;
	                }
	        }

            private void button3_Click(object sender, EventArgs e) //остановить запись
            {
                CloseVideoSource();
                writer.Close();
            }

    }

}
bondik вне форума Ответить с цитированием
Старый 10.03.2012, 03:46   #5
omk0p
Новичок
Джуниор
 
Регистрация: 01.04.2011
Сообщений: 1
По умолчанию Хорошо работает

Хорошо работает, но не отлично, видео при воспроизведении очень ускорено, не знаю пока еще почему, возможно из-за того, что видеокамера работает на 8фпс, а проигрыватель воспроизводит как 30, нужно где-то в свойствах файла указывать частоту, чтобы потом воспринимал ее проигрыватель и еще звук ловить! буду разбираться, спасибо! отличная статья!
omk0p вне форума Ответить с цитированием
Старый 10.03.2012, 15:59   #6
bondik
Форумчанин
 
Регистрация: 24.04.2008
Сообщений: 300
По умолчанию

Я бы не стал говорить что статья. Так небольшой кусочек работы.
По поводу бит рейта.
Вот все члены AVIWriter
http://www.aforgenet.com/framework/d...8e35c90356.htm
А нас именно интересует свойство
Код:
FrameRate
В документашке написанно:
Код:
Default frame rate is set to 25.
Соответсвенно меняем на сколько нужно.

Последний раз редактировалось bondik; 10.03.2012 в 16:01.
bondik вне форума Ответить с цитированием
Старый 06.04.2012, 11:38   #7
DeGroup
 
Регистрация: 13.09.2011
Сообщений: 8
По умолчанию

Вопрос вот в чем.
Все хорошо работает если идет съемка сигнала с одной камеры, а вот с нескольких возникают проблемы.
Сделал вот так:

Код:
public static AVIWriter[] ChannelArchive = new AVIWriter[MaxChannelCount];
....
            for(i=0;i<MaxChannelCount;i++)
            {
                ChannelArchive[i] = new AVIWriter("DIB "); 
                ChannelArchive[i].FrameRate = 8;
            }
            
            for (i = 0; i < ChannelCount; i++)
            {
                StrTmp = ArcPath + "\\" + "CH_" + (i+1).ToString("00") + "_" + DateTime.Now.Day.ToString("00") + 
                                                         DateTime.Now.Month.ToString("00") +
                                                         DateTime.Now.Year.ToString("0000") + ".avi";
                ChannelArchive[i].Open(StrTmp, 320, 240);
            }
...
для каждого канала создается свой процесс и там уже
Код:
 MainForm.CamImageReceiver[Num].Image = Image.FromStream(MStream);
 Bitmap b = (Bitmap)MainForm.CamImageReceiver[Num].Image;
  MainForm.ChannelArchive[Num].AddFrame(b);
Так вот в чем проблема, через некоторое время вылетает
"Объект используется другим процессом"
Ни чего понять не могу
Помогите разобраться
DeGroup вне форума Ответить с цитированием
Старый 06.04.2012, 13:57   #8
DeGroup
 
Регистрация: 13.09.2011
Сообщений: 8
По умолчанию

Ладно, пост выше я реализовал.
Теперь другой вопрос, файл получается слишком большим, как его ужать?
.Quality не очень то помогает.
Может знает кто?
DeGroup вне форума Ответить с цитированием
Старый 09.04.2012, 06:05   #9
Горгий
 
Регистрация: 11.01.2011
Сообщений: 8
По умолчанию

Я видимо что-то не понимаю, а куда производится вывод видео?
в какую форму?
Горгий вне форума Ответить с цитированием
Старый 09.04.2012, 06:09   #10
Горгий
 
Регистрация: 11.01.2011
Сообщений: 8
По умолчанию

После нажатия
Код:
private void button2_Click(object sender, EventArgs e)
        {
            writer = new AVIWriter("DIB ");

            //  writer.Codec = "DivX";

            // create new AVI file and open it

            writer.Open("video.avi", 160, 120);

            // create frame image

            Bitmap image = new Bitmap(160, 120);
        }
создается видео файл в который начинается запись?
или я что-то путаю, просветите пожалуйста.


т.к по ссылке http://webcam-in-c-aforgenet) в коде присутствует Пикчербокс.
Горгий вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись видео с Web камеры и звука с микрофона в Delphi mzuko Мультимедиа в Delphi 5 07.03.2012 23:02
Запись видео c web камеры на диск через DSPack Lorden Общие вопросы Delphi 0 26.02.2011 14:26
Запись видео с камеры на C# RIO Общие вопросы .NET 2 11.06.2010 20:50