Перейти к содержимому
Compvision.ru
APXANGEL

Видео с IP камеры

Recommended Posts

Всем привет, нужно создать библиотеку для приёма и обработки кадров с ip камер. Собственно проблема в приёме кадров. Всё, что находил в сети, не заработало. Библиотеку с поддержкой ffmpeg перестроил. Когда в браузере набираю ip адрес и порт камеры после ввода логина и пароля видео с камеры есть, но с задержкой в несколько секунд.

P.S. Visual Studio 2015, OpenCV 3.1.0, на данный момент экспериментирую с камерой  http://vstarcam.in.ua/page/obzor-ip-kamery-vstarcam-c7815wip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуй отключить авторизацию. Заработало? Если да, то включи обратно и используй авторизацию автоматически, указывая пользователя и пароль в строке адреса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Отключить авторизацию сейчас нет возможности, сотрудник заболел у которого есть туда доступ, но я у него и раньше спрашивал можно ли отключить, говорил не знает как)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну так включай авторизацию в адрес!

Типа: rtsp://username:password@192.168.X.XXX/stream1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пробую с таким кодом:

#include "opencv2/opencv.hpp"
#define ESC_KEY 27

int main(int argc, char** argv)
{
	const char* ResultWindow = "Result";
	char key = -1;
	cv::Mat src;
	cv::VideoCapture capture;
	if (!capture.open("rtsp://admin:888888@192.168.0.200:8081/stream1")) return -1;
	cv::namedWindow(ResultWindow, CV_WINDOW_NORMAL | CV_WINDOW_KEEPRATIO | CV_GUI_EXPANDED);
	while (key != ESC_KEY)
	{
		if (capture.read(src))
		{
			cv::imshow(ResultWindow, src);
			key = cv::waitKey(1);
		}
		else break;
	}
	capture.release();
	cv::destroyAllWindows();
}

Программа не идёт дальше строки capture.open...

Интереснее выходит, если написать http://admin:888888@192.168.0.200:8081/cgi/mjpg/mjpg.cgi?.mjpg. Тогда, после паузы секунд в 5, в консоли на долю секунды выводится "warning: Error opening file (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:578)" и программа закрывается. Без понятия что это вообще за директория даже, такой нету даже в штатной сборке opencv.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня есть, может ты как-то неправильно OpenCV собрал? Потому что и на гитхабе есть: https://github.com/Itseez/opencv/blob/master/modules/videoio/src/cap_ffmpeg_impl.hpp

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну на гитхабе лежат исходники, а не уже собранный, в исходниках у меня такой файл тоже есть, но тут именно /build/opencv/... В штатном дистрибутиве opencv в папке build есть папки: bin, etc, include, java, python, x64. В моей сборке всё тоже самое, но без java и python. Тут даже нету папки opencv... Тот файл, который указан в ошибке у меня лежит по адресу \sources\modules\videoio\src\cap_ffmpeg_impl.hpp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну если это нормально, тогда собственно не понятно откуда взялся путь /build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp , который указан в ошибке, и что, собственно, делать с ошибкой)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Путь этот с того компа, на котором собирался твой opencv.

2. Попробуй запустить с другими опциями, например, с h264 кодеком, а не mjpeg.

3. Попробуй захватить видео голым ffmpeg, без OpenCV. Или vlc.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. opencv собирался на этом компьютере

2. Попробовал вот так http://admin:888888@192.168.0.200:8081/h264 ошибка та же

3. Попробовал в vlc открыть:

http://admin:888888@192.168.0.200:8081/cgi/mjpg/mjpg.cgi?.mjpg

http://admin:888888@192.168.0.200:8081/h264

rtsp://admin:888888@192.168.0.200:8081/stream1

http://admin:888888@192.168.0.200:8081/h264

Он поругался на всё, не ругается только если в первой ссылке порт написать не 8081 а 81, там просто молчит и ничего не выводит

Попробовал сейчас видео с веб камеры вывести, выводит серый экран, наверное всё-таки собралось не правильно

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пересобрал, проверил что с веб камерой работает, в остальном всё тоже самое, только ошибка появляется уже не на долю секунды. Однако это не меняет того факта, что в vlc тоже не воспроизводится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Надо посмотреть другие способы авторизации. Мне кажется, что причина именно в этом. Может, у тебя документация на камеру есть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Собственно, по ссылке, что я скинул в первом сообщении всё что есть. Только, мне то нужно потом библиотеку сделать будет для разных камер, есть какой-нибудь универсальный способ приёма изображения с ip-камер?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не, у всех свои тараканы. Даже заявляемая поддержка ONVIF (rtsp по-сути для видео) мало что значит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У большинства камер есть поддержка mjpeg, с ним как то проблем меньше  да и проц без аппаратного декодирование не так грузит как h264. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Случайно ссылку в интернете нашёл всё-таки http://192.168.0.200:81/videostream.cgi?user=admin&pwd=888888, в VLC открывает, релиз OpenCV "из коробки" выдал ошибку, наверное пересобирать надо, но этим позже возможно займусь. Сейчас другая проблема встала. В общем библиотеку запаковать в dll нужно. Если её не запаковывать, а использовать как обычные .h и .cpp файлы, то проблем нет, но после пакования в dll на самой последней строчке проекта, в котором её использую вылазит ошибка: Run-Time Check Failure #2 - Stack around the variable 'frameSource' was corrupted. Гугление результатов не дало. Проект по ссылке, может кто подскажет что с этим делать? http://depositfiles.com/files/y85j9b7lc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно проверить с помощью ffmpeg (под Windows):

ffplay.exe http://192.168.0.200:81/videostream.cgi?user=admin&pwd=888888

 

Если будет проигрываться, то и OpenCV должна справиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я так понял эту строку надо в командной строке windows вводить? Если да, то у меня пишел, что ffplay.exe не является программой и т.д. Но дело не в этом, в том проекте, на который я дал ссылку, тестировал на получении кадров с видеофайла. Очень странная ситуация происходит, вроде как все кадры получаются, но при завершении программы вылазит указанная ошибка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У тебя ffplay.exe есть где-нибудь? Если нет, то скачай.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ошибка в коде у тебя,  где-то память портится. Надо проверять всё вручную или взять всякие тулзы, под Линуксом это valgrind, например. Тут чисто рутинная программисткая работа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×