Документация на 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. Группы каналов

HTTP API к Flussonic Media Server

Аутентификация и авторизация Anchor Anchor x2

Flussonic Media Server предоставляет возможность получать информацию и управлять определенной функциональностью по HTTP.

Запросы на получение информации можно защитить с помощью директивы view_auth user password; в конфигурационном файле.

Запросы на модификацию состояния Flussonic Media Server можно защитить с помощью директивы edit_auth user password; в конфигурационном файле /etc/flussonic/flussonic.conf.

При включеной авторизации для доступа к HTTP API необходимо указывать логин и пароль в формате HTTP Basic Auth.


Информация о сервере (server) Anchor Anchor x2

Информация о сервере Flussonic Media Server.

URL: /flussonic/api/server

Пример: http://example.flussonic.com:8080/flussonic/api/server

Параметры: нет

Ответ: JSON вида

{
    "version": "4.6.1", // версия сервера Flussonic Media Server.
    "hostname": "streamer.example.com", // hostname
    "uptime": 43373, // Время работы Flussonic в секундах.
    "total_clients": 1592, // Общее число клиентов.
    "total_streams": 100, // Общее количество потоков.
    "online_streams": 95, // Общее количество активных потоков.
    "input_kbit": 1234, // Текущая скорость входящего трафика.
    "output_kbit": 123456 // Текущая скорость исходящего трафика.
}

Список потоков, их клиенты и состояние (media) Anchor Anchor x2

Состояние и настройки потоков, количество клиентов.

URL: /flussonic/api/media

Параметры:  нет

Ответ: JSON вида

[ //Список транслируемых потоков
  {
    "entry": "stream",
    "value": {
      "name": "euro", //Название потока
      "urls": [ //Список всех источников
        {
          "value": "tshttp://192.168.1.2:6502", //URL источника
          "options": [ //Опции резервирования источника
            [
              "priority",
              "1"
            ],
            [
              "source_timeout",
              "30"
            ]
          ]
        }
      ],
      "stats": {
        "alive": true, //Отдавал ли поток кадры в последнее время
        "bitrate": 3690, //Битрейт
        "bufferings": 0,
        "client_count": 0, //Количество клиентов, смотрящих поток
        "dash": true, //Включен ли DASH
        "hds": true, //Включен ли HDS
        "hls": true, //Включен ли HLS
        "input_error_rate": 0, //количество регистрируемых ошибок в секунду
        "last_access_at": 1493279230436,
        "media_info": { //Информация о содержимом потока
          "height": 576, //Высота изображения
          "streams": [
            {
              "bitrate": 191, //Битрейт
              "codec": "mp2a", //Кодек
              "content": "audio", //Тип содержимого:аудио
              "lang": "eng", //Язык
              "track_id": "a1" //Номер трека
            },
            {
              "bitrate": 3256, //Битрейт
              "codec": "mp2v", //Кодек
              "content": "video", //Тип содержимого: видео
              "size": "1024x576", //Размеры изображения
              "track_id": "v1" //Номер трека
            }
          ],
          "width": 1024 //Ширина изображения
        },
        "out_bandwidth": 4002, //Скорость отдачи по сети
        "push_stats": { //Статистика копирования потока, количество байт
          "tshttp://container4:8080/static1/mpegts": 2000918592
        },
        "remote": false, //Зеркалирование потока с удаленного сервера
        "retry_count": 0, //Количество автоматических перезапусков
        "running": true, //Ведется вещание потока, не обязательно означает, что в потоке есть кадры
        "start_running_at": 1493279194382,
        "ts_delay": 113, //Миллисекунды с момента когда в потоке был кадр
        "url": "tshttp://192.168.1.2:6502" //URL текущего источника
      },
      "options": { //Информация о конфигурации потока
        "static": false, 
        "retry_limit": 10,
        "clients_timeout": 60,
        "source_timeout": 60,
        "pushes": [ 
          [
            "tshttp://container4:8080/static1/mpegts"
          ]
        ],
        "publish_enabled": false,
        "add_audio_only": false,
        "dash_off": false,
        "dvr_protected": false,
        "hds_off": false,
        "hls_off": false,
        "m4s_off": false,
        "mpegts_off": false,
        "pulse_off": false,
        "rtmp_off": false,
        "rtsp_off": false,
        "webrtc_off": false 
      }
    }
  },
  ...
]

Информация о потоке (media_info) Anchor Anchor x2

Информация о конкретном потоке: ширина, высота, описание дорожек.

URL: /flussonic/api/media_info/STREAM_NAME

Параметры: 

  • STREAM_NAME — имя потока. Обязательный параметр

Ответ: JSON вида

{
    "width":1024,   //Ширина изображения
    "height":576,   //Высота изображения
    "streams":[   //Список элементов, составляющих поток
        {
            "content":"video",   //Тип содержимого. Видео.
            "codec":"h264",   //Кодек h264
            "track_id":1   //Номер трека. Элементы отсортированы по нему.
        },
        {
            "content":"audio",   //Тип содержимого. Аудио.
            "codec":"aac",   //Кодек AAC
            "lang":"ukr",   //Язык. Украинский.
            "track_id":2   //Номер трека.
        },
        {
            "content":"audio",   //Тип содержимого. Аудио.
            "codec":"aac",   //Кодек AAC
            "lang":"rus",   //Язык. Русский.
            "track_id":3   //Номер трека.
        }
    ]
}

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

curl http://192.168.2.3:8080/ort/media_info.json

{"width":320,"height":240,"streams":[{"size":"320x240","content":"video","codec":"h264","bitrate":115,"track_id":1,"fps":25.0,"width":320,"height":240,"pixel_width":320,"pixel_height":240,"sar_width":1,"sar_height":1,"length_size":4,"profile":"Baseline","level":"2.1"},{"content":"audio","codec":"aac","bitrate":25,"track_id":2}]}

Информация об исходном потоке (input_media_info) Anchor Anchor x2

Информация об оригинальном входящем потоке до транскодирования.

URL: /flussonic/api/input_media_info/STREAM_NAME

Параметры: 

  • STREAM_NAME — имя потока. Обязательный параметр

Ответ: JSON вида

{
    "height": 240,
    "streams": [
        {
            "codec": "h264",
            "content": "video",
            "fps": 25,
            "height": 240,
            "length_size": 4,
            "level": "2.1",
            "pixel_height": 240,
            "pixel_width": 320,
            "profile": "Baseline",
            "sar_height": 1,
            "sar_width": 1,
            "size": "320x240",
            "track_id": "v1",
            "width": 320
        },
        {
            "bitrate": 25,
            "codec": "aac",
            "content": "audio",
            "lang": "eng",
            "track_id": "a1"
        }
    ],
    "width": 320
}

Если поток не транскодируется, то в ответе будет ошибка:

{
    "error": "no_transcoder"
}

Проверка качества вещания потока (stream_health) Anchor Anchor x2

HTTP status code сигнализирует о том, когда в последний раз в потоке были кадры.

URL: /flussonic/api/stream_health/STREAM_NAME

Параметры: 

  • STREAM_NAME — имя потока. Обязательный параметр

Ответ запроса:

  • HTTP 200 — если поток по имени STREAM_NAME приходит и последний кадр на нём был относительно недавно (меньше секунды назад).
  • HTTP 424 — eсли в потоке давно не было кадров.

URL пригоден для настройки monit, например:

check process flussonic
start program = "/etc/init.d/flussonic start"
stop  program = "/etc/init.d/flussonic stop"
if failed host localhost port 8080
protocol HTTP request "/flussonic/api/stream_health/cam0" then restart
if 5 restarts within 5 cycles then timeout

Список открытых файлов (files) Anchor Anchor x2

Список транслируемых файлов и количество клиентов, которые их просматривают.

URL: /flussonic/api/files

Параметры:  нет

Ответ: JSON вида

{
    "files":[   //Список транслируемых файлов
        {
            "name":"vod/ir.mp4",    //Внутренний идентификактор с префиксом
            "worker_count":1, //Сколько запущено потоков чтения этого файла
            "client_count":1,    //Количество клиентов, смотрящих поток
            "url":"priv/ir.mp4",    //Путь на диске или внешнем хранилище
            "bytes_out":1792522,    //Количество отданных данных
            "bytes_in":1792522,    //Количество считанных данных
            "prefix":"vod"    //Префикс, в который добавлен файл
        }
    ]
}

Список открытых сессий (sessions) Anchor Anchor x2

Список открытых сессий, т.е. соединений клиентов с сервером. Если клиент нажал на паузу в проигрывателе или отключено автоматическое проигрывание видео (autoplay), то через некоторое время сессия будет закрыта.

URL: /flussonic/api/sessions

Параметры:  нет

Ответ: JSON вида

{
    "sessions":[    //
        {
            "id":"3100c9414a8666450a47246520a921076f4738e5",
            //НЕуникальный идентификатор сессии
            "session_id":
            "3100c9414a8666450a47246520a921076f4738e5-1396588629135",
            //Уникальный идентификатор сессии
            "ip":"127.0.0.1",    //IP клиента
            "name":"vod/ir.mp4",    //Внутренний идентификактор с префиксом
            "created_at":1396588629135,    //Время старта сессии
            "duration":5109,    //Длительность сессии
            "type":"hds",    //Тип потока
            "bytes_sent":828010,    //Количество посланых по сети байт
            "country":"NONE",    //GeoIP location пользователя
        }
    ]
}

Для того, что бы вывести список подключений только одного потока или файла, надо указать имя потока в query string: /flussonic/api/sessions?name=vod/ir.mp4


Список открытых сессий для потока (sessions+stream_name) Anchor Anchor x2

Список сессий открытых к заданному потоку.

URL: /flussonic/api/sessions?name=STREAM_NAME

Параметры: 

  • STREAM_NAME — имя потока. Обязательный параметр

Ответ: JSON вида

{
    "name":"euro",    //Имя потока
    "sessions":[    //Список сессий
        {
            "id":"e927bf4dca1ea90622318d4b4a0a60ab650bc6d9",
            //НЕуникальный идентификатор сессии
            "session_id":
            "e927bf4dca1ea90622318d4b4a0a60ab650bc6d9-1396867792624",
            //Уникальный идентификатор сессии
            "ip":"127.0.0.1",    //IP клиента
            "name":"euro",    //Имя потока
            "created_at":1396867792624,    //Время старта сессии
            "duration":30614,    //Длительность сессии
            "type":"hls",    //Тип потока
            "bytes_sent":5712330,    //Количество посланных по сети байт
            "country":"NONE"    //GeoIP location пользователя
        }
    ]
}

Закрыть сессию (close_sessions) Anchor Anchor x2

Чтобы закрыть несколько активных сессий необходимо передать список их идентификаторов в теле POST запроса. Используйте \n в качестве разделителя.

URL: /flussonic/api/close_sessions

Параметры: 

  • HTTP request payload — список идентификаторов сессий через \n Обязательный параметр

Ответ код 200

Информация о состоянии плейлиста (playlist) Anchor Anchor x2

HTTP API позволяет запросить текущее состояние плейлиста и получить JSON ответ с данными.

URL: /flussonic/api/playlist/STREAM_NAME

Пример: http://example.flussonic.com:8080/flussonic/api/playlist/example_stream

Параметры: 

  • STREAM_NAME — имя потока. Обязательный параметр

Ответ: JSON вида

{
    "current_entry":"vod/ir.mp4",   //Идентификатор текущего элемента в плейлисте
    "current_type":"file",   //Тип текущего элемента в плейлисте
    "duration":null,   //Длительность текущего элемента в миллисекундах (null - неизвестна)
    "position":5.22e4   //Позиция проигрывания внутри текущего элемента, в миллисекундах
}

Подробнее о серверных плейлистах.

Карта записи архива за сутки (dvr_status) Anchor Anchor x2

Карта записи архива за определенные сутки, состоящая из сегментов и секунд.

URL: /flussonic/api/dvr_status/YEAR/MONTH/DAY/STREAM_NAME

Параметры: 

  • STREAM_NAME — имя потока Обязательный параметр
  • YEAR — год Обязательный параметр
  • MONTH — месяц Обязательный параметр
  • DAY — день Обязательный параметр

Ответ: JSON вида

[   //Список блоков
    {
        "timestamp":1396864800,    //Таймстемп блока
        "path":"2014/04/07/10/00",    //Путь до записи на жестком диске
        "bitrate":2052,    //Битрейт
        "segments":[
            {
                "second":1,    //Начиная с этой секунды от начала блока
                "utc":1396864801,    //Таймстемп сегмента
                "duration":5357,    //Длина сегмента
                "size":1383868,    //Размер в байтах
                "bitrate":2066,    //Битрейт
                "jpeg":"2014/04/07/10/00/01.jpg"    //Скриншот сегмента
            },

            {"second":6,"utc":1396864806,"duration":7211,
            "size":1842964,"bitrate":2044,
            "jpeg":"2014/04/07/10/00/06.jpg"},

            {"second":13,"utc":1396864813,"duration":7109,
            "size":1739188,"bitrate":1957,
            "jpeg":"2014/04/07/10/00/13.jpg"}
        ]
    }
    {"timestamp":1396865400,"path":"2014/04/07/10/10","bitrate":1964,
    "segments":[ {"second":0,"utc":1396865400,"duration":7194,
    "size":1800664, "bitrate":2002,"jpeg":"2014/04/07/10/10/00.jpg"}]}
]

Список файлов VOD (list_files) Anchor Anchor x2

Список имеющихся файлов для определенного префикса и источника.

URL: /flussonic/api/list_files?prefix=VOD_LOCATION&path=VOD_ROOT&subpath=SUB_PATH_IN_VOD_ROOT&from=FirstName&limit=COUNT

Параметры:

  • VOD_LOCATION — префикс VOD. Обязательный параметр
    Веб-интерфейс: Список префиксов отображается на главной странице в разделе Files (VOD).
    Файл конфигурации: file vod {...};.
  • VOD_ROOT — корень VOD. Обязательный параметр
    Веб-интерфейс: Список источников (хранилищ) отображается на вкладке соответствующего префикса. Новый источник можно добавить в поле New Path.
    Файл конфигурации: элементы path file vod { path priv };.
    Может быть адресом swift-хранилища и начинаться с swift://.
  • SUB_PATH_IN_VOD_ROOT — место внутри хранилища VOD_ROOT. Обязательный параметр
    Для корня хранилища его значение /
  • FirstName — список файлов начиная с этого имени. Можно указать неполное имя файла. Необязательный параметр
    Ответ запроса не будет включать сам файл FirstName.
  • COUNT — максимальное количество файлов в запросе. Необязательный параметр
    Если используется вместе с FirstName, ответ будет включать COUNT файлов
    начиная FirstName (не включая сам FirstName).

Ответ: JSON вида

{
    "files":[   //Список файлов
        {
            "name":"0.fla",   //Название файла
            "type":"file",   //Тип (file или directory)
            "prefix":"vod"   //Префикс
        },
        {"name":"1.fla","type":"file","prefix":"vod"},
        {"name":"10.fla","type":"file","prefix":"vod"}
    ]
}

Сохранить новый файл конфигурации (save_config) Anchor Anchor x2

Для обновления конфигурации необходимо передать текст нового файла конфигурации в качестве тела POST запроса. Важное отличие от update_config в том, что новая конфигурация не только применяется к запущенному серверу, но и заменяет собой существующий файл конфигурации в /etc/flussonic/flussonic.conf.

URL: /flussonic/api/save_config

Параметры:

  • HTTP request payload — текст нового файла конфигурации.
    Обязательный параметр
    В этом запросе вы передаете полный текст нового файла конфигурации как данные, приложенные к запросу.
    Если использовать curl, то имеется в виду параметр --data-binary:
    curl ... --data-binary '# Global settings:\nhttp 80;\nrtsp 554;\nrtmp 1935;\npulsedb /var/run/flussonic;'

Ответ: true в случае успешной обработки запроса.


Обновить конфигурацию (update_config) Anchor Anchor x2

Для обновления конфигурации необходимо передать текст нового файла конфигурации в качестве тела POST запроса. Важное отличие от save_config в том, что новая конфигурация применяется к запущенному серверу, но сам файл конфигурации на жестком диске не изменяется.

URL: /flussonic/api/update_config

Параметры:

  • HTTP request payload — текст нового файла конфигурации.
    Обязательный параметр
    В этом запросе вы передаете полный текст нового файла конфигурации как данные, приложенные к запросу.
    Если использовать curl, то имеется в виду параметр --data-binary:
    curl ... --data-binary '# Global settings:\nhttp 80;\nrtsp 554;\nrtmp 1935;\npulsedb /var/run/flussonic;'

Ответ: true в случае успешной обработки запроса.


Удалить поток (config/stream_delete) Anchor Anchor x2

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

URL: /flussonic/api/config/stream_delete

Параметры:

  • HTTP request payload — название потока.
    Обязательный параметр
    В этом запросе вы передаете название потока как данные, приложенные к запросу.
    Если использовать curl, то имеется в виду параметр --data-binary:
    curl ... --data-binary 'mystream'

Ответ: {"success":true} в случае успешной обработки запроса.


Создать или обновить поток (config/stream_create) Anchor Anchor x2

Для обновления конфигурации потока необходимо передать текст с настройками потока в качестве тела POST запроса. На вход передается в точности тот же текст, который пишется в файле конфигурации для создания потока.
Важно: в данный момент не существует отдельной команды config/stream_update, поэтому уже созданный поток можно обновлять с помощью запроса config/stream_create.

URL: /flussonic/api/config/stream_create

Параметры:

  • HTTP request payload — текст с конфигурацией потока.
    Обязательный параметр
    В этом запросе вы передаете конфигурацию потока как данные, приложенные к запросу.
    Если использовать curl, то имеется в виду параметр --data-binary:
    curl ... --data-binary 'stream mystream { url hls://myvideo.com/mystream; dvr /storage 1d 1G; }'

Ответ: {"success":true} в случае успешной обработки запроса.


Перечитать конфигурационный файл (reload) Anchor Anchor x2

Этот запрос необходимо выполнить для применения новой конфигурации к работающему серверу, если были внесены изменения в конфигурационный файл на диске /etc/flussonic/flussonic.conf.

URL: /flussonic/api/reload

Параметры: нет

Ответ: true в случае успешной обработки запроса.

Пример использования curl:
curl -u admin:pass0 http://flussonic:8080/flussonic/api/reload


Перезапустить поток (stream_restart) Anchor Anchor x2

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

URL: /flussonic/api/stream_restart/STREAM_NAME

Параметры:

  • STREAM_NAME — идентификатор потока.
    Обязательный параметр

Ответ: true в случае успешной обработки запроса.


Переключить источник у потока (stream_switch_source) Anchor Anchor x2

Поток переключается на использование источника, заданного параметром.

URL: /flussonic/api/stream_switch_source/STREAM_NAME?url=SOURCE_URL

Параметры:

  • STREAM_NAME — идентификатор потока.
    Обязательный параметр

  • SOURCE_URL — URL источника, на который надо переключиться. Должен быть указан в конфигурации потока.
    Обязательный параметр


Включить запись архива (dvr_enable) Anchor Anchor x2

В настройках потока обязательно должна быть опция dvr или dvr_offline.

URL: /flussonic/api/dvr_enable/STREAM_NAME

Параметры:

  • STREAM_NAME — идентификатор потока.
    Обязательный параметр

Ответ: true в случае успешной обработки запроса.


Выключить запись архива (dvr_disable) Anchor Anchor x2

URL: /flussonic/api/dvr_disable/STREAM_NAME

Параметры:

  • STREAM_NAME — идентификатор потока.
    Обязательный параметр

Ответ: true в случае успешной обработки запроса.


Серверы в кластере (cluster_servers) Anchor Anchor x2

URL: /flussonic/api/cluster_servers

Параметры: нет

Ответ: JSON вида

{
    "streamer-2": //Имя сервера в кластере
        {
            "client_count":0, //Текущее количество клиентов.
            "config2":true,
            "cpu_usage":1, //Использование процессора в процентах.
            "fetch_delay":0,
            "id":"91a25b1a-22f0-414b-858f-4abc727d0de2",
            "is_peer":true,
            "is_source":false,
            "key":"WzkF7f9VYndoH6G3VOVz6iSNlOh4h8CF", //Ключ кластера.
            "memory_usage":26, //Использование оперативной памяти в процентах.
            "output_bitrate":0, //Суммарный исходящий битрейт.
            "persistent":true,
            "ports":{ //Список используемых портов.
                "http":80,
                "rtmp":1935
                },
            "stream_count":0, //Текущее количество потоков.
            "uptime":251908, //Время с последнего перезапуска, в секундах.
            "version":"4.7.3" //Версия Flussonic Media Server.
        }
}