Просмотр архива видео Trassir из 1С

30.03.23

Интеграция - WEB-интеграция

В Trassir есть SDK, которое позволяет получать и просматривать архив видео. Рассмотрим, как это можно сделать.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Просмотр архива видео Trassir из 1С:
.epf 8,29Kb
7
7 Скачать (1 SM) Купить за 1 850 руб.

Итак, создаем обработку и в ней добавляем реквизиты формы:

 

 

Реквизиты Адрес, Имя пользователя и пароль служат для подключения к Трассиру. Эту информацию можно получить у сисадмина или в настройках сервера самого Trassir. Обращаю внимание, что для просмотра архива видео подключение должно происходить именно по имени пользователя и паролю, а не просто по паролю SDK (данная особенность описана в мануале SDK Trassir).

Имя канала, идентификатор канала, сессия и токен служат для хранения полученных данных по SDK.

Путь к браузеру - путь к браузеру (в моем случае яндекс) для запуска архива видео. Сразу хочу сказать, что я пытался использовать поле HTML документа в 1С, переход по навигационной ссылке (из БСП) или работу с IE - как говорится, "не взлетело".

Начало и окончание просмотра - для определения интервала архива видео, который хотим получить.

Кроме того, в модуле формы определим 2 переменные для кеширования соединения HTML:

&НаКлиенте
Перем Соединение;
&НаКлиенте
Перем СоединениеТокен;

и сразу определим функции, которые нам вернут требуемое соединение:

&НаКлиенте
Функция ПолучитьСоединение()

	Если Соединение <> Неопределено Тогда
	
		Возврат Соединение;
	
	КонецЕсли;
	Если ПустаяСтрока(Адрес) Тогда
	
		ВызватьИсключение("Не указан адрес");
	
	КонецЕсли;
	Соединение = Новый HTTPСоединение(Адрес, 8080,,Пароль,,,Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено));
	Возврат Соединение;

КонецФункции // ПолучитьСоединение()

&НаКлиенте
Функция ПолучитьСоединениеТокен()

	Если СоединениеТокен <> Неопределено Тогда
	
		Возврат СоединениеТокен;
	
	КонецЕсли;
	
	Если ПустаяСтрока(Адрес) Тогда
	
		ВызватьИсключение("Не указан адрес");
	
	КонецЕсли;
	СоединениеТокен = Новый HTTPСоединение(Адрес, 555);
	Возврат СоединениеТокен;

КонецФункции // ПолучитьСоединениеТокен()

Обратите внимание, что соединение для работы с SDK у нас защищенное, а для просмотра архива видео - нет.

Порты в соединениях (8080 и 555) указаны в настройках сервера Trassir. Если их никто не менял, то по умолчанию они такие.

Так как все результаты запросов Trassir возвращает в виде Json, добавим служебную функцию для чтения:

&НаКлиенте
Функция ПрочитатьЗапросВСтруктуру(СтрокаЗапроса) Экспорт

	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(СтрокаЗапроса);
	Возврат ПрочитатьJSON(Чтение);

КонецФункции // ПрочитатьЗапросВСтруктуру()

Разместим наши реквизиты на форме. Получается примерно такое:

 

 

Пропишем для имени канала процедуру начала выбора с кодом (сразу говорю, использую асинхронные вызовы, но переписать на обработчик ожидания, думаю, несложно):

&НаКлиенте
Асинх Процедура ИмяКаналаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	Запрос = Новый HTTPЗапрос("/channels?sid=" + ПолучитьСессию());
	Ответ = ПолучитьСоединение().Записать(Запрос);
	СтруктураОтвета = ПрочитатьЗапросВСтруктуру(Ответ.ПолучитьТелоКакСтроку());
	Если Не СтруктураОтвета.Свойство("channels") Тогда
	
		Возврат;
	
	КонецЕсли;
	СписокВыбора = Новый СписокЗначений;
	Для каждого Позиция Из СтруктураОтвета.channels Цикл
	
		СписокВыбора.Добавить(Позиция.guid, Позиция.name);
	
	КонецЦикла;
	Обещание = СписокВыбора.ВыбратьЭлементАсинх("Выберите камеру");
	Результат = Ждать Обещание;
	Если Результат <> Неопределено Тогда
	
		ИмяКанала = Результат.Представление;
		ИдентификаторКанала = Результат.Значение;
	
	КонецЕсли;
КонецПроцедуры

Данная процедура получает список каналов, которые есть в Trassir и исходя из выбранного канала получаем идентификатор канала (по сути именно он нам и нужен для получения архива видео).

Функцию Получить соединение мы уже рассматривали, здесь видим еще одну функцию ПолучитьСессию(). Она очень простая:

&НаКлиенте
Функция ПолучитьСессию()

	Если Не ПустаяСтрока(Сессия) Тогда
	
		Возврат Сессия;
	
	КонецЕсли;
	
	Если ПустаяСтрока(ИмяПользователя) ИЛИ ПустаяСтрока(Пароль) Тогда
	
		ВызватьИсключение("Не указано имя пользователя и/или пароль");
	
	КонецЕсли;
	
	Запрос = Новый HTTPЗапрос("login?username=" + ИмяПользователя + "&password=" + Пароль);
	Ответ = ПолучитьСоединение().Записать(Запрос);
	СтруктураОтвета = ПрочитатьЗапросВСтруктуру(Ответ.ПолучитьТелоКакСтроку());
	Если СтруктураОтвета.success <> 1 Тогда
	
		Возврат Неопределено;
	
	КонецЕсли;
	Сессия = СтруктураОтвета.sid; 
	ПодключитьОбработчикОбновитьСессию();
	Возврат Сессия;
КонецФункции // ПолучитьСессию()

Здесь процедура ПодключитьОбработчикОбновитьСессию запускает периодический пинг для поддержания сессии (в документации описано, что сессия живет 15 минут и её необходимо периодически "дёргать"):

&НаКлиенте
Процедура ОбновитьСессию()

	Если ПустаяСтрока(Сессия) Тогда
	
		ОтключитьОбработчикОжидания("ОбновитьСессию");
		Возврат;
	
	КонецЕсли;
	Запрос = Новый HTTPЗапрос("objects/?sid=" + Сессия);
	Ответ = ПолучитьСоединение().Записать(Запрос);
КонецПроцедуры // ОбновитьСессию()

&НаКлиенте
Процедура ПодключитьОбработчикОбновитьСессию()

	ОтключитьОбработчикОжидания("ОбновитьСессию");
	ПодключитьОбработчикОжидания("ОбновитьСессию", 840);//Раз в 15 минут надо дергать сессию

КонецПроцедуры // ПодключитьОбработчикОбновитьСессию()

И собственно команда для получения архива видео:

&НаКлиенте
Процедура ПросмотрВидео(Команда)
	Если Не ПроверитьЗаполнение() Тогда
	
		Возврат;
	
	КонецЕсли;
	
	Запрос = Новый HTTPЗапрос("get_video?channel=" + ИдентификаторКанала + "&container=mjpeg&stream=archive_main&sid=" + ПолучитьСессию());
	Ответ = ПолучитьСоединение().Записать(Запрос);
	СтруктураОтвета = ПрочитатьЗапросВСтруктуру(Ответ.ПолучитьТелоКакСтроку());
	Если СтруктураОтвета.success <> 1 Тогда
	
		Возврат;
	
	КонецЕсли;
	Токен = СтруктураОтвета.token;
	ПодключитьОбработчикОбновитьТокен();
	
	АдресДляБраузера = "http://" + Адрес + ":555/" + Токен;
	ЗапуститьПриложение(ПутьКБраузеру + " " + АдресДляБраузера,, ЛОЖЬ);
	ТекДата = ТекущаяДата();
	Пока ТекДата + 6 > ТекущаяДата() Цикл
	
		
	
	КонецЦикла;
	
	Запрос = Новый HTTPЗапрос("archive_command?command=play&start=" + ПолучитьДатуВремяТрассир(НачалоПросмотра) + "&stop=" + ПолучитьДатуВремяТрассир(ОкончаниеПросмотра) + 
		"&speed=1&sid=" + ПолучитьСессию() + "&token=" + Токен);
	ПолучитьСоединение().Записать(Запрос);
	
КонецПроцедуры

ПодключитьОбработчикОбновитьТокен действует аналогично и по той же причине, что и ПодключитьОбработчикОбновитьСессию: срок жизни токена 15 секунд и его необходимо "дёргать", чтобы он не умер:

&НаКлиенте
Процедура ПодключитьОбработчикОбновитьТокен()

	ОтключитьОбработчикОжидания("ОбновитьТокен");
	ПодключитьОбработчикОжидания("ОбновитьТокен", 13);

КонецПроцедуры // ПодключитьОбработкиОбновитьТокен()

&НаКлиенте
Процедура ОбновитьТокен()

	Если ПустаяСтрока(Токен) Тогда
	
		ОтключитьОбработчикОжидания("ОбновитьТокен");
		Возврат;
	
	КонецЕсли;
	
	Запрос = Новый HTTPЗапрос(Токен + "/?ping");
	
	Ответ = ПолучитьСоединениеТокен().Записать(Запрос);

КонецПроцедуры // ОбновитьТокен()

Теперь собственно, зачем такие сложности с запуском в браузере просмотра архива. Дело в том, что именно в браузере будет просмотр архива видео. Управление архивом (переход на позицию, например) тоже будет отображаться в браузере. Поэтому, чтобы в браузере началось воспроизведение и сделана пауза в 6 секунд (добыта опытным путём) после запуска.

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

Обработка тестировалась на платформе 8.3.22.1750, но должна работать на версиях, где есть асинхронные вызовы (асинх)

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

P.S. Больно не пинайте - первая статья.

Trassir архив видео

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17783    19    22    

16

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19849    13    17    

16

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14424    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1172    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sivatorov 25.06.24 13:23 Сейчас в теме
Здравствуйте. Не пробовали открывать поток не в браузере, а например в VLC rtsp поток?
Мало ли еще тестировали экспорт архива и тд?
Оставьте свое сообщение