5.7.2. TaskStatistics

Описание

Статистические данные задачи и ссылки на скачивание эскизов за указанный период времени. Аналогичный метод используется в интерфейсе Boro (страница задачи) для построения графиков данных и последовательности эскизов на временной шкале.

Для позиционирования по хронологической последовательности данных используется время с момента старта задачи. Т.е. при запуске задачи время равно нулю и далее оно растет по мере анализа. Такой подход позволяет сделать единообразной статистику Live задач и Offline задач (VoD, file), когда анализ производится быстрее или медленнее реального времени. Актуальное время - это момент времени, по состоянию на который были собраны последние статистические данные.

Схема получения данных для разных команд позиционирования position_type:

Данные за одну секунду

Зонд собирает статистические данные на интервале в одну секунду и передает их на сервер. Последние 300 секунд полученных данных являются «горячими» и хранятся в оперативной памяти сервера, что позволяет существенно ускорить загрузку инициализационных данных. 5-минутные записи устаревших данных перемещаются в БД. Доступ к данным из БД может быть существенно медленнее, чем доступ к горячим данным. Из-за упомянутых особенностей хранения данных в БД, в ответе от сервера может быть выдана статистика за больший интервал времени, чем было запрошено.

Масштабирование данных

В разработке: Кроме секундных интервалов, зонд осуществляет обработку данных на интервалах в 10, 100 и 1000 секунд.

Запрос

Важно

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

Примечание

В ответ на один запрос могут быть получены данные не более чем за 3000 с.

{
  "user_id":(number),
  "methods":[
    {
      "method":"TaskStatistics",
      "params":{
        "project_id":(number),
        "task_id":(number),
        "position_type": (string),
        "time": (number),
        "duration": (number),
        "metrics": [(string)]
      }
    }
  ]
}
  • user_id - целое число, идентификатор пользователя;

  • project_id - целое число, идентификатор проекта пользователя;

  • task_id - целое число, идентификатор задачи;

  • position_type - строка, команда позиционирования по хронологической последовательности данных:
    init - получить инициализационные данные за последние 300 секунд (если не указан иной период в поле duration). Может применяться для быстрой визуализации текущего состояния параметров после обновления страницы;
    updated_since - получить все данные после указанного времени time. Возвращает все данные до актуального времени задачи без учета duration, но не более 3000 с. Может применяться для периодического обновления графиков, которые были построены на основе данных, полученных командой init;
    around - получить данные до и после указанного времени time (в сумме 300 с, если не указан иной период в поле duration). Может применяться, когда необходимо поместить интересующее событие в середину графика. В интерфейсе Boro таким методом реализован клик по событию в журнале на странице задачи, который позиционирует выбранное событие в середину графика;
    after - получить данные после указанного времени time (300 с, если не указан иной период в поле duration). Может применяться для последовательного отображения истории;
    before - получить данные до указанного времени time (300 с, если не указан иной период в поле duration). Может применяться для последовательного отображения истории.
  • time (опциональное поле) - целое число, время в секундах от момента старта задачи. Используется в нескольких типах позиционирования position_type для указания точки отсчета. В ответе на запрос возвращается максимальное время, которое есть в статистике для запрошенного интервала. Команда init позволяет получить актуальное время задачи.

  • duration (опциональное поле) - целое число, интервал запрашиваемых данных в секундах. Ограничивается периодом в 3000 с. Используется для всех типов позиционирования position_type кроме updated_since для указания периода запрашиваемых данных относительно точки отсчета.

  • metrics (опциональное поле) - массив строк, выбор необходимых метрик. Если в запросе не указана ни одна метрика, в ответе вернутся данные по всем метрикам. Подробное описание метрик можно найти в документации к сервису Elecard Boro:
    EPSNR - Estimated Peak Signal to Noise Ratio, измеряется в децибелах (dB) для каждого видеопотока;
    Bitrate - битрейт (бит/с) каждого PID, обнаруженного в потоке;
    DownloadRate - Скорость скачивания или Скорость потока, в зависимости от типа анализируемого источника. Измеряется в бит/с;
    IAT_MDI - объединяет три метрики, связанные с передачей IPTV потоков по сети: Maximum Inter-packet Arrival Time (maxIAT) - максимальное время между приходящими пакетами, в мс; Media Lose Rate (MLR) - количество потерянных транспортных пакетов; Delay factor (DF) - время в мс, которое показывает сколько данных должен держать клиент в буфере для плавного проигрывания контента;
    AudioLoudness - объединяет две метрики, связанные с измерением громкости по стандарту EBU R 128-2011: Мгновенная громкость (Momentary Loudness) и Кратковременная громкость (Short-Term Loudness) в LUFS;
    VideoDecodability - оценка возможности декодирования на основе подсчета кадров;
    Thumb - ссылки на эскизы для каждого видеопотока;
    CC - количество ошибок Continuity Counter в транспортном потоке за одну секунду (согласно ETSI TR 101 290 p1.4);
    ClockDiscontinuity - неравномерность временных меток PTS/DTS, количество ошибок за секунду.

Ответ

Примечание

Из-за особенности хранения статистики в БД (5-минутными записями), в ответе от сервера может быть выдана статистика за больший интервал времени, чем было запрошено. Это означает, что в ответе будет возвращено такое количество 5-минутных записей из БД, которое необходимо для покрытия запрошенного интервала. При необходимости проводится дополнительная фильтрация статистики на клиентской стороне.

Особенности и исключения

Метод возвращает данные по каждой метрике в виде таблицы, заключенной в JSON. Структура данных по метрикам EPSNR и Bitrate устроена таким образом, что пропуск значения по некоторым PID недопустим; сервер использует null для заполнения, если зонд по тем или иным причинам не отправил данные по определенному PID.

Если за запрашиваемый интервал времени данные по метрике отсутствуют (опция мониторинга отключена) или ошибки не были зарегистрированы (например, CC ошибки), то ответ не будет содержать соответствующих полей. В ответе всегда присутствует метрика DownloadRate, даже если задача находится в состоянии Ошибка источника (нет сигнала).

Когда задача переходит в состояние Ошибка источника (нет сигнала):
  • В метрике Bitrate единожды отправляется значение null по всем PID и далее, пока состояние ошибки активно, данные будут отсутствовать. Когда зонд получит первые корректные данные на входе, в метрике появится статистика;

  • В метрике IAT_MDI для maxIAT, MLR и DF будет постоянное значение null, пока состояние ошибки активно;

  • В метрике DownloadRate будет возвращаться нулевое значение скорости.

{
  "reply":[
    {
      "method":"TaskStatistics",
      "result":{
        "head":{
          "time":(number),
          "data_version":2
        },
        "EPSNR":{
          "cols":["time","PID1","PID2", ... , "PIDn"],
          "data":[
            [1021523.8250531789,50.890653318618305,50.69966307076358, ..., 49.81497413611472],
              ...
          ]
        },
        "Bitrate":{
          "cols":["time","PID1","PID2", ... , "PIDn","tei"],
          "data":[
            [1021523.8249982789,15280,12224,... ,25977,565651],
              ...
          ]
        },
        "DownloadRate":{
          "cols":["time","rate, bps"],
          "data":[
            [1021524.6812821408,10779843],
              ...
          ]
        },
        "IAT_MDI":{
          "cols":["time","maxIAT","MLR","DF"],
          "data":[
            [1021524.4743567407,71.849,0,72.03139948869963],
              ...
          ]
        },
        "AudioLoudness":{
          "cols":["time","PID","momLoudness","stLoudness"],
          "data":[
            [1021523.825054879,1022,-24.895469665527344,-22.834897994995117],
            [1021523.825054879,1072,-25.58980941772461,-23.23800277709961],
              ...
          ]
        },
        "VideoDecodability":{
          "cols":["time","PID","realFPS","statFPS","declaredFPS"],
          "data":[
            [1021523.825054879,1021,25,25,25],
            [1021523.825054879,1071,24.0416667461395264,24.041667103767395,25],
              ...
          ]
        },
        "Thumb":{
          "cols":["time","url","id","pid"],
          "data":[
            [1021524.1780905407,"241555/thumbs/112163793?ut=1589269172",112163793,1021],
            [1021525.6247920685,"241555/thumbs/112163796?ut=1589269173",112163796,1071],
              ...
          ]
        },
        "CC":{
          "cols":["time","CC","[PID, count]"],
          "data":[
            [1021534.0012250001054852,1,[[1071,1]]],
            [1021574.6247920685,12,[[1022,4],[1072,3],[1021,3],[1071,2]]],
              ...
          ]
        },
        "ClockDiscontinuity":{
          "cols":["time","ClockDiscontinuity","[PID, count]"],
          "data":[
            [1021574.6247920685,2,[[1021,1],[1071,1]]],
              ...
          ]
        }
      }
    }
  ]
}
  • time - вещественное число, максимальное время, которое есть в статистике для запрошенного интервала. Выполнение команды init позволяет получить актуальное время задачи;

  • EPSNR - объект, Estimated Peak Signal to Noise Ratio, измеряется в децибелах (dB) для каждого видеопотока:
    • time - вещественное число, время захвата данных;

    • PIDn - вещественное число, значение EPSNR в децибелах (dB). Название поля (колонки) является номером PID в десятичном формате.

  • Bitrate - объект, битрейт (бит/с) каждого PID, обнаруженного в потоке:
    • time - вещественное число, время захвата данных;

    • PIDn - целое число, значение битрейта (бит/с). Название поля (колонки) является номером PID в десятичном формате;

    • tei - целое число, битрейт (бит/с) трафика, помеченного флагом TEI (transport error indicator).

  • DownloadRate - объект, Скорость скачивания или Скорость потока, в зависимости от типа анализируемого источника:
    • time - вещественное число, время захвата данных;

    • rate, bps - целое число, значение битрейта (бит/с).

  • IAT_MDI - объект, три метрики, связанные с передачей IPTV потоков по сети:
    • time - вещественное число, время захвата данных;

    • maxIAT - вещественное число, Maximum Inter-packet Arrival Time (maxIAT) - максимальное время между приходящими пакетами, в мс;

    • MLR - целое число, Media Lose Rate (MLR) - количество потерянных транспортных пакетов;

    • DF - вещественное число, Delay factor (DF) - время в мс, которое показывает сколько данных должен держать клиент в буфере для плавного проигрывания контента.

  • AudioLoudness - объект, две метрики, связанные с измерением громкости по стандарту EBU R 128-2011:
    • time - вещественное число, время захвата данных;

    • PID - целое число, PID аудиопотока в десятичной форме. Если в потоке содержится несколько аудиопотоков, то массивы данных будут перемежаться;

    • momLoudness - вещественное число, Мгновенная громкость (Momentary Loudness) в LUFS;

    • stLoudness - вещественное число, Кратковременная громкость (Short-Term Loudness) в LUFS.

  • VideoDecodability - объект, три метрики, оценка возможности декодирования на основе подсчета кадров:
    • time - вещественное число, время захвата данных;

    • PID - целое число, PID видеопотока в десятичной форме. Если в потоке содержится несколько видеопотоков, то массивы данных будут перемежаться;

    • realFPS - вещественное число, количество корректно декодированных кадров за одну секунду;

    • statFPS - вещественное число, среднестатистическая частота кадров (за последние 30 секунд);

    • declaredFPS - вещественное число, заявленная частота кадров.

  • Thumb - объект, ссылки на эскизы для каждого видеопотока:
    • time - вещественное число, время захвата данных;

    • url - строка, относительный URL для скачивания эскиза. Пример полного URL:
      http://172.16.11.111/en/projects/23/apps/702/tasks/241555/thumbs/112163793?ut=1589269172
    • id (не используется) - целое число, идентификатор эскиза;

    • PID - целое число, PID видеопотока в десятичной форме. Если в потоке содержится несколько видеопотоков, то массивы данных будут перемежаться.

  • CC - объект, ошибки Continuity Counter:
    • time - вещественное число, время захвата данных;

    • CC - целое число, суммарное количество ошибок Continuity Counter в транспортном потоке за одну секунду (согласно ETSI TR 101 290 p1.4);

    • [PID, count] - массив массивов, детализация ошибок по каждому PID:
      • PID - целое число, PID потока в десятичной форме;

      • count - целое число, количество ошибок.

  • ClockDiscontinuity - объект, ошибки PTS/DTS:
    • time - вещественное число, время захвата данных;

    • ClockDiscontinuity - целое число, суммарное количество ошибок неравномерности временных меток PTS/DTS в транспортном потоке за одну секунду;

    • [PID, count] - массив массивов, детализация ошибок по каждому PID:
      • PID - целое число, PID потока в десятичной форме;

      • count - целое число, количество ошибок.

Пример

Запрос утилитой cURL
#Запрос инициализационной информации по всем метрикам
  curl http://172.16.11.111/ctrl_api/v1/json \
   -H "Content-Type: application/json" \
   --data '{"user_id":4,"methods":[{"method":"TaskStatistics", "params":{"project_id":23,"task_id":241555, "position_type":"init"}}]}'

Визуализации данных, полученных в ответе, в интерфейсе Elecard Boro (страница задачи):

Ответ на запрос
 {
   "reply":[
     {
       "method":"TaskStatistics",
       "result":{
         "head":{
           "time":1021823.7122620306,
           "data_version":2
         },
         "EPSNR":{
           "cols":["time","1021","1071","1091"],
           "data":[
             [1021523.8250531789,50.890653318618305,50.69966307076358,49.81497413611472],
             [1021524.8253254407,50.89207579602636,50.69161823423854,50.05298566057196],
               ...
             [1021821.9385350284,46.640793752131,47.68373994934159,47.479309657171044],
             [1021822.9390992803,44.76247796973997,48.69961482382366,48.231185218245415]
           ]
         },
         "Bitrate":{
           "cols":["time","0","16","17","18","1020","1021","1022","1024","1070","1071","1072","1090","1091","1092","1130","1132","7000","7010","8191","20"],
           "data":[
             [1021523.8249982789,15280,12224,25977,87100,15280,2716921,198650,38201,15280,2715393,198650,15280,2716921,197121,15280,200178,1528,13752,1002418],
             [1021524.8252731407,14923,8953,23876,85061,14923,2717499,196985,37307,14923,2717499,198477,14923,2717499,198477,14923,201462,0,16415,1005818,1492],
               ...
             [1021821.9384111284,14925,8955,25373,86566,14925,2716403,198506,37313,14925,2717896,198506,14925,2716403,198506,14925,199998,0,16417,1004472,1492],
             [1021822.9390142803,14868,11894,25276,87725,14868,2718005,199241,38658,14868,2716518,197754,14868,2718005,197754,14868,200727,1486,14868,999179]
           ]
         },
         "DownloadRate":{
           "cols":["time","rate, bps"],
           "data":[
             [1021524.6812821408,10779843],
             [1021525.6813746685,10009549],
               ...
             [1021822.7123416803,10009588],
             [1021823.7122620306,10009753]
           ]
         },
         "IAT_MDI":{
           "cols":["time","maxIAT","MLR","DF"],
           "data":[
             [1021524.4743567407,71.849,0,72.03139948869963],
             [1021525.4748181686,71.926,0,72.21568719710159],
               ...
             [1021822.1680089284,71.896,0,71.9357831331915],
             [1021823.1688340803,72.461,0,72.52942528068608]
           ]
         },
         "AudioLoudness":{
           "cols":["time","PID","momLoudness","stLoudness"],
           "data":[
             [1021523.825054879,1022,-24.895469665527344,-22.834897994995117],
             [1021523.825054879,1072,-25.58980941772461,-23.23800277709961],
             [1021523.825054879,1092,-41.76763153076172,-38.99705505371094],
             [1021523.825054879,1132,-23.177711486816406,-23.156808853149414]
               ...
           ]
         },
         "Thumb":{
           "cols":["time","url","id","pid"],
           "data":[
             [1021524.1780905407,"241555/thumbs/112163793?ut=1589269172",112163793,1021],
             [1021525.6247920685,"241555/thumbs/112163796?ut=1589269173",112163796,1071],
             [1021527.3863328784,"241555/thumbs/112163797?ut=1589269175",112163797,1091]
               ...
           ]
         }
       }
     }
   ]
 }