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

Как настроить два авторизационных бекенда

Если вы уже используете какую-то Middlware как IPTVPortal, Stalker или что-то ещё подобное, то вы можете столкнуться с ситуацией, когда надо добавить определенные исключения в авторизацию.

Например, передать партнеру ссылку на стрим с паролем, но при этом не хочется модифицировать код самой Middleware.

В этом документе будет показано, как можно решить этот вопрос внутри Flussonic Media Server и для этого понадобится написать небольшой скрипт на Lua.

Авторизационный бекенд на Lua Anchor Anchor x2

Предположим, что авторизационный бекенд вашей Middlware — http://iptv.myservice.com/auth.php

Вы хотите что бы ваш партнер смог забрать стримы по паролю PASS

Создайте файл /etc/flussonic/auth.lua и укажите в конфигурации Flussonic Media Server:

auth /etc/flussonic/auth.lua;

Сам файл auth.lua будет выглядеть так:

if req.token == "PASS" then
  return true, {}
else
  url = "http://iptv.myservice.com/auth.php?"..http.qs_encode(req)
  reply = http.get(url)
  if reply.code == 200 then
    t = {}
    if reply.headers["x-authduration"] then
      t["auth_time"] = tonumber(reply.headers["x-authduration"])
    end
    if reply.headers["x-max-sessions"] then
      t["max_sessions"] = tonumber(reply.headers["x-max-sessions"])
    end
    if reply.headers["x-userid"] then
      t["user_id"] = reply.headers["x-userid"]
    end
    return true, t
  else
    return false,{["code"] = reply.code}
  end
end

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

Аналогичным образом можно организовать два разных авторизационных бекенда.

Два авторизационных бекенда Anchor Anchor x2

function convert_reply(reply)
  if reply.code == 200 then
    t = {}
    if reply.headers["x-authduration"] then
      t["auth_time"] = tonumber(reply.headers["x-authduration"])
    end
    if reply.headers["x-max-sessions"] then
      t["max_sessions"] = tonumber(reply.headers["x-max-sessions"])
    end
    if reply.headers["x-userid"] then
      t["user_id"] = reply.headers["x-userid"]
    end
    return true, t
  else
    return false,{["code"] = reply.code}
  end
end



reply1 = http.get("http://iptv1.myservice.com/auth.php?"..http.qs_encode(req))

status1, headers1 = convert_reply(reply1)
if status1 then
  return status1, headers1
end

reply2 = http.get("http://iptv2.myservice.com/auth.php?"..http.qs_encode(req))

status2, headers2 = convert_reply(reply2)

return status2, headers2

parallel_auth.erl Anchor Anchor x2

Вместе с Flussonic Media Server поставляет скрипт parallel_auth.erl, который реализует параллельную авторизацию на нескольких http бэкендах.

Создайте текстовый файл /etc/flussonic/backends.txt со списком ваших бэкендов. Пример файла:

root@flussonic:~# cat /etc/flussonic/backends.txt
http://stalker1/stalker_portal/server/api/chk_flussonic_tmp_link.php
http://stalker2/stalker_portal/server/api/chk_flussonic_tmp_link.php
http://stalker3/stalker_portal/server/api/chk_flussonic_tmp_link.php
http://yourwebsite/auth.php

Затем настройте Flussonic Media Server, чтобы он использовал parallel_auth.erl:

auth /etc/flussonic/parallel_auth.erl;

Также, вы можете указать whitelist и blacklist с определенными IP-адресами:

auth /etc/flussonic/parallel_auth.erl whitelist=allow.txt blacklist=deny.txt;

Примеры:

root@flussonic:/etc/flussonic# cat allow.txt
1.2.3.4
5.6.7.8
2.3.4.5
3.4.5.6
root@flussonic:/etc/flussonic# cat deny.txt
1.1.1.1
2.2.2.2
3.3.3.3