Плагин 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;
}
В этом примере мы будем кодировать в два качества и использовать аппаратное ускорение. Обязательно нужно указать директорию для кэширования.
Подробнее про опции транскодера
Caution
Плагин 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;
}