A. Описание JSON-RPC API

A.1 Терминология

  • API - набор интерфейсов функций системы для использования во внешних приложениях.
  • Channel ID — уникальный идентификатор канала.
  • Stream source — URL-адрес видеопотока.
  • PID — уникальный идентификатор процесса.
  • Task ID — уникальный идентификатор записи, уникален для каждого файла.
  • Timestamp — метка UNIX-времени.

A.2 Описание

Интерфейс MicroPVR API используется для интеграции функции «Отложенный просмотр» (Архив) сервиса IPTV с системой Middleware. Вызовы функций API выполняются через протокол JSON-RPC 2.0 поверх протокола TCP (без поддержки передачи неименнованных аргументов в виде массива). По-умолчанию, MicroPVR API слушает на порту 4089.

add_task

Метод является устаревшим с версии 1.5.0, рекомендуется использовать create_new_task

Добавляет задачу на ежесуточную запись канала.

Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "add_task",
  "id": "some-id",
  "params": {
    "channel_id": 1,
    "duration": 86400,
    "lifetime": 259200,
    "gap_time": 2,
    "record_location": "/opt/storage/",
    "priority": 1,
    "repeat_period": 86400,
    "stream_source": "udp://@239.1.1.1:1234"
  }
}

Параметры:

Название Тип Описание Обязательный Ограничения
channel_id int Уникальный идентификатор канала Да Больше нуля
channel_name str Имя канала Нет  
duration int Длительность непрерывного файла архива, в секундах Да Не менее 120
lifetime int Время жизни файла после окончания записи, в секундах Да Не меньше 0
gap_time int Час, в который необходимо делать разрыв записи и начинать новый файл (по UTC) Да От 0 до 23
record_location str Полный путь до директории, в которой необходимо хранить записи Да  
priority int Приоритет выдачи из данной директории (при одновременной записи на разные носители); меньше значение - выше приоритет Да Не меньше 0
repeat_period int Через какой промежуток времени возобновлять запись канала, от начала старта предыдущей Да Должен быть равен длительности записи
stream_source str Multicast-адрес видеопотока Да  

Метод возвращает результат операции. Возможные варианты ответа:

  • ok - задача добавлена успешно
  • failed - ошибка при добавлении задачи, см. детальное описание в лог-файле

Первая запись будет начата немедленно, но все последующие будут начинаться согласно gap_time. Реальная длительность записи может отличаться от duration:

  • все записи начинаются на 80 секунд раньше, чем закончится предыдущая, для избежания разрыва вещания.
  • в случае ошибки записи задача будет перезапущена с сохранением времени окончания записи, причём в случае, если длительность записи меньше 80 секунд, то вместо этого сразу будет запущена следующая задача.

Задача не будет добалена, если уже существует другая задача с теми же channel_id и record_location.

create_new_task

Добавляет произвольную задачу на запись.

Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "сreate_new_task",
  "id": "some-id",
  "params": {
      "channel_id": 1,
      "start_timestamp": 1420115400,
      "duration": 2700,
      "lifetime": 259200,
      "record_location": "/opt/programs/",
      "priority": 1,
      "stream_source": "udp://@239.1.1.1:1234"
  }
}

Параметры:

Название Тип Описание Обязательный Ограничения
channel_id int Уникальный идентификатор канала Да Больше нуля
channel_name str Имя канала Нет  
duration int Длительность непрерывного файла архива, в секундах Да Не менее 120
lifetime int Время жизни файла после окончания записи, в секундах Да Не меньше 0
start_timestamp int Время начала записи, если не указано, по умолчанию время вызова метода плюс пять секунд Нет  
record_location str Полный путь до директории, в которой необходимо хранить записи Да  
priority int Приоритет выдачи из данной директории (при одновременной записи на разные носители); меньше значение - выше приоритет; если параметр не указан - устанавливается приоритет 50 Нет Не меньше 0
repeat_period int Через какой промежуток времени возобновлять запись канала, от начала старта предыдущей, если не указан, то задача будет непериодической Нет Должен быть больше или равен длительности записи
stream_source str Multicast-адрес видеопотока Да  
urgent int Начинает периодическую запись немедленно, для непериодических игнорируется Нет  

Задача будет запущена согласно start_timestamp. Если время запуска находится в прошлом или urgent равно true, то время окончания первой записи рассчитывается так, чтобы оно было минимально возможным из удовлетворяющих start_timestamp + repeat_period * k + duration, где k - целое число. Если расчётное время запуска этой первой задачи также находится в прошлом, то она будет запущена немедленно.

Реальная длительность записи может отличаться от duration: - все записи начинаются на 80 секунд раньше, чем закончится предыдущая, для избежания разрыва вещания (только если repeat_period равен duration и запись не была перезапущена из-за ошибки). - в случае ошибки записи задача будет перезапущена с сохранением времени окончания записи, причём в случае, если длительность записи меньше 80 секунд, то вместо этого сразу будет запущена следующая задача.

Задача не будет добалена, если уже существует другая задача с теми же channel_id и record_location.

Коды ошибок:

Код Описание
100 Отсутствует объект params
101 Один из обязательных аргументов отсутствет или несоответствует допустимым значениям
140 Период повтора меньше, чем длительность задачи
141 Время завершения записи находится в прошлом (для непериодическ задач)

add_urgent_task

Метод является устаревшим с версии 1.5.0, рекомендуется использовать create_new_task

Добавляет задачу на периодическую запись канала

Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "add_urgent_task",
  "id": "some-id",
  "params": {
      "channel_id": 1,
      "start_timestamp": 1420115400,
      "duration": 2700,
      "lifetime": 259200,
      "record_location": "/opt/programs/",
      "priority": 1,
      "stream_source": "udp://@239.1.1.1:1234"
  }
}

Параметры:

Название Тип Описание Обязательный Ограничения
channel_id int Уникальный идентификатор канала Да Больше нуля
channel_name str Имя канала Нет  
duration int Длительность непрерывного файла архива, в секундах Да Не менее 120
lifetime int Время жизни файла после окончания записи, в секундах Да Не меньше 0
record_location str Полный путь до директории, в которой необходимо хранить записи Да  
priority int Приоритет выдачи из данной директории (при одновременной записи на разные носители); меньше значение - выше приоритет Да Не меньше 0
repeat_period int Через какой промежуток времени возобновлять запись канала, от начала старта предыдущей Нет Должен быть равен длительности записи
stream_source str Multicast-адрес видеопотока Да  
start_timestamp int Время начала передачи, когда нужно начать запись, в UNIX Timestamp Да Время не должно быть в прошлом на момент вызова метода

Метод возвращает результат операции. Возможные варианты ответа:

  • ok - задача добавлена успешно
  • failed - ошибка при добавлении задачи, см. детальное описание в лог-файле

Реальная длительность записи может отличаться от duration:

  • все записи начинаются на 80 секунд раньше, чем закончится предыдущая, для избежания разрыва вещания.
  • в случае ошибки записи задача будет перезапущена с сохранением времени окончания записи, причём в случае, если длительность записи меньше 80 секунд, то вместо этого сразу будет запущена следующая задача.

Задача не будет добалена, если уже существует другая задача с теми же channel_id и record_location.

get_file_offset

Метод является устаревшим с версии 1.5.0, рекомендуется использовать get_file_and_offset Метод не соответствует стандарту JSON-RPC: в возвращаемом объекте присутствют другие поля кроме result.

Осуществляет поиск файла записи и позиции в файле по временной метке Timestamp и идентификатору канала.

Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "get_file_offset",
  "id": "some-id",
  "params": {
    "method": "get_file_offset",
    "channel_id": 1,
    "timestamp": 1420115400
  }
}

Параметры:

Название Тип Описание Обязательный Ограничения
channel_id int Уникальный идентификатор канала Да Больше нуля
timestamp int Временная метка в UNIX Timestamp Да  
aid str Идентификатор аккаунта Нет  

Поля возвращаемого объекта:

Название Тип Описание
result str Результат операции
offset str Байтовое смещение в файле по заданной временной метке, конвентированно в строку; в случае ошибки запроса равно -1
file str Полный путь до файла записи
timestamp int Временная метка найдённого смещения в UNIX Timestamp

Возможные варианты поля result:

  • ok - запрос выполнен успешно, позиция найдена.
  • failed - позиция не найдена или возникла ошибка при выполнении, см. детальное описание в лог-файле.

cancel_task

Останавливает или отменяет задачу на запись. Запрос на отмену игнорируется, если все параметры пусты или отсутствуют. Метод не удаляет файлы записи.

Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "cancel_task",
  "id": "some-id",
  "params": {
      "channel_id": 1,
      "record_location": "/opt/programs/"
  }
}

Параметры:

Название Тип Описание Обязательный Ограничения
channel_id int Уникальный идентификатор канала Да Больше нуля
record_location str Полный путь до директории, в которую производится запись Да  

Возвращаемое значение всегда равно «ok».

cancel_task_by_id

Останавливает или отменяет задачу на запись по её идентификатору. Метод не удаляет файлы записи.

Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "cancel_task_by_id",
  "id": "some-id",
  "params": {
      "task_id": 1,
  }
}

Параметры:

Название Тип Описание Обязательный Ограничения
task_id int Идентификатор задачи Да Больше нуля

Возвращаемое значение всегда равно «ok».

Коды ошибок:

Код Описание
100 отсутствует объект params
101 параметр task_id отсутствует или некорректен

get_file_and_offset

Останавливает или отменяет задачу на запись по её идентификатору. Метод не удаляет файлы записи.

Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "get_file_and_offset",
  "id": "some-id",
  "params": {
      "channel_id": 1,
      "timestamp": 1452124212,
  }
}

Параметры:

Название Тип Описание Обязательный Ограничения
channel_id int Уникальный идентификатор канала Да Больше нуля
timestamp int Временная метка в UNIX Timestamp Да  
aid str Идентификатор аккаунта Нет  

Возвращает объект со следующими полями:

Название Тип Описание
offset str Байтовое смещение в файле по заданной временной метке, конвентированно в строку; в случае ошибки запроса равно -1
file str Полный путь до файла записи
timestamp int Временная метка найдённого смещения в UNIX Timestamp

Коды ошибок:

Код Описание
100 Отсутствует объект params
101 Отсутствует один из обязательных аргументов
200 Смещение не найдено

get_tasks_list

Возвращает список всех задач.

Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "get_tasks_list",
  "id": "some-id",
  "params": {}
}

Метод не имеет параметров. Метод возвращает массив объектов со следующими полями:

Название Тип Описание
task-id int Идентификатор задачи
channel-id int Идентификатор канала
channel-name str Имя канала
stream-source str Источник записи
path str Полный путь до директории, в которую производится запись
start-time int Время фактического начала записи
stop-time int Время фактического окончания записи
expected-duration int Заданная длительность записи
repeat-period int Период записи
lifetime int Разность между временем начала записи и временем её удаления, не учитывает блокировку активных записей
status int Статус задачи
number-of-records int Количество сегментов, всегда равно 1

get_config

Запрашивает конфигурацию.

Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "get_task",
  "id": "some-id",
  "params": {}
}

Метод не имеет параметров. Метод возвращает конфигурацию MicroPVR в виде JSON-объекта.

Коды ошибок:

Код Описание
201 Общая ошибка чтения конфигурации

set_config

Применяет конфигурацию.

Параметры:

Название Тип Описание Обязательный Ограничения
config obj Конфигурация в виде JSON-объекта Да  

Возвращаемое значение всегда равно «ok».

Коды ошибок:

Код Описание
100 Отсутствует объект params
101 Пропущен параметр config
220 Ошибка резервного копирования файла конфигурации
221 Ошибка записи конфигурации
222 Ошибка применения новой конфигурации, предыдущая восстановлена из резервной копии
223 Ошибка применения новой конфигурации и восстановления предыдущей из резервной копии

get_records

Возвращает список всех файлов записей.

Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "get_records_list",
  "id": "some-id",
  "params": {
      "channel_id": 1
  }
}
Название Тип Описание Обязательный Ограничения
channel_id int Уникальный идентификатор канала Да  

Метод возвращает массив объектов со следующими полями:

Название Тип Описание
id int Идентификатор задачи (записи)
channel-id int Идентификатор канала
channel-name str Имя канала
record-name str Имя файла
start-time int Время фактического начала записи
stop-time int Время фактического окончания записи

get_playlist_name

C версии 1.8.0

Запрос плейлиста

Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "add_task",
  "id": "some-id",
  "params": {
    "channel_id": 1,
    "start_timestamp": 1494511200,
    "end_timestamp": 1494514800,
    "playlist_type": "HLS4"
  }
}

Параметры:

Название Тип Описание Обязательный Ограничения
channel_id int Уникальный идентификатор канала Да Больше нуля
start_timestamp int Время начала первого сегмента Да Больше нуля
end_timestamp int Максимальное время начала последнего сегмента в плейлисте Да Больше start_timestamp
playlist_type str Тип плейлиста Нет Только допустимые знчения
aid str Идентификатор аккаунта Нет  

При запросе может быть возвращён уже существующий плейлист с тем же start_timestamp, channel_id и playlist_type, но с большим end_timestamp. На данный момент все сегменты в возвращаемом плейлисте относятся к одной записи.

Допустимые значения playlist_type:

  • HLS4 - HLS-плейлист на основе байтового диапазона (byte range);
  • RMPD - MPEG-DASH-плейлист на основе байтового диапазона (byte range), функция явлется эксперементальной и рекомендуется к использовнию только для тестирования.
Код Описание
100 Отсутствует объект params
101 Один из параметров неверен
200 Не найдена запись, удовлетворяющая запросу

is_alive

Запрашивает данные о доступности и загруженности видеосервера. Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "is_alive",
  "id": "some-id",
  "params": {}
}

Метод не имеет параметров. Метод возвращает объект со следующими полями:

Название Тип Описание
is_alive bool true, если значение score не превышает максимальное
score float Оценка загруженности сервера
session_count int Примерное количество активных сессий

get_request_counter

C версии 1.9.0

Возвращает статистику запросов. Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "get_request_counter",
  "id": "some-id",
  "params": {}
}

Метод не имеет параметров. Метод возвращает объект со следующими полями:

Название Тип Описание
overall int Общее количество запросов
near_end int Количество запросов не далее, чем 180 секунд от реального вермени
successful int Количество успешных запросов

Метод возвращает статистику за последние N секунд, где N задаётся параметром конфигурации monitor-request-lifetime.

get_channel_list

C версии 1.9.0

Возвращает список записываемых каналов и статистику уникальных запросов. Пример запроса:

{
  "jsonrpc": "2.0",
  "method": "get_channel_list",
  "id": "some-id",
  "params": {}
}

Метод не имеет параметров. Метод возвращает список объектов со следующими полями:

Название Тип Описание
channel_id int Идентификатор канала
channel_names list Список имён каналов
channel_sources list Список источников
channel_counter int Количество клиентов, выполнявших запрос контента для данного канала

Метод возвращает статистику за последние N секунд, где N задаётся параметром конфигурации monitor-request-lifetime. В channel_counter не учитываются запросы с пустым полем aid.