LINUX.ORG.RU

[C\C++] Сервер работы с IP видео камерами


0

0

Поставили тут задачу написать сервер для работы с ip камерами управляемый по сети. IP камеры отдают видео в MJPEG, других пока нет.

Прошу помощи сообщества по следующим вопросам:

1) Сервер принимает видео с IP камеры и отдает его клиенту. Вопрос в том как сделать отправу видео сервером и прием клиентом? Потяно что через сокеты, но может быть есть понятные примеры\статьи?

2) Полиэкран. Когда делал вывод все было просто, а тут надо формировать полиэкран (4 видео потока) прямо на сервере и в таком виде его отдавать клиенту и записывать в avi файл. Что тоже немного не ясно. Как это реализовать?

Реализация нужна на С\С++, так как что-то другое (тот же питон) боюсь не успею изучить.

Заранее спасибо за ответы.

1) Сервер принимает видео с IP камеры и отдает его клиенту. Вопрос в том как сделать отправу видео сервером и прием клиентом? Потяно что через сокеты, но может быть есть понятные примеры\статьи?

Если клиентов несколько, и они расположены в пределах управляемой вами сетевой инфраструктуры, то имеет смысл сделать передачу через мультикаст, чтобы снизить нагрузку на сервер и сеть. Посмотри ØMQ, там один API на много транспортов.

Если важна передача в реальном времени, то придётся заморачиваться с соответствующими протоколами RTP/RTSP.

2) Полиэкран. Когда делал вывод все было просто, а тут надо формировать полиэкран (4 видео потока) прямо на сервере и в таком виде его отдавать клиенту и записывать в avi файл. Что тоже немного не ясно. Как это реализовать?

Расжимать mjpeg'и с камер, укладывать в память 2x2, сжимать, посылать клиенту. Использовать лучше libavcodec/libavformat, а не тормозной libjpeg.

А почему такое требование?

mv ★★★★★
()
Ответ на: комментарий от mv

1) Спасибо, посмотрю.

Клиентов будет ровно три, подключение напрямую к серверу считается управляемой мной инфраструктурой? :)

2) В теории-то все ясно, а на практике... потому и просил может быть есть статьи или примеры.

Какие именно требования смутили?

desruptor
() автор топика

1. asio тебе в помощь

2. распаковываешь jpeg, рисуешь в 4 квадратика. преобразуешь yuv422->420 (в jpeg обычно 422), формируешь из 4х yuv420 один большой 420 и скармливаешь его ffmpeg'у

Reset ★★★★★
()
Ответ на: комментарий от desruptor

С rtp/rtsp заморачивать вообще не нужно, если не нужна совместимость со сторонними клиентами. Проще прям в tcp-сокет слать кадры.

Reset ★★★★★
()
Ответ на: комментарий от desruptor

Клиентов будет ровно три, подключение напрямую к серверу считается управляемой мной инфраструктурой? :)

Напрямую - это без свитча? ;) В общем, имеет смысл сразу на мультикаст затачиваться.

2) В теории-то все ясно, а на практике... потому и просил может быть есть статьи или примеры.

А что неясного-то? Есть 4 картинки, нужно в цикле копированиями построчно сделать из них одну большую :) Скопировал строчку 1-й картинки, строчку 2-й. Как первые две кончились, начинаешь 3-ю и 4-ю. Правда, если картинки в планарном формате (YUV), то строчки нужно копировать попланово. В общем, реши, какой формат будет, потом посмотри на его описание и продумай, как именно нужно клеить. Ничего сложного.

Какие именно требования смутили?

Передача всех 4-х картинок одним потоком. Если клиент сам писать будешь, почему нельзя передавать камеры в отдельных потоках? Какая разница? И в таком случае разжимать кадры на сервере, клеить в один большой и жать не надо будет.

mv ★★★★★
()
Ответ на: комментарий от mv

Потому что клиенты будут аналоговые, сигнал отправляется на преобразователь, а преобразователь уже отдает клиенту.

Аналог с клиента не убрать, ибо совместимость.

desruptor
() автор топика
Ответ на: комментарий от desruptor

Потому что клиенты будут аналоговые

Совсем «крохотную» деталь опустил ;) Т.е. на сервере будет стоять видеокодер, к которому будут подключаться 3 телевизора?

mv ★★★★★
()
Ответ на: комментарий от mv

Только что полностью осознал первоначальное сообщение. Если пережимать видео на сервере, то это жопа будет.

Reset ★★★★★
()
Ответ на: комментарий от mv

Видимо потому же почему и не пошел остальным — zone minder писан инопланетянами для инопланетян, как им вообще можно пользовать не представляю.

Reset ★★★★★
()
Ответ на: комментарий от mv

Интересно, сколько ЛОРовцев писали линуксовое видеонаблюдение? :)

Каждый второй, наверное :)

Я, например, делал под v4l2 захват видео и обработку на лету. Все равно универсальных программ нет. Приходится самому делать.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от mannaz

затем что 1) захват будет не с ip камер, а из преобразователя аналог->цифра

2) клиенты будут аналоговые и я их не могу изменять

3) управление записью\камерами\etc идет через RS-422

desruptor
() автор топика
Ответ на: комментарий от mv

Прошу извинить, весь в разработке :)

Грубо говоря да, управляться все это дело будет через RS-422 если 2.6 ядро ослит плату или я осилю драйвер для этой платы.

desruptor
() автор топика
Ответ на: комментарий от desruptor

> а если камера с web мордой и выдает видео по http запросу?

Если камера с web мордой, то это Active-X, Java или Flash, работающий в твоем браузере. Если протокол по которому сосется катинка не насквозь проприетарный, то VLC поможет и здесь.

mannaz
()
Ответ на: комментарий от mannaz

ИМХО, лучше уж сразу свое писать с v4l2, чем тащить данные через mplayer или, еще хуже, vlc, а потом через пайп их декодировать и обрабатывать.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.