Skip to content

Псевдонимы для имен потоков

В Flussonic есть функция «Алиасер» — создание пcевдонимов для имен потоков и файлов. Она позволяет спрятать имена потоков от конечных пользователей. На каждый запрос от пользователя имя будет переписано на внутреннее имя, которое вы указали.

Итак, у вас есть поток «clock» и обычно вы даете пользователям ссылку http://192.168.2.3/clock/index.m3u8.

Теперь вы можете оставить имя «clock», но давать людям ссылку http://192.168.2.3/crf7930803e4e334e104/index.m3u8.

Это может пригодиться в ситуациях, если вам нужно:

  • спрятать имена потоков или файлов от пользователей, создать временные имена;
  • управлять именами потоков, что позволит делиться потоками, отзывать embed.

Чтобы включить «Алиасер», вам нужно написать бэкенд с необходимой логикой и включить его в настройках Flussonic:

aliaser /opt/flussonic/priv/rewrite.lua;

Можно указать только один lua бэкенд. Он должен вернуть false или имя потока. Объект req с полем name передается бэкенду.

Если включен «Алиасер», то Flussonic будет передавать авторизационному бэкенду новый параметр:

  • user_name — оригинальное имя запрашиваемого потока.

Пример перезаписи бэкэнда

Мы покажем вам пример сценария перезаписи, который поможет вам понять механизм работы «Алиасера».

Представим себе, что мы хотим скрыть исходное имя потока clock от пользователя и дать ему временную ссылку.

Создайте файл /etc/flussonic/alias.lua с кодом:

a = {}

a["alias"] = "clock"

if a[req.name] ~= nil then
  return a[req.name]
else
  return req.name
end

и затем включите его в /etc/flussonic/flussonic.conf:

# Global settings:
...
aliaser /etc/flussonic/alias.lua;

Теперь мы можем получить доступ к потоку clock через два имени:

http://flussonic/clock/index.m3u8
http://flussonic/alias/index.m3u8

Вы можете добавить дополнительные псевдонимы для своих потоков. Например:

a = {}

a["alias"] = "clock"
a["alias2"] = "clock"
a["alias3"] = "clock"
a["bbc-news"] = "bbc"
a["bbc-entertainment"] = "bbc"
a["BBC"] = "bbc"

if a[req.name] ~= nil then
  return a[req.name]
else
  return req.name
end

Пример перезаписи бэкэнда: криптографическая версия

Мы покажем вам пример сценария перезаписи, который поможет вам понять механизм работы «Алиасера».

Представим себе, что мы хотим скрыть исходное имя потока clock от пользователя и дать ему временную ссылку.

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

Например, наш ключ будет 000102030405060707090A0B0C0D0E0F (16 байт), IV будет заполнен нулями, поэтому шестнадцатеричное значение зашифрованной строки clock с помощью aes ctr encryption будет: a5cd5454ec

Чтобы расшифровать его в нашем сценарии lua, нам нужно будет написать следующий бэкэнд:

decrypted = crypto.aes_ctr_decrypt(crypto.from_hex("000102030405060708090A0B0C0D0E0F"), crypto.from_hex(req.name))
return decrypted

Новое имя потока не будет уникальным, оно будет таким же.

Добавим к нашему имени потока некоторую случайную последовательность 4 байта. Теперь зашифрованные «1234» + «clock» будут: f7930803e4e334e104

Теперь на нашем веб-сайте нам нужно добавить 4 случайных байта перед нашим потоком и затем зашифровать. Бэкенд будет выглядеть довольно просто:

decrypted = crypto.aes_ctr_decrypt(crypto.from_hex("000102030405060708090A0B0C0D0E0F"), crypto.from_hex(req.name))
return string.sub(decrypted,5)