Project

General

Profile

Ограничение качества в разных сетях

Added by Александр Драгой 12 months ago

Интересует, есть ли такая возможность в Flussonic, как ограничение качества в определенной сети.
Например, есть 2 сети, 10.10.0.0/16 и 10.200.0.0/20
Нужно сделать так что бы в сети 10.10.0.0/16 люди могли смотреть видео в максимальном качестве, а в сети 10.200.0.0/20 качество намеренно ухудшалось.
В документации ничего похожего не нашел. Умеет Flussonic так делать?


Replies (13)

RE: Ограничение качества в разных сетях - Added by Max Lapshin 12 months ago

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

что-то подобное можно было бы делать, если бы работал H264 SVC, но он не взлетел

RE: Ограничение качества в разных сетях - Added by Александр Драгой 11 months ago

Подскажите как ограничить тогда доступ по сетям, например к Camera1 могли подключаться юзеры из сети 10.10.0.0/16 и не могли к Camera2, а к Camera2 могли подключиться юзеры из сети 10.200.0.0/20 и не могли к Camera1, в документации нашел ограничение доступа по ip адресу, и не слова о сети. Есть ли в Флюссонике такая возможность?

RE: Ограничение качества в разных сетях - Added by Max Lapshin 11 months ago

В авторизационный бекенд отдается IP адрес клиента и вы можете его проверить.

Это то, что вам нужно?

RE: Ограничение качества в разных сетях - Added by Александр Драгой 11 months ago

Не думаю, что это то что нужно, вот это http://erlyvideo.ru/doc/auth/ban-per-ip больше подходит. Нужно что бы пользователь из определенной сети заходя на сайт мог видеть не все камеры а определенные.

RE: Ограничение качества в разных сетях - Added by Max Lapshin 11 months ago

смотрите, у вас есть две задачи:

1) не показывать камеры на сайте
2) не давать смотреть камеры тем, кто подсмотрел урл

1) решается не флюссоником, а вашим сайтом
2) решается флюссоником с помощью авторизационного бекенда

RE: Ограничение качества в разных сетях - Added by Александр Драгой 11 months ago

1) решается не флюссоником, а вашим сайтом

Нужно, что бы Флюссоник блокировал поток для определенных сетей, и определенных камер, но при этом что бы юзеры видели камеры заходя на сайт, но не могли смотреть. Зашел например юзер на сайт, увидел список камер, начал их щелкать, но смог смотреть поток только одной или двух камер, а остальные 200 не мог. А юзер из другой сети, заходя мог видеть все потоки без ограничений. Авторизационный бекенд на сколько я понял из документации это не то.

RE: Ограничение качества в разных сетях - Added by Александр Драгой 11 months ago

Идеально подходят whitelist и blacklist, но там можно указывать ip адрес, а нужно сеть. Как можно ограничивать доступ по сетям, а не по оному ip адресу.

RE: Ограничение качества в разных сетях - Added by Max Lapshin 11 months ago

ну поправить скрипт надо =)

RE: Ограничение качества в разных сетях - Added by Александр Драгой 11 months ago

не подскажете синтаксис скрипта? попробовал отсюда http://erlyvideo.ru/forum/boards/2/topics/30418
не работает, при указании маски блокируется все без разбора

RE: Ограничение качества в разных сетях - Added by Андрей Тишков 11 months ago

У меня по сетям сделано. В последнем обновлении кажется это снова сломано. По крайней мере пока не убрал, у меня было 403 даже на тех потоках, которые не попадают в выборку скрипта.

Скрипт для ограничения по подсетям.

flussonic.conf:

auth /etc/flussonic/ip-control.lua;

ip-control.lua:

--local req = { ip = "10.10.15.17", name = "STREAM_816" }
--flussonic.log("Access check for " .. req.ip .. " on stream " .. req.name)

whitelist = {
    "10.10.0.0/16",
    "10.20.0.0/16",
    "10.30.0.0/16" 
}

function iptonumber(ip)
   local a, b, c, d;
   _, _, a, b, c, d = string.find(ip, "^(%d+)%.(%d+)%.(%d+)%.(%d+)$");
   return ((a*256+b)*256+c)*256+d;
end

function make_mask(m)
   local mask = bit32.lshift (1, 32 - m);
   return bit32.bnot(mask - 1);
end

function parse_cidr(cidr)
   local bits;
   local ip_len = cidr:find("/", 1, true);
   if ip_len then
      bits = make_mask(tonumber(cidr:sub(ip_len+1, -1)));
      cidr = cidr:sub(1, ip_len-1);
   end
   return iptonumber(cidr), bits;
end

function member(items, el)
   for _, item in pairs(items) do
      ip,m = parse_cidr(item);
      if (bit32.band(ip,m) == bit32.band(iptonumber(el),m)) then
         return true;
      end
   end
   return false
end

-- helper: Check if string X starts with string Y
function string.starts(String,Start)
   return string.sub(String,1,string.len(Start))==Start
end

if string.starts(req.name, "STREAM_") then
   if not member(whitelist, req.ip) then
        flussonic.log("STREAM_CTL: Access not allowed for " .. req.ip .. " on " .. req.name)
      return false, {code = 403}
   end
--   flussonic.log("STREAM_CTL: Access granted for " .. req.ip .. " on " .. req.name)
end

return true, {}

RE: Ограничение качества в разных сетях - Added by Max Lapshin 11 months ago

«У меня по сетям сделано. В последнем обновлении кажется это снова сломано.» — это разве что у вас в скрипте или сети что-то поменялось.

Авторизация в флюссонике работает и в принципе тот скрипт, который вы привели что-то примерно нужное и делает.

RE: Ограничение качества в разных сетях - Added by Андрей Тишков 11 months ago

Да, сейчас снова включил. Вроде всех пускает, кого должно.

У меня была какая-то проблема именно с https. Не было времени разобраться конкретно, но смысл был такой, что клиент получал 403, хотя его должно было пустить. После отключения auth, проблема ушла. Сейчас вот дошли руки начать разбираться, вернул всё назад - ссылки открылись и по http и по https. Один только нюанс, при обработке https, я не увидел сообщение в логе о проверке. Видимо, какая-то есть беда всё-таки.

Механизм одинаковый работает? Что http\https?

    (1-13/13)