Возникла задача взять с камеры транслирующей только видео через RTSP статичный скриншот в формате JPEG. Решено написать консольное приложение параметрах которого откуда взять поток и куда сохранить скриншот с использованием OpenCV (EmguCV).
Использовать можно ffmpeg, но внятного и быстро работающего решения, которое не зависало бы в памяти при любой проблеме, не нашлось.
Код упрощенно выглядит так:
1 2 3 4 |
Public Sub Main(args() As String) Dim vc As Emgu.CV.Capture = New Emgu.CV.Capture(args(0)) vc.QueryFrame.Save(args(1), Drawing.Imaging.ImageFormat.Jpeg) End Sub |
Готовое приложение: rtsp2jpeg (x86). Перед использованием установить vcredist_x86.exe.
UPD: Добавлена функция таймаута подключения к потоку. В предыдущей версии, при проблемах с подключением, приложение оставалось в памяти.
Использовать так:
1 |
rtsp2jpeg.exe rtsp://admin:admin@192.168.6.190/0 c:\temp\123.jpg |
Ссылка на закачку не доступна
Спасибо. Исправил.
разрешение jpg файла 1920*1080?
Как в потоке
программа моргает консольным окном и падает без ошибки.
Ну, по идее, она ничего больше и делать то не должна… Она делает снапшот по URL на RTSP поток и сохраняет его в JPG. “Откуда” и “куда” – нужно указать в параметрах запуска.
Как ни странно, но у меня приложение при проблеме с коннектом не закрывается, а продолжает ждать по несколько часов. (Версия файла из тела поста.)
Пока борюсь powershell-ом, раз в 10 секунд проверяю не завис ли процесс, если да, то убиваю его:
###############
#зациклили функцию
while(1)
{
#раз в какой промежуток проверять процесс
start-sleep -seconds 10
#получаем сколько уже времени запущен процесс.
$time=”$($$ = (date) – (ps rtsp2jpeg).StartTime)$$”
#если процесс запущен больше 30 секунд – убиваем его.
if ($time -gt “00:30:00.0000000”) {Stop-Process -processname rtsp2jpeg}
}
###############
Добрый день.
Извините за некорректный вопрос.
А возможно получить исходный код программы?
Это очень хорошее приложение, и хотелось его чуток изменить и внедрить в свою систему видеонаблюдения.
Спасибо большое.
Исходный код не могу предоставить, т.к. проект разросся и был интегрирован в другой. Если будете реализовывать самостоятельно, рекомендую использовать OpenCV 3.X. Он более стабилен.