Перейти к содержимому

Переменные

В senta-streamer есть несколько типов переменных, которые можно использовать в профилях:

  • Стандартные переменные: ${i} — входной поток, ${o} — выходной поток
  • Пользовательские переменные (текстовые, булевые и с выбором значения)

После ключевого слова WHERE в профиле начинается JSON-массив со спецификацией переменных.

Для каждой переменной создаётся объект со следующими полями:

  • desc — описание переменной, которое используется в команде
  • name — имя, которое будет использоваться в форме добавления потока
  • description — описание переменной, которое будет использоваться в форме добавления потока (необязательно)
  • command — часть команды, где $value будет заменено на значение из формы добавления потока (например, -gpu $value)
  • default — значение по умолчанию, может быть пустым

Например:

Окно терминала
// Простой стартовый профиль для HD h264 кодирования
// Вы можете изменить его, форкнуть и поделиться с другими
ffmpeg -y -hide_banner -i ${i} -map 0:0 -map 0:1 -c:v h264_nvenc ${gpu} -preset fast -profile:v main -filter:v yadif -forced-idr 1 -b:v 4M -c:a aac -b:a 128k -r 25 -g 8 -keyint_min 13 -f mpegts ${o}
NAME "HD h264"
WHERE
[
{
   "desc": "gpu",
   "data": {
    "name": "GPU",
    "description": "Выберите GPU, который будет использоваться потоком, оставьте пустым, если не используете GPU",
    "command": "-gpu $value",
    "default": ""
   }
}
]

В этом примере:

Стандартные переменные:

Стандартные переменные (не нужно указывать их отдельно): ${i} — входной поток, можно использовать больше одного входа, в меню добавления потока они будут пронумерованы с 0 (вход #0, вход #1 …) ${o} — выходной поток, можно использовать больше одного выхода, в меню добавления потока они будут пронумерованы с 0

Пользовательские переменные:

(в этом примере вы можете добавить любые нужные вам переменные): ${gpu} — номер GPU-адаптера

Примечание: значение по умолчанию в этом примере пустое (в команду НЕ добавляется -gpu), но вы можете задать значение по умолчанию

При формировании командной строки текстовые переменные заменяются на пользовательский текст.

Пример текстовой переменной:

{
"desc": "logo",
"data": {
"name": "Logo path",
"description": "Укажите путь к файлу изображения с логотипом",
"command": "-i $value",
"default": ""
}
}

В профиле переменная ${logo} будет заменена на -i $value.

В редакторе потока появится поле с меткой Logo path, с описанием Укажите путь к файлу изображения с логотипом, и его значение заменит $value.

В итоге получаем профиль:

Окно терминала
ffmpeg -i ${i} ${logo} bla-bla ${o}
NAME "TEST"
WHERE
[
{
   "desc": "logo",
"data": {
"name": "Logo path",
"description": "Укажите путь к файлу изображения с логотипом",
"command": "-i $value",
"default": ""
}
}
]

В настройках потока укажем:

input#0: 'inp.ts'
output#0: 'udp://out:1234'
logo: 'logo.ts'

В результате команда запуска будет такой:

Окно терминала
ffmpeg -i inp.ts -i logo.ts bla-bla udp://out:1234

Булевые переменные добавляют текст при формировании команды запуска, если значение true, и не добавляют его, если значение false.

Чтобы задать этот тип, нужно добавить "extendtion": {"type": "checkbox",} в структуру переменной

Пример:

// Пример булевой переменной
// Эта переменная используется для установки опции -y, которая нужна для перезаписи выходного файла
"desc": "rev",
"data": {
"name": "Перезаписать файл",
"description": "Эта опция нужна, если в качестве выхода используется локальный файл",
"command": "-y",
"default": "",
"extendtion": {
  "type": "checkbox",
}
}

Эта переменная добавит флаг -y, если чекбокс отмечен.

Похожи на текстовые переменные, только пользователю предлагается выбрать из заранее заданных значений. Удобно использовать, например, при выборе разрешения изображения или кодека.

Нужно добавить "extendtion": {"type": "select"} в структуру переменной и добавить предустановленные опции в "options": [...]

Пример.

// Пример переменной-выбора
// Эта переменная используется для выбора видеокодека
"desc": "cv",
"data": {
"name": "Видеокодек",
"description": "Чтобы скопировать оригинальный кодек, выберите copy",
"command": "-c:v $value",
"default": "",
"extendtion": {
  "type": "select",
  "options": [
   "h264_nvenc",
   "libx264",
   "libx265",
   "hevc_nvenc",
   "libaom-av1",
   "libvpx",
   "libvpx-vp9",
   "copy"
  ]
}
}

Эта функция разрабатывается для интеграции с другими системами, например, с Astra Cesbo. Но вы можете использовать её вручную. На данный момент реализована автоматическая генерация входных адресов.

Например, внешняя система может отправлять потоки с адресами udp://192.168.0.1:9000udp://192.168.0.1:9999 в Senta для последующего транскодирования. Однако для создания процесса нужно знать свободный порт (так как порт может быть уже занят другим потоком). Чтобы Senta могла выделить порт, нужно:

Перейти в Настройки, где есть раздел Настройки автоматической генерации входа. Там указываем начальный порт: 9000, конечный порт: 9999 и IP интерфейса: 192.168.0.1. Затем применяем настройки.

Пример входа

При создании процесса указываем входной адрес как udp://${host}:${port} ( или назначаем адрес при создании потока, нажав кнопку Set auto generation). Соответственно, создаётся процесс с входом udp://192.168.0.1:9000, если порт 9000 свободен на сервере.

Senta отслеживает свободные и занятые порты. Когда поток удаляется, порт, который он занимал, освобождается.