В рамках пробного проекта по видеонаблюдению была создана COM компонента «CameraViewerCOM» для просмотра IP видеокамер (в среде VS, C# на базе библиотеки «OpenCVSharp4»). Первоначально допускалось подключение этой компоненты к 1С в управляемом режиме, но при реализации этой задачи столкнулись огромными проблемами. Оказалось, что очистки памяти по создаваемым картинкам в управляемых формах 1С не происходит совсем (из-за чего память при потоковом видео съедается моментально). Благополучнее ситуация происходит в не управляемом режиме. Тут удалось реализовать работу просмотра данных с ЧЕТЫРЕХ IP камер без потерь в оперативной памяти.
Компонента «CameraViewerCOM» многократно проверялась (без подключения к 1С) на утечку памяти. Показала себя стабильной на больших временных отрезках. Использование DLL в приложении, написанном на C# дало хорошие результаты при отображении потокового видео более чем с 10 IP камер одновременно.
Итогом данного пробного проекта стало понимание, что технологии, которые допустимо использовать в приложениях, написанных на C#, с трудом интегрируются в 1С. Причем тесты, проведенные в 1С показали, что очень многое зависит от версии платформы. Так на платформе 8.3.16.1063 (как нам казалось на протяжении 4 лет благополучной) утечка оперативной памяти происходит с катастрофической скоростью, а на платформе 8.3.25.1394 такая проблема не наблюдается.
Обработка «Демонстрашка COM компоненты "Camera viewer"», которую я выкладываю с DLL компонентой, это результат многократных оптимизаций под работу с 1С. Архив DLL загружен в макет обработки. Для того, чтобы COM компонента заработала, необходимо «распаковать» ее в выбранный каталог и зарегистрировать под правами администратора (на ПК запустив «RegCom.bat» файл). Код обработки открыт, но архив c DLL не содержит исходников.
СОМ библиотека писалась под NET Framework 4.8 для Windows 64 10-11. Доступные методы DLL «CameraViewerCOM» (объект создаем COM_Объект = Новый COMОбъект("CameraViewerCOM.CVClass");):
- Процедура COM_Объект.CreateVC(Строка rtspCam) – аргументом передается строка вида «IP:Port»|«RTSP команда подключения к камере, в форме rtsp://<login>:<password>@<IP>:<Port>/<дополнительные ключи запуска>»|«Описание места камеры (по желанию)». 2 разделителя «|» должны присутствовать. Первую группу «IP:Port» можно заменить на «Камера N». Последнюю модно опустить. Команда должна быть указана верно. В итоге у вас может получиться «Камера 1| rtsp://<login>:<password>@<IP>:<Port>|». Правильность команды можно проверить на «VLC media player» (бесплатный).
- Процедура COM_Объект.RunTmr() - запуск таймера событий приходящих с кадрами с IP видеокамер.
- Процедура COM_Объект.StopTmr() - остановка таймера событий приходящих с кадрами с IP видеокамер.
- Функция COM_Объект.GetTmrInterval() – возвращает интервал таймера событий (начальное значение 100 мс).
- Процедура COM_Объект.SetTmrInterval(Число TmrInt) – устанавливает интервал таймера событий.
- Функция COM_Объект.StatusTmr() – получаем статус таймера событий включен (истина) / отключен (ложь).
- Функция COM_Объект.CountCamera() – возвращает число камер в списке подключенных.
- Функция COM_Объект.GetBitmapStr(Строка IpPortCmr) – получить картинку камеры с наименованием IpPortCmr (поле «IP:Port») в виде строки BASE64.
- Функция COM_Объект.SaveToJpg(Строка IpPortCmr, Строка Path) – записать картинку камеры наименованием IpPortCmr (поле «IP:Port») в JPG файл Path.
- Процедура COM_Объект.DisposeVC(Строка IpPortCmr) - освобождает ресурсы по камере с наименованием IpPortCmr (поле «IP:Port»).
- Процедура COM_Объект.AllDisposeVC() - освобождает ресурсы по всем камерам подключенным методом «CreateVC».
- Функция COM_Объект.GetBitmap(Строка IpPortCmr) – получить картинку камеры с наименованием IpPortCmr (поле «IP:Port») в формате Bitmap.
Основное тестирование обработки «Демонстрашка COM компоненты "Camera viewer"» на 64 разрядной платформе 1С:8.3.25.1394 OS Windows 64 10. Допустимо закрытие обработки и открытие ее снова. Процесс видео наблюдения продолжится. Добавление своего кода в событие вызываемое компонентой «CameraViewerCOM», может вызвать утечку памяти. Т.к. событие вызывается многократно и не соблюдение правил очистки памяти, может вызвать ее переполнение.
Обработка «Демонстрашка COM компоненты "Camera viewer"» позволяет просматривать потоковое видео с 4 IP камер (до 9 если мощный компьютер) на не управляемой форме 1С:Предприятие (толстый клиент). Есть возможность останавливать видеопоток, делать скрин с самой камеры в JPG. Реализовано управление частотой обновления картинки в 1С.
Вступайте в нашу телеграмм-группу Инфостарт