Как воспроизвести потоковое видео RTSP в 1С 8.3?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Приветствуем, коллеги! Давайте разберемся с одной из интереснейших, но при этом весьма нетривиальных задач: возможно ли организовать воспроизведение потокового видео по протоколу RTSP непосредственно в интерфейсе 1С 8.3? Это распространенный запрос, особенно в системах видеонаблюдения или производственного контроля. Мы проанализируем текущие возможности платформы и существующие обходные пути, чтобы дать вам максимально полное представление о решении этой проблемы.

Изначально необходимо понимать, что 1С:Предприятие 8.3, особенно в тонком клиенте, не предоставляет нативной поддержки для прямого воспроизведения RTSP-потоков. Протокол RTSP (Real-Time Streaming Protocol) предназначен для управления потоком (запуск, пауза, перемотка), тогда как само видео передается по другому протоколу, чаще всего RTP (Real-Time Protocol). Современные браузеры также не поддерживают RTSP напрямую. Это создает определенные сложности, но не делает задачу невыполнимой.

Рассмотрим несколько подходов к решению этой задачи, от простого к более комплексному.

Решение 1: Запись RTSP-потока в файл и последующее воспроизведение

Один из самых надежных и относительно простых способов заключается в использовании внешнего инструмента, такого как FFmpeg, для записи RTSP-потока в стандартный видеофайл (например, MP4) на сервере. После записи этот файл уже можно будет воспроизвести в 1С, например, через поле HTML-документа или даже с помощью внешнего компонента, если требуется более глубокая интеграция.

Преимущества этого подхода:

  1. Надежность: Мы обходим сложности с потоковым воспроизведением в реальном времени, работая с уже сформированным файлом.
  2. Простота реализации: FFmpeg — мощный и широко используемый инструмент с обширными возможностями.
  3. Совместимость: Полученные MP4-файлы легко воспроизводятся в большинстве браузеров и на различных устройствах.

Недостатки:

  1. Задержка: Мы получаем не живой поток, а запись с некоторой задержкой, равной времени записи файла. Это не подходит для видеонаблюдения в реальном времени.
  2. Нагрузка на сервер: Сервер должен иметь достаточные ресурсы для записи и хранения видеофайлов.

Как это реализовать в 1С:

Мы можем запустить FFmpeg как отдельный процесс на сервере 1С или на любом другом доступном сервере, используя метод ФайловаяСистема.ЗапуститьПрограмму() или аналогичные механизмы для выполнения внешних команд. Рассмотрим пример кода, который запускает запись двухминутного фрагмента RTSP-потока в MP4-файл:


// Предполагаем, что у нас есть структура с параметрами RTSP-потока
// ВыборкаЗапроса.ШаблонПотокаRtsp = "rtsp://[Логин]:[Пароль]@[АдресСервера]:554/камера/[ИдентификаторКамеры]"
// ВыборкаЗапроса.АдресСервера = "192.168.1.100"
// ВыборкаЗапроса.Логин = "user"
// ВыборкаЗапроса.Пароль = "password"
// ВыборкаЗапроса.ИдентификаторКамеры = "channel1"

// Формируем полный адрес RTSP-потока
АдресRTSP = ВыборкаЗапроса.ШаблонПотокаRtsp;
АдресRTSP = СтрЗаменить(АдресRTSP, "[АдресСервера]", ВыборкаЗапроса.АдресСервера);
АдресRTSP = СтрЗаменить(АдресRTSP, "[Логин]", ВыборкаЗапроса.Логин);
АдресRTSP = СтрЗаменить(АдресRTSP, "[Пароль]", ВыборкаЗапроса.Пароль);
АдресRTSP = СтрЗаменить(АдресRTSP, "[ИдентификаторКамеры]", ВыборкаЗапроса.ИдентификаторКамеры);

ДатаНачалаЗаписи = ТекущаяДатаСеанса();
// ТочкаМонтирования - путь к папке, куда будут сохраняться видеофайлы, например, "C:/VideoArchive"

// Формируем команду для FFmpeg
КомандаЗапуска = СтрШаблон("ffmpeg -t 00:02:00 -rtsp_transport tcp -i '%1' -acodec copy -vcodec copy -y %2/%3_%4.mp4",
    АдресRTSP,
    ТочкаМонтирования,
    ВыборкаЗапроса.ИдентификаторКамеры,
    Формат(ДатаНачалаЗаписи, "ДФ=yyyyMMddHHmmss"));

// Запускаем FFmpeg как внешний процесс
Результат = ФайловаяСистема.ЗапуститьПрограмму(КомандаЗапуска);

// После успешного выполнения команды, в папке ТочкаМонтирования
// будет создан файл вида channel1_20231027103000.mp4,
// который можно будет воспроизвести.

Мы видим, что в этой команде ffmpeg используется параметр -t 00:02:00 для ограничения времени записи двумя минутами, -rtsp_transport tcp для указания транспортного протокола, -i '%1' для входного RTSP-потока, а также -acodec copy -vcodec copy для прямого копирования аудио- и видеокодеков без перекодирования, что снижает нагрузку на процессор. -y позволяет перезаписывать существующий файл без запроса подтверждения.

После того как файл будет записан, мы можем отобразить его в Поле HTML-документа 1С, используя стандартный HTML5 тег <video>, указав путь к созданному MP4-файлу.

Решение 2: Использование Поля HTML-документа с JavaScript-плеерами и WebSocket/MSE

Начиная с платформы 1С:Предприятие 8.3.14, Поле HTML-документа на Windows использует движок WebKit (аналогичный используемому в Google Chrome), что значительно расширяет его возможности по работе с современными веб-технологиями: HTML5, CSS3 и JavaScript. Это открывает двери для более продвинутых решений.

Почему RTSP не работает напрямую в браузере?

Как мы уже упоминали, браузеры не имеют нативной поддержки для RTSP. Для воспроизведения потокового видео в браузере используются такие протоколы, как HLS (HTTP Live Streaming) или MPEG-DASH, а также технологии HTML5 Video с Media Source Extensions (MSE) и WebSocket.

Как JavaScript-плееры могут помочь?

Существуют JavaScript-библиотеки и плееры, которые могут принимать RTSP-поток, декодировать его (или перепаковывать) и воспроизводить через стандартный HTML5 <video> элемент. Для этого обычно требуется промежуточный сервер, который выполняет роль прокси:

  1. WebSocket-прокси: Сервер-прокси принимает RTSP-поток от камеры.
  2. Перепаковка потока: Прокси-сервер перепаковывает (не транскодирует!) видеоданные из RTP/RTSP в формат, который может быть обработан в браузере. Часто это делается путем мультиплексирования RTP H264 и AAC в фрагменты ISO BMFF (MP4).
  3. Передача через WebSocket: Перепакованные данные передаются клиенту в браузере через протокол WebSocket.
  4. Воспроизведение в браузере: JavaScript-плеер на стороне клиента (в Поле HTML-документа 1С) принимает эти данные через WebSocket, использует Media Source Extensions (MSE) для работы с динамически подгружаемым медиа-контентом и воспроизводит его через HTML5 тег <video>.

Пример такого решения:

Проект, упомянутый в обсуждении, Streamedian/html5_rtsp_player, является ярким примером такого подхода. Это HTML5-плеер, который работает поверх стандартного элемента <video> и использует серверный WebSocket-прокси для ретрансляции RTSP-потоков в браузер.

Реализация в 1С:

Для использования такого плеера в 1С нам потребуется:

  1. Развернуть WebSocket-прокси сервер (например, Node.js-приложение, Python-сервер или специализированное ПО) на отдельном сервере, доступном из клиентского приложения 1С.
  2. Создать HTML-файл с JavaScript-кодом плеера (например, Streamedian), который будет обращаться к нашему WebSocket-прокси.
  3. Загрузить этот HTML-файл в Поле HTML-документа в 1С. Мы можем загрузить его из локального файла или с веб-сервера.

Пример HTML-кода для Поля HTML-документа (упрощенный):


<!DOCTYPE html>
<html>
<head>
    <title>RTSP Player</title>
    <script src="path/to/streamedian.min.js"></script>
    <style>
        body { margin: 0; overflow: hidden; }
        #videoPlayer { width: 100%; height: 100%; object-fit: contain; background-color: black; }
    </style>
</head>
<body>
    <video id="videoPlayer" controls autoplay></video>

    <script>
        document.addEventListener('DOMContentLoaded', function() {
            var player = new Streamedian.Player('videoPlayer', {
                ws: 'ws://your-websocket-proxy-server:8080/ws', // Адрес вашего WebSocket-прокси
                url: 'rtsp://user:password@camera_ip/stream' // RTSP-адрес, который прокси будет транслировать
            });
        });
    </script>
</body>
</html>

Важные моменты и потенциальные сложности:

  1. Зависимость от форматов: Успех такого решения сильно зависит от того, какие кодеки используются в RTSP-потоке камеры и насколько хорошо их поддерживает JavaScript-плеер и браузерный движок.
  2. Производительность: Декодирование видеопотока в браузере может быть ресурсоемким процессом, особенно на слабых клиентских машинах или при воспроизведении видео высокого разрешения.
  3. Задержка: Несмотря на использование WebSocket, все равно может присутствовать некоторая задержка, хотя она будет значительно меньше, чем при записи в файл.
  4. Работа в тонком клиенте и RDP: В тонком клиенте 1С, несмотря на использование WebKit, могут возникать специфические проблемы. Отдельно стоит отметить, что воспроизведение видео в Поле HTML-документа может работать локально, но испытывать трудности на удаленных рабочих столах (RDP) из-за особенностей передачи мультимедийного контента через RDP. Это требует обязательного тестирования в вашей конкретной инфраструктуре.
  5. Безопасность: Убедитесь, что ваш WebSocket-прокси надежно защищен и не допускает несанкционированного доступа к видеопотокам.

Мы должны быть готовы к тому, что интеграция таких решений требует глубоких знаний в веб-разработке и сетевых протоколах, а также тщательного тестирования. Для проверки и отладки взаимодействия можно использовать инструмент для управления WebSocket-соединениями.

Решение 3: Серверное транскодирование RTSP в веб-дружественные форматы (HLS/DASH/WebRTC)

Этот подход является развитием идеи с промежуточным сервером. Вместо простой перепаковки, как в случае с Streamedian, мы можем полностью транскодировать RTSP-поток на сервере в один из форматов, изначально предназначенных для веб-потокового вещания. Эти форматы затем легко воспроизводятся любым HTML5-плеером.

HLS (HTTP Live Streaming) или MPEG-DASH

Эти протоколы разбивают видеопоток на небольшие сегменты и доставляют их по HTTP. Браузерный плеер динамически подгружает эти сегменты. Это наиболее распространенный способ потокового вещания в интернете.

Процесс работы:

  1. Сервер принимает RTSP-поток от камеры.
  2. Сервер использует такое ПО, как FFmpeg или специализированные медиа-серверы (например, Wowza Streaming Engine, Flussonic), чтобы транскодировать (перекодировать) RTSP в HLS или MPEG-DASH.
  3. Сервер создает плейлисты (.m3u8 для HLS, .mpd для DASH) и сегменты видео, которые доступны по HTTP.
  4. В Поле HTML-документа 1С мы встраиваем HTML5-плеер (например, video.js или DASH.js), который способен воспроизводить HLS/DASH-потоки по их URL.

Преимущества:

  1. Высокая совместимость: HLS и DASH широко поддерживаются браузерами и устройствами.
  2. Адаптивный битрейт: Эти протоколы позволяют автоматически подстраивать качество видео под скорость интернет-соединения пользователя.
  3. Минимальные требования к клиенту: Декодирование осуществляется на сервере, что снижает нагрузку на клиентский компьютер.

Недостатки:

  1. Задержка: Из-за буферизации и сегментации потока может возникать задержка в несколько секунд (обычно 5-30 секунд), что делает этот вариант менее подходящим для интерактивного видеонаблюдения.
  2. Высокая нагрузка на сервер: Транскодирование видео в реальном времени требует значительных вычислительных ресурсов сервера.

WebRTC (Web Real-Time Communication)

WebRTC — это технология, разработанная для передачи данных в реальном времени (видео, аудио, данные) непосредственно между браузерами (peer-to-peer) с минимальной задержкой. Это идеальное решение для систем видеонаблюдения, где важна скорость.

Процесс работы:

  1. Сервер принимает RTSP-поток.
  2. Специализированное ПО или медиа-сервер (например, Wowza Video, Red5 Pro, или open-source проекты вроде deepch/RTSPtoWebRTC) преобразует RTSP-поток в WebRTC-совместимый формат.
  3. Браузер (в Поле HTML-документа 1С) инициирует WebRTC-соединение с этим сервером, который выступает в роли посредника или шлюза.
  4. Видео и аудио передаются с минимальной задержкой.

Преимущества:

  1. Низкая задержка: Практически в реальном времени, что критично для интерактивного видеонаблюдения.
  2. Высокое качество: WebRTC оптимизирован для передачи качественного медиа-контента.

Недостатки:

  1. Сложность настройки: Внедрение WebRTC требует глубокого понимания технологии и сетевых настроек (STUN/TURN-серверы для обхода NAT).
  2. Требования к серверу: Сервер должен быть способен эффективно обрабатывать WebRTC-соединения и конвертировать потоки.

Общие рекомендации при работе с Полем HTML-документа в 1С

При использовании Поля HTML-документа в 1С, особенно в тонком клиенте, мы должны учитывать несколько важных аспектов:

  1. Версия платформы: Убедитесь, что используете достаточно свежую версию платформы 1С:Предприятие (минимум 8.3.14), чтобы гарантировать использование движка WebKit.
  2. Целевое назначение: Как правило, 1С:ИТС рекомендует использовать Поле HTML-документа для отображения статической информации, инструкций или встроенной справки. Использование его для сложной динамической логики, такой как потоковое видео, является выходом за рамки типичных сценариев и требует дополнительной отладки и тестирования.
  3. Внешние ресурсы: JavaScript-скрипты, расположенные во внешних файлах, обычно работают корректно. Однако, внешние ссылки на файлы стилей (CSS) могут работать нестабильно или не работать вовсе, поэтому рекомендуется встраивать CSS непосредственно в HTML-файл.
  4. Тестирование: Мы настоятельно рекомендуем тщательно тестировать выбранное решение во всех используемых режимах клиентского приложения (тонкий клиент, веб-клиент, толстый клиент) и на различных конфигурациях клиентских компьютеров, а также через удаленный рабочий стол (RDP), если это актуально.

Заключение

Воспроизведение потокового видео RTSP непосредственно в 1С 8.3 — это технически сложная задача, не имеющая простого "коробочного" решения. Прямой поддержки RTSP в 1С и современных браузерах нет. Однако, используя промежуточные серверы и современные веб-технологии, мы можем добиться желаемого результата.

Мы рассмотрели три основных подхода:

  1. Запись в файл с FFmpeg: Подходит, когда допустима задержка и нет необходимости в реальном времени. Просто в реализации.
  2. JavaScript-плееры с WebSocket/MSE (например, Streamedian): Позволяет получить близкий к реальному времени поток, но требует промежуточного WebSocket-прокси и тщательного тестирования из-за потенциальных проблем с производительностью и совместимостью в тонком клиенте 1С.
  3. Серверное транскодирование в HLS/DASH или WebRTC: Наиболее универсальные и масштабируемые решения. HLS/DASH хороши для широкого вещания (с задержкой), а WebRTC оптимален для видеонаблюдения с минимальной задержкой, но сложнее в настройке.

Мы рекомендуем начать с анализа ваших требований к задержке и ресурсам. Если необходим просмотр в реальном времени, то стоит обратить внимание на решения с WebSocket-плеерами или WebRTC. В любом случае, мы должны быть готовы к тому, что реализация потребует значительных усилий по настройке серверной части и отладке взаимодействия с Полем HTML-документа в 1С.

← На главную