mdecide

1. Сводка
Многоветвевое решение: вычисляет несколько групп условий и маршрутизирует пакет на выход первой совпавшей группы либо на именованный выход default, когда ни одна не совпала. Каждая ветвь — это свой выходной пин на плитке, поэтому процесс может разойтись в три и более параллельных цепочки, не складывая вложенные узлы decide.
2. Когда использовать
- N-путевая маршрутизация по одному инспектированному значению — разделение источника по VideoHeight на цели UHD / HD / SD / sub-SD, каждая со своей цепочкой фильтров и кодера.
- Несколько целей по разрешению или кодеку — контентно-осознанная лестница, выбирающая разный профиль кодера для каждой обнаруженной полосы растра.
- Маршрутизация «всё прочее» с явным умолчанием — отправка неизвестных источников в ветвь уведомления или карантина вместо молчаливого отбрасывания.
- Замена цепочки узлов decide — сворачивание паттернов
if VideoHeight ≥ 1080 then HD else if VideoHeight ≥ 576 then SDв одну плитку, которую проще читать и переупорядочивать.
3. Входы
Package—core.Package. Пакет для маршрутизации.Совместимые узлы выше по потоку:
Метаданные-пины (динамические) — по одному входному пину на свойство, на которое ссылаются группы решений, типизированному под это свойство и подключённому от соответствующего выхода analyze (или eval Value).
4. Выходы
Package—core.Package. Пакет, переданный так, чтобы параллельная ветвь могла пронести его мимо решения (типично для сквозного аудит-лога или для ветви notify на выходе default).Совместимые узлы ниже по потоку:
- map/audio, map/video, map/text, map/timecode — продолжают цепочку мультиплексирования на ветви, которая парует пакет с триггером маршрутизированной ветви.
- decide — уточняет совпадение ветви дополнительным условием.
Выходы ветвей (динамические) — по одному булеву пину на Decision Group, названному идентификатором ветви группы (например,
HD,SD). Срабатывает, когда совокупное выражение группы истинно. Подключайте их в decide ниже по потоку (или прямо в цепочку, которая должна сработать на этой ветви), используя соответствующий входmdecide_<id>/<branch>на потребителе.Выход ветви default (динамический) — один булев пин, названный значением Default ELSE condition (редактор процесса предзаполняет
Unknown). Срабатывает, когда ни одна группа решения не совпала.
5. Параметры

Форма «Настройки» содержит подпись, поле ветви по умолчанию и по одной группе решения на каждую выходную ветвь.
Node Label (
string, по умолчанию пусто)Произвольное имя, отображаемое на плитке узла на холсте.
- Что задаёт. Подпись на плитке Multi-Decide.
- Когда менять. Задавайте, чтобы кратко описать измерение, по которому
узел маршрутизирует (
By raster,By codec family).
Default ELSE condition if no decision group conditions are met (
string, по умолчанию пусто)Имя ветви, срабатывающей, когда ни одна группа решения не совпала.
- Что задаёт. Добавляет на плитку один выходной пин с заданным именем. Пакеты, не совпавшие ни с одной группой решения, вытекают из этого пина, поэтому покрытие ветвей процесса полное.
- Когда менять. Всегда задавайте на боевых процессах — оставление поля
пустым роняет несовпавшие пакеты на пол. Частые значения:
Unknown,Other,Quarantine.
Decision Group #N (
arrayиз{id, comb, expr}, по умолчанию[], обязательно)По одной группе на ветвь. Каждая группа имеет идентификатор ветви (поле справа с пометкой B), комбинатор (
AND/OR) и по одной строке на выражение — те же поля, что и строки условия decide.- Что задаёт. Каждая группа добавляет на плитку один именованный выход ветви. Группы вычисляются сверху вниз; первая совпавшая группа выигрывает.
- Когда менять. Упорядочивайте группы от самой специфичной к самой общей, чтобы более узкий диапазон не поглощался более широким. Используйте действия Edit и Del на заголовке группы для переупорядочивания, переименования или удаления ветви.
Соответствие JSON-ключей и названий полей
| JSON-ключ | Название поля |
|---|---|
default_output |
Default ELSE condition if no decision group conditions are met |
output |
(группы решений) |
6. Пример

Полный разбор — переменные, настройка каждого узла и ожидаемый результат — смотрите в Content-aware preview proxy ladder.
7. Где используется
- Content-aware preview proxy ladder — классифицирует VideoHeight источника в ветви UHD, HD, SD и sub-SD и отдаёт пин default Unknown в путь notify.
8. Антипаттерны
- Забытая ветвь Default ELSE. Без выхода default пакеты, чьи свойства не совпали ни с одной группой, отбрасываются молча. Всегда задавайте ветвь default и подключайте её в notify или карантинную цепочку, чтобы исход процесса был полным.
- Перекрывающиеся группы решений в неверном порядке. Когда две группы могут совпасть с одним пакетом, выигрывает самая верхняя. Постановка свободной группы над строгой делает ветвь строгой группы мёртвым кодом. Упорядочивайте от самой специфичной к самой общей.
- Маршрутизация по невыбранному на анализаторе пину. mdecide читает те же метаданные-пины, что и decide; если analyze выше по потоку не перенёс свойство в свои Selected PINs, сравнение молча проваливается, и пакеты уходят в ветвь default. Проверьте выбор анализатора перед сохранением.
- Подключение каждой ветви в одну и ту же плитку ниже по потоку. Когда всем ветвям нужна одна цепочка ниже по потоку, решение не делает полезной работы — сверните его в одну линейную цепочку. mdecide оправдан, только когда низ каждой ветви различается.