Документация на Flussonic Media Server

  1. Быстрый старт
  2. How To
  3. Потоковое вещание
    1. Публикация
    2. Прием мультикаста
    3. Варианты источников
    4. Переключение источников
    5. Плейлисты
    6. Наложение логотипа
    7. Миксер
    8. WebRTC публикация
    9. SDI
    10. Отправка на другие сервера
    11. Распознавание DVB субтитров
  4. Транскодер
    1. Логотип
    2. Hardware
    3. Скриншоты
    4. Мозаика
  5. DRM
    1. Simple CAS
    2. Conax DRM
    3. BuyDRM (KeyOS)
  6. Авторизация
    1. Конструктор бэкендов
    2. Сервис сбора статистики
    3. Domain lock
    4. Middleware
    5. Secure links
    6. Ограничение сессий
    7. Мультиавторизация
    8. Бан IP адресов
    9. DVR
    10. Aliaser
  7. API
    1. HTTP API
    2. Events API
    3. MySQL API
    4. SQL API для кластеров
    5. SNMP
  8. Кластер
    1. Ретрансляция
    2. Кластерный захват
    3. Балансировщик нагрузки
    4. Пиринг
    5. Организация CDN
  9. VOD
    1. Кэш
    2. Облако
    3. Транскодирование файлов
  10. DVR
    1. Настройка
    2. Timeshift
    3. Catchup
    4. Проигрывание
    5. Экспорт в MP4
    6. Доступ по протоколам
    7. Timelapse
    8. API
    9. Кластеризация DVR
    10. Репликация
    11. Облако
  11. Воспроизведение
    1. HLS
    2. embed.html
    3. HTML5 с низкой задержкой
    4. Плеер HTML5 с низкой задержкой
    5. MPEG-TS
    6. RTMP
    7. DASH
    8. HDS
    9. RTSP
    10. multicast, CBR UDP
    11. WebRTC проигрывание
    12. H.265
  12. Администрирование
    1. Установка
    2. Обновление

    3. Конфигурация
    4. Мониторинг
    5. Производительность
    6. Лицензия
    7. LUA скрипты
    8. Безопасность
    9. Let's Encrypt
    10. Миграция
  13. IPTV
    1. Захват спутникового видео
    2. Транскодирование
    3. Middleware в IPTV OTT
    4. Экспорт EPG со спутника
    5. Группы каналов

DVR API

Обзор API для работы с DVR Anchor Anchor x2

Flussonic предоставляет HTTP API для работы с DVR, который позволяет получать данные о потоке и настраивать запись архива. Часть команд доступна только администратору, а другая часть также и пользователям (с защитой с помощью токенов).

Администратор может изменить настройки архива или сохранить его в виде файла на диск. Пользователи могут запрашивать информацию о потоке и т.п.

Ниже список команд HTTP API.

Действия, доступные только администратору

Информация, которую могут запросить пользователи

Настройка DVR для потока Anchor Anchor x2

Для настройки DVR необходимо указать логин и пароль администратора и передать текстовую строку с настройками, которая будет записана в конфигурационный файл Flussonic:

curl -u flussonic:pass --data 'stream ort { dvr /storage 2d; }' http://192.168.2.3:8080/flussonic/api/modify_config

Cоздать и настроить DVR архив можно также и через SQL API.

Чтобы изменить настройки, используйте такую же команду, как и при их создании:

curl -u flussonic:pass --data 'stream ort { dvr_offline /storage 20d; }' http://192.168.2.3:8080/flussonic/api/modify_config

Остановка записи в архив Anchor Anchor x2

curl -u flussonic:pass --data '' http://192.168.2.3:8080/flussonic/api/dvr_disable/ort

Эта команда остановит DVR на транслируемом потоке ort. Но если поток будет перезапущен, то запись архива возобновится.

Начало записи в архив Anchor Anchor x2

curl -u flussonic:pass --data '' http://192.168.2.3:8080/flussonic/api/dvr_enable/ort

По этой команде начнется запись в архив работающего потока ort. Если поток был настроен как dvr_offline или ранее была выполнена команда dvr_disable, этот вызов начнет запись такго потока в архив. Но при перезапуске потока его статус снова станет такой, как указано в настройке DVR.

DVR Lock Anchor Anchor x2

Вы можете заблокировать запись, чтобы защитить ее от автоматического удаления из архива. Это может быть полезно для организации услуги nPVR или просто сохранения важных данных.

curl -u flussonic:letmein! --data '{"stream":"ort","from":1483971680,"duration":1000}' http://192.168.2.3:8080/flussonic/api/dvr/lock

Где:

  • 1483971680 — время начала в Unix timestamp;
  • 1000 — продолжительность в секундах.

Вы можете получить список защищенных записей из API по ссылке:

curl http://192.168.2.3:8080/ort/recording_status.json?from=1483970680\&to=now\&request=ranges,locks
[{"stream":"ort","ranges":[{"duration":3687,"from":1483970675},{"duration":56758,"from":1483974376},{"duration":332,"from":1484031143}],"locks":[{"duration":1004,"from":1483971680}]}]

DVR Unlock Anchor Anchor x2

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

curl -u flussonic:letmein! --data '{"stream":"ort","from":1483971680,"duration":1000}' http://192.168.2.3:8080/flussonic/api/dvr/unlock

Где:

  • 1483971680 — время начала в Unix timestamp;
  • 1000 — продолжительность в секундах.

Сохранение архива в MP4 Anchor Anchor x2

Администратор может экспортировать части архива в MP4 файлы и сохранять их на локальном диске на сервере, не передавая по сети.

curl -u flussonic:letmein! --data '' http://192.168.2.3:8080/ort/save-mp4-1350274200-4200?file=/storage/recording1.mp4

Где:

  • 1483971680 — время начала в Unix timestamp;
  • 1000 — продолжительность в секундах.

Указанная часть архива будет сохранена в файл /storage/recording1.mp4

Будьте осторожны при указании имени файла, чтобы не затереть существующие файлы.

Можно сохранять и метаданные в MP4 файл:

curl -u flussonic:letmein! --data 'some opaque value' http://192.168.2.3:8080/ort/save-mp4-1350274200-4200?file=/storage/recording1.mp4&meta=true

Метаданные будут записаны в атом udta.meta.ilst.data.

Общее время записи Anchor Anchor x2

Flussonic может дать ответ на вопрос, сколько всего было интервалов с наличием записи, где начало и окончание записи в каждом из них:
$ curl http://192.168.2.3:8080/ort/recording_status.json
{"ort":{"from":1525186456,"to":1526910900}}

Время Flussonic отдает в UTC timestamp.

Отчет о периодах записи Anchor Anchor x2

Flussonic можно спросить о том, какие были периоды с наличием записи, начиная с указанного времени:

curl -v 'http://192.168.2.3:8080/ort/recording_status.json?from=1525186456'
...
< HTTP/1.1 200 OK
...
< Server: Flussonic
< X-Route-Time: 83
< X-Run-Time: 3391
< Content-Type: application/json

[{"stream":"ort","warning":"too_big_range","ranges":[{"duration":28800,"from":1525183200},{"duration":7200,"from":1525219200},{"duration":3600,"from":1525233600},{"duration":10800,"from":1525240800},{"duration":43200,"from":1525255200},{"duration":7200,"from":1525309200},{"duration":39600,"from":1525323600},{"duration":7200,"from":1525377600},{"duration":3600,"from":1525392000},{"duration":3600,"from":1525402800}

Обычно, когда вы запрашиваете данные за несколько дней, вам не интересны точные данные о периодах, потому что их всё равно будет сложно использовать. Поэтому Flussonic выдал сокращенный ответ и предупреждение "warning":"too_big_range" о том, что интервал с записью очень длинный - более 4 дней. В сокращенном ответе Flussonic отдает неточные данные об интервалах, получение которых не требует больших затрат.

Если вам необходимы подробные данные за большой период времени, добавьте опцию force_detailed.

curl -v 'http://192.168.2.3:8080/ort/recording_status.json?from=1525186456&request=ranges,force_detailed'
...
< HTTP/1.1 200 OK
...
< Server: Flussonic
< X-Route-Time: 83
< X-Run-Time: 174210
< Content-Type: application/json

[{"stream":"ort","ranges":[{"duration":24179,"from":1525186456},{"duration":4788,"from":1525221374},{"duration":0,"from":1525236971},{"duration":131,"from":1525244207},{"duration":2018,"from":1525244378},{"duration":656,"from":1525246742},{"duration":0,"from":1525249845},{"duration":1169,"from":1525249848},{"duration":27216,"from":1525257917},{"duration":10177,"from":1525285203},{"duration":0,"from":1525296286},{"duration":151,"from":1525311266},{"duration":314,"from":1525311872},{"duration":2359,"from":1525312194},{"duration":7,"from":1525325359},{"duration":0,"from":1525328402},{"duration":533,"from":1525328405},{"duration":
...

Предупреждения о большом интервале больше нет, но запрос выполнялся в 50 раз дольше.

Почему могут быть не нужны точные данные за долгий период:

При отрисовке timeline на экране шириной 1920 пикселей, если хотим поместить одну неделю записи на всю ширину, то 1 пиксель будет соответствовать 5 минутам. На час записи придется 10-11 пикселей. Поэтому совсем необязательно делать дорогостоящий запрос к серверу, хватит и точности до часа-получаса.

Запросим более короткий период времени (меньше, чем 4 дня):

curl -v 'http://192.168.2.3:8080/ort/recording_status.json?from=1525186456&to=1525272856&request=ranges'
...
< HTTP/1.1 200 OK
...
< Server: Flussonic
< X-Route-Time: 83
< X-Run-Time: 20723
< Content-Type: application/json

[{"stream":"ort","ranges":[{"duration":24179,"from":1525186456},{"duration":4788,"from":1525221374},{"duration":0,"from":1525236971},{"duration":131,"from":1525244207},{"duration":2018,"from":1525244378},{"duration":656,"from":1525246742},{"duration":0,"from":1525249845},{"duration":1169,"from":1525249848},{"duration":14941,"from":1525257917}]}]

Такой запрос выполняется дольше, чем при кратком ответе, но быстрее, чем при запросе точных данных.

Значения параметра request

Перечислим значения, которые принимает request:

  • ranges — список непрерывно записанных периодов в DVR архиве. Этот список может меняться, если в текущий момент Flussonic производит репликацию архива с сервера-источника.
  • brief_thumbnails — список скриншотов, сохраненных в архиве, в виде UTC времени каждого. Мы не рекомендуем получать JPEG-скриншоты по UTC, потому что мы сделали доступ по приблизительному GMT - об этом ниже на этой странице.
  • force_detailed — принудительно формирует ответ с точными данными о периодах, даже если запрошен долгий период времени более 4 дней.
  • hour_bitmap — формирует ответ в виде строки, содержащей карту записи по часам. Это самый компактный способ представления данных из архива. Не работает вместе с ranges.
  • locks — запрашивает список заблокированных записей в архиве.
  • motion_log — запрашивает данные о событиях, полученных от датчика движения.

Значения можно перечислить через запятую, например, request=ranges,hour_bitmap.

Данные от датчиков движения Anchor Anchor x2

При приеме событий о движении с камеры Flussonic сохраняет время начала и окончания событий движения.

Чтобы запросить, когда движение началось и сколько продолжалось, добавьте к recording_status.json параметр request=motion_log. В параметрах from и to задайте границы интересующего вас периода времени, в UTC.

curl http://192.168.2.3:8080/cam_office/recording_status.json?from=1528144663&to=1528148263&request=motion_log

[{"stream":"cam10","motion_log":[{"data":{"duration":42,"start":1528145203},"subtype":"range","type":"motion"}]}]

Получение JPEG скриншотов по времени GMT Anchor Anchor x2

Когда вы включили скриншоты для DVR или по URL, Flussonic начинает создавать и писать скриншоты на диск, а вы можете получать эти скриншоты по специальным URL. Эти URL содержат GMT время того момента, в который был получен скриншот.

Flussonic позволяет находить JPEG-скриншоты по приблизительному времени. Например, вы можете знать из датчика движения, что в районе определенного времени записаны события или вы можете знать необходимое время посмотрев его в плеере.

Узнавать точное время скриншотов не экономично, т.к. нужно получать список скриншотов с UTC временем и конвертировать в GMT. Flussonic приходит на помощь - он умеет находить ближайшее GMT время к указанному вами, когда был снят скриншот.

В DVR HTTP API, Flussonic исправляет время на точное, если вы указали не очень точное в своем запросе. Он возвратит часть URL для получения реального скриншота.

Например, запросим скриншот по такому времени: 2018/05/02/06/59/38. Именно в этот момент скриншота нет, но есть рядом. Flussonic возвращает Location с правильным временем 2018/05/02/07/00/40, которое мы используем далее для доступа к JPEG файлу:

curl -v 'http://192.168.2.3:8080/ort/2018/05/02/06/59/38.jpg'
...
< HTTP/1.1 302 Found
< Location: /ort/2018/05/02/07/00/40.jpg

curl -v 'http://192.168.2.3:8080/ort/2018/05/02/07/00/40.jpg'
...
< HTTP/1.1 200 OK
...
< Content-Length: 5738
< Content-Type: image/jpeg
< Last-Modified: Wed, 02-May-2018 07:00:40 GMT
< X-Thumbnail-Utc: 1525244440
...далее идёт jpeg...

Генерация JPEG скриншотов по запросу Anchor Anchor x2

Flussonic может создавать JPEG-скриншоты на лету. При этом экономятся ресурсы диска. Нагрузка на процессор будет ощутимая, поэтому защищайте сервер с помощью авторизации доступа. А лучше используйте видео-скриншоты, если нет необходимости именно в JPEG.

curl -v 'http://192.168.2.3:8080/ort/2018/05/02/07/00/40-preview.jpg'
...
< HTTP/1.1 200 OK
...
< Content-Length: 5738
< Content-Type: image/jpeg
< Last-Modified: Wed, 02-May-2018 07:00:40 GMT
< X-Thumbnail-Utc: 1525244440
...here goes jpeg...

Получение MP4 видео-скриншотов Anchor Anchor x2

Мы рекомендуем использовать видео-скриншоты вместо JPEG-скриншотов. Видео-скриншоты архива получают почти так же, как JPEG скриншоты. Flussonic исправляет URL, если по запрошенному URL нет подходящего кадра для создания скриншота.

curl -v 'http://192.168.2.3:8080/ort/2018/05/02/06/59/38-preview.mp4'
...
< HTTP/1.1 302 Found
< Location: /ort/2018/05/02/07/00/40-preview.mp4

curl -v 'http://192.168.2.3:8080/ort/2018/05/02/07/00/40-preview.mp4'
...
< HTTP/1.1 200 OK
...
< Content-Length: 8756
< Content-Type: vide/mp4
< Last-Modified: Wed, 02-May-2018 07:00:40 GMT
< X-Thumbnail-Utc: 1525244440
...here goes jpeg...

Flussonic вернет MP4, состоящий из одного кадра.

Экспорт части архива в MP4 Anchor Anchor x2

Пример запроса к Flussonic на получение части архива длиной в 1 час в MP4 файле по сети:

curl -v http://192.168.2.3:8080/ort/archive-1525186456-3600.mp4
...
< HTTP/1.1 200 OK
< Content-Type: video/mp4
< X-Session: a666873ba918d02f81f9b39e336906d85bdbac20
< Content-Disposition: attachment; filename=ort_1525186456_3600.mp4
..
< X-Prepare-Percent: 70
< X-Prepare-Percent: 80
< Content-Length: 81773187
< X-Prepare-Time: 27487

...here goes big mp4...