Как получить поток IP-камеры в C #? - PullRequest
7 голосов
/ 29 сентября 2011

Я использовал библиотеку AForge для создания этой маленькой программы, которая показывает прямую трансляцию с веб-камеры в PictureBox.

private FilterInfoCollection VideoCaptureDevices;
private VideoCaptureDevice FinalVideoDevice;

private void Form1_Load(object sender, EventArgs e)
{
   VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
   try
   {
      foreach (FilterInfo VidCapDev in VideoCaptureDevices)
      {
         comboBox1.Items.Add(VidCapDev.Name);
         comboBox1.SelectedIndex = 0;
      }
      FinalVideoDevice = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
      FinalVideoDevice.NewFrame += new NewFrameEventHandler(FinalVideoDevice_NewFrame);
      FinalVideoDevice.Start();
   }
   catch
   {
      MessageBox.Show("No camera found. Please connect your camera and click RESET.");
   }
}

        //////////////////////////////////////////////////////////////////////////////////////////

void FinalVideoDevice_NewFrame(object sender, NewFrameEventArgs e)
{
   try
    {
       pictureBox1.Image = (Bitmap)e.Frame.Clone();
    }
    catch { }
}

Но мне также нужно получить поток с IP-камеры.Какие-нибудь идеи, что было бы лучшим способом получить это?

Ответы [ 4 ]

13 голосов
/ 29 сентября 2011

Решено с помощью MJPEGStream из того же AForge.net:)

MJPEGStream stream = new MJPEGStream("http://192.168.2.5:8080/videofeed");
            stream.NewFrame += new NewFrameEventHandler(video_NewFrame);
            stream.Start();
2 голосов
/ 07 мая 2015

Та же проблема была со мной, как и у вас, и это был мой последний годовой проект по разработке или настройке решений для IP-камер с использованием c #. Но я потратил много времени на просмотр, чтобы получить любой фрагмент кода, написанный на C #, который может легко получить доступ к потоку ip-камеры, и очень скоро нашел Ozeeki SDK стороннего производителя. Но это пробная версия, срок действия которой истекает около недели, и она тоже не будет работать. Или, может быть, Ozeeki хочет просто обратные ссылки для своего сайта. Прежде всего вы должны ограничить себя, чтобы выбрать одну из камер. В моем случае у меня есть сетевая камера HIkvision. Просто скачайте Device Network SDK для камеры Hikvision отсюда: http://www.hikvision.com/en/us/download_more.asp?id=1482

Извлеките его, и вы можете найти в папке SDK 4 подпапки. Внутри папки "doc" вы найдете "Руководство по программированию Device Network SDK" Откройте его и раскройте дерево «Руководство по программированию». Нажмите на ссылку «Основная процедура API» или «Процедура предварительного просмотра модуля». Здесь вы найдете все дорожные карты, какие шаги вы должны предпринять, чтобы вызвать функции, чтобы получить прямой эфир с камеры. Объявление всех функций находится внутри дерева «Определение базового интерфейса», разверните его и прочитайте все по одному. Игра еще не закончилась, но только началась; SDK со всеми функциями написан на основе неуправляемого кода на C / C ++. И не может быть добавлен в проект решения Manged C #. Поэтому вам нужно создать оболочку для всех из них, которые используются для получения потока с камеры, и вызывать их из c #. Просто ознакомьтесь с руководством по документации, какие у них функции. Подпишись на меня в Твиттере : https://twitter.com/CodingVampire Желаю вам удачи

2 голосов
/ 29 сентября 2011

Однажды я работал с библиотекой directShow.net . Он дает вам доступ к большинству функций DirectShow, и одна из них - захват. Если вы можете использовать веб-камеру ip с DirectShow, вы можете использовать ее и в своей программе.

2 голосов
/ 29 сентября 2011

IP-камеры не имеют определенных медиаинтерфейсов / API в Windows, они просто устройства в локальной сети. Также существуют сотни и тысячи моделей, и они не имеют общих интерфейсов доступа (даже близко).

Итак, прежде всего, вы должны быть конкретны в отношении модели вашего интереса.

Также некоторые поставщики предоставляют дополнительные «драйверы», которые представляют IP-камеры в качестве мультимедийных устройств, например «Драйвер DirectShow для IP-камеры». В большинстве случаев это зависит от поставщика и не будет работать с другими камерами.

Следующим шансом является то, что камера реализует хорошо известный протокол потоковой передачи, и в этом случае некоторые универсальные драйверы также могут работать нормально.

Или, пока вы являетесь пользователем C #, вы можете проверить HTTP / CGI API IP-камеры и реализовать потоковую передачу себя в коде, отправляя и получая данные через соединение HTTP / TCP / UDP с устройством.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...