Документация Flussonic Media Server

Contents

Плагин Dynafile

Flussonic Media Server умеет транскодировать VOD файлы на лету с помощью плагина dynafile. Этот плагин запускает транскодер при запросе файла. Плагин dynafile поможет вам наложить на видео уникальный для каждого зрителя водяной знак (watermark). Это полезно, например, чтобы определить через кого произошла утечка контента.

Мы рекомендуем использовать плагин с осторожностью, потому что транскодирование "на лету" — дорогая по ресурсам операция с непредсказуемой нагрузкой на процессор. Правильнее было бы заранее подготовить (транскодировать) контент перед раздачей.

Настройка плагина

Плагин включается через конфигурационный файл. Откройте /etc/flussonic/flussonic.conf и добавьте:

plugin dynafile {
  cache /tmp/dynacache 2G;
  transcoder vb=2048k size=1280x720 vb=600k size=360x-1 hw=nvenc;
}

В этом примере мы будем кодировать в два качества и использовать аппаратное ускорение. Обязательно нужно указать директорию для кэширования.

Подробнее про опции транскодера

Важно! Плагин dynafile включает транскодирование сразу для всех VOD локаций, нельзя включить транскодирование только для одной директории.

Для просмотра видео через плагин нужно добавить /dynafile/ к URL файла:

  • http://FLUSSONIC-IP/vod/bunny.mp4/embed.html — просмотр видео как есть, без транскодера.
  • http://FLUSSONIC-IP/dynafile/vod/bunny.mp4/embed.html — просмотр видео, прошедшего через транскодер.

Наложение водяного знака

Flussonic Media Server может накладывать уникальный watermark ("водяной знак") для каждого зрителя. Водяной знак может содержать ID клиента и IP адрес, такой водяной знак нужно создавать во внешней системе, Flussonic сам такие знаки не создает.

На сервере Flussonic настройте авторизационный бэкенд, чтобы возвращал PNG изображение в формате base64. Ниже код lua-бэкенда, который сделает запрос за логотипом к внешней системе и передаст его транскодеру:

prepare = function(key)

  name = string.gsub(req.name, "vod/", "")
  qs = {ip = req.ip, token = req.token, name = name, resolution = key}
  url = "http://example.com/getWatermark?"..http.qs_encode(qs)
  response = http.get(url, 10000)

  if not (response.code == 200) then
    return false,{code = response.code}
  end

  png = base64.decode(response.body)
  -- path = "/tmp/"..crypto.sha1(key..name..request.token)..".png"
  return png
end

extra = {}

string.gsub(req.sizes, "([^,]+)", function(w) extra[w] = prepare(w) end)

flussonic.log(table.tostring(req))
return true,{extra = extra}

Сохраните этот файл как /etc/flussonic/dynafile.lua и настройте Flussonic Media Server:

file vod {
  path /storage/vod;
  cache /tmp/cache 10G;
  auth /etc/flussonic/dynafile.lua;
}
plugin dynafile {
  cache /tmp/dynacache 2G;
  transcoder vb=2048k size=1280x720 vb=600k size=360x-1 hw=nvenc;
}