Приветствую!
В одном проекте возникла необходимость получать видео с IP камеры, вещающей в H264 формате и всё было хорошо, пока клиентов, подключённых к камере, было раз-два да обчёлся.
Но пользователей проекта становилось всё больше и камера просто не выдерживала по 5-6 клиентов и начинала адцки лагать т.к. сеть у неё всего 100 мб, да и производительность около нуля.
Было решено найти софт сервера-ретранслятора, т.к. канал от сервера до клиентов достаточно толстый, а большую часть времени он просто курит бамбук,
но поиски готового софта, который бы позволил просто клонировать один поток с камеры на всех желающих клиентов, не увенчались успехом.
Чтож, пришлось написать свой велосипед.
Написан на Qt 5.10 без использования сторонних библиотек и других зависимостей.
Из плюшек:
- многопоточность (которая, сука, выжирает почти всё, что может: по потоку на канал камеры и по потоку на клиента),
- независимость от сторонних библиотек (просто лень искать было подходящие 😀 )
- говнокодность (писался на скорую руку, архитектура кастовалась походу раскуривания протоколов RTSP, RTP, SDP ), но уже чуть-чуть меньше.
- после сборки доработать напильником ( тестировал только на камерах проекта (китайских no-name) и собственных клиентах )
- выкладываю как есть и обновляться будет лишь при возникновении багов в основном проекте т.к. всем — не угодишь и смотри предыдущий пункт =)
UPD1 (22.12.2017):
- Теперь выжирает не всё, но почти всё
- Сделал обработку основных ошибок камеры/потока/етк
- Сделал освобождение ресурсов при остановке/ошибке
- Сделал доступ только по пользователю/паролю
9 комментариев
Подскажите, пожалуйста, каким способом можно его использовать, чтобы на сайт rtsp поток передавать? И непонятна установка, как все должно проходить. Спасибо.
Здравствуйте.
Сервер просто позволяет обслуживать гораздо больше подключений, чем это могла бы сделать сама камера при прямом подключении к ней.
Для установки нужно сначала скомпилировать сервер в QtCreator, потом исполняемый файл можно запустить в фоновом режиме и в файле настроек прописать подключения к камерам.
Добрый день. Подскажите, а как можно передать адрес потока так же через GET параметр?
Пример
rtsp://127.0.0.1:2666/trackID=1?user=admin&pass=178900 &url=http://mysite.ru/videourl/548.m3u8
Добрый день. Откуда брать данные настраивается в конфигурационном файле.
А не подскажите как можно управлять камерой(фокус, поворот)?
имеется ip камера beward. C захватом разобрался, а про управление ничего не удалось найти…
Гуглить на тему onvif.
в каталоге с исходниками из командной строки выполнить: qmake -project
В созданном файле проекта Cameron-master.pro добавить строчку: QT += widgets network
Можно в проект добавлять .PRO файл у меня не собралось я начинающий .
In file included from settings/settings.h:8:0,
from appcore.h:6,
from appcore.cpp:1:
./Server/server.h:5:22: fatal error: QTcpServer: Нет такого файла или каталога
compilation terminated.
Makefile:378: ошибка выполнения рецепта для цели «appcore.o»
make: *** [appcore.o] Ошибка 1
Обновил репозиторий, теперь есть.