API для WebRTC: получение видеопотока и записи
Сейчас для работы с видео в браузерах Xeoma использует технологию WebRTC, которая выдаёт более стабильную картинку и позволяет уменьшить нагрузку на сервер. Однако это не все преимущества WebRTC – эта технология также открывает новые горизонты в области интеграции. В частности, с помощью WebRTC видео, полученное из Xeoma, можно добавить на сайт или в какое-либо стороннее приложение. В этой статье мы подробно рассмотрим, как именно можно проделать такую интеграцию. Обратите внимание, что структура запросов и ответов на них во многом схожа с нашим JSON API. Все нижеперечисленные команды представляют собой GET-запросы. Для корректной работы WebRTC API у сервера Xeoma должно быть стабильное соединение со STUN сервером (подробнее см. пункт 9).
Этот API поделён на две основные части: просмотр онлайн и просмотр архива.
Все команды начинаются с http://IP:10090/
— где IP это IP-адрес сервера. Оставшаяся часть каждой команды описана ниже.
Эта возможность доступна в PRO-редакции программы. Попробовать WebRTC API в тестовом режиме вы можете с помощью Пробной версии. |
Просмотр онлайн
?get_available_webrtc_streams=
Эта команда запрашивает актуальный список камер сервера с параметрами, которые нам понадобятся для получения видео. Ответ будет такого вида:
{
"192.168.0.77 Cam_2": "?sourcewebrtc=687474703A2F2F6C6F63616C686F73743A31303039302F766964656F322E6D6A70673F757365723D&webServerId=WebconnectorTransmitter.2"
}
Ключевая информация из этого ответа – значения параметров sourcewebrtc и webServerId, а IP-адрес и имя камеры здесь указываются, чтобы понять, к какой именно камере относятся параметры.?sourcewebrtc=687474703A2F2F6C6F63616C686F73743A31303039302F766964656F322E6D6A70673F757365723D&webServerId=WebconnectorTransmitter.2&example=
Эта команда запрашивает поток от нужной камеры (по значению параметра sourcewebrtc) через нужный модуль Веб Сервер (по значению параметра webServerId) по WebRTC API. В браузере по этой команде откроется пустая страница с видео с этой камеры в реальном времени.- Чтобы внешнее приложение (или сайт) смогло получить доступ к такому потоку, ему сначала нужно соединиться с Xeoma, этим занимается скрипт webrtc_view_common.js (находится в папке XeomaWeb в основной директории). В нём есть метод connectWithWebrtcServer – его необходимо вызвать при загрузке нужной страницы. Этот же скрипт выполнит всю остальную работу по получению потока сам.
- Ещё один скрипт, который понадобится при загрузке страницы – webrtc_adapter_min.js, он находится в той же директории.
- Полученный поток должен быть прикреплён к тэгу <video>. Один из методов скрипта webrtc_view_common.js (а именно onRemoteTrack) занимается таким прикреплением. В итоге нужный HTML-файл должен содержать такие строчки:
<video id="remote-video" autoplay></video>
<audio id="remote-audio" autoplay></audio>
Просмотр архива
?archive_list=
Эта команда запрашивает актуальный список архивов указанного сервера. Ответ будет такого вида:
Preview+Archive.12
Preview+Archive.18
Preview+Archive.7
Preview+Archive.21
Preview+Archive.24?archive_date_list=&archive=NameArchive
NameArchive – имя нужного архива.
Эта команда запрашивает список дат, за которые в указанном архиве есть какие-то записи. Важно: имя Preview+Archive.12 здесь превратится Preview%2BArchive.12. Ответ будет такого вида (даты в формате гггг-мм-дд):
2020-08-22
2020-08-23
2020-08-24
2020-08-25
2020-08-31?archive_minutes=&archive_date=2020-08-24&archive=NameArchive
2020-08-24 – нужная дата.
Эта команда запрашивает список минут, за которые есть какие-либо записи в нужный день. Часовой пояс для него берётся по серверу. Ответ будет такого вида (время в формате чч:мм:сс):
16:39:14
16:40:14
16:41:14
16:42:13
16:43:13
16:44:13
…?start_webrtc_archive=&archive=NameArchive&peer_id=123&archive_date=2020-08-24&archive_minute=16:40:00&archive_millis=1400
123 – уникальный идентификатор, полученный от сервера WebRTC (см. пункт 9).
16:40:00 – нужная минута.
14000 – номер миллисекунды от начала этой минуты.
Эта команда запускает трансляцию нужного фрагмента архива, начиная с заданной миллисекунды. Важно: параметр archive_millis не может превышать значение 60000, его необходимо сбрасывать при каждом переходе между минутами.?stop_webrtc_archive=&archive=NameArchive&peer_id=123
Эта команда останавливает ранее запущенную трансляцию.?get_last_archive_time=&archive=NameArchive&peer_id=123
Эта команда запрашивает номер миллисекунды, которая проигрывается в данный момент для нудного архива. Это полезно для синхронизации (например, со шкалой времени на странице проигрывания архива). Ответ будет такого вида:
{
"EOF":false,
"millisFromMinuteStart":15018,
"time":"16:40"
}- Перед тем, как получить доступ просмотру архива, страница должна загрузить следующие скрипты:
webrtc_view_common.js
webrtc_adapter_min.js - Чтобы подключиться к серверу WebRTC, клиент должен вызвать методы getRequestUrl и onConnect из скрипта webrtc_view_common.js. Пример соответствующего кода:
$.ajax({
url: getRequestUrl("connect"),
success: onConnect,
error: function(xhr, status, error) { onError("Connect failed: " + error); }
}); - Метод onConnect задаёт значение параметру webrtcid, это значение нужно присваивать параметру peer_id (см. пункты 4-6). Это значение для WebRTC API выдаёт STUN сервер, по умолчанию используется stun.l.google.com:19302. Этот адрес можно сменить на другой (в том числе на собственный STUN сервер) в скрипте webrtc_view_common.js (строка 2).
- Полученный поток должен быть прикреплён к тэгу <video>. Один из методов скрипта webrtc_view_common.js (а именно onRemoteTrack) занимается таким прикреплением. В итоге нужный HTML-файл должен содержать такие строчки:
<video id="remote-video" autoplay></video>
<audio id="remote-audio" autoplay></audio>
15 сентября 2020
Читайте также:
API для интеграции с Xeoma
Модуль Отправка HTTP команд в Xeoma