---
title: История версий
url: https://doc2.pstreamer.tv/ru/manual/whats_new/index.html
lang: ru
product: Perfect Streamer
version: 2.0.2.362
---

# История версий

## версия 2.0.2.362 Beta

*06.09.2026*

- **Меню CI-модуля** — у модуля читается его собственное меню: состояние карты, подписки, серийный номер, ввод PIN и сервисные пункты доступны прямо с экрана оборудования — то же, что модуль показал бы на экране телевизора. Там же появился паспорт модуля — изготовитель, код изделия и тип приложения EN 50221, — а его название узел раскодирует, поэтому кириллические названия больше не приходят искажёнными ([Меню модуля](../webui/administration.md#webui-hardware-cam-menu)).
- **Дескремблирование отдельным модулем CI** — модуль в самостоятельном картоприёмнике обслуживает любой вход потока, а не только приём с DVB-карты: через него проходит весь транспорт входа, а список программ лишь указывает, какие из них дескремблировать. Слот назначается на самом входе, и там же видно, каким входом он занят ([CI/CAM на входе потока](../webui/streams.md#webui-stream-io-cam)).
- **Несколько слотов CI на одном входе** — мультиплекс проводится последовательно через несколько модулей, по своему набору программ на каждый слот. Тактовая частота шины CI подбирается по фактическому битрейту входа, а слот, оставшийся занятым, освобождается по запросу с экрана оборудования.
- **Служебные таблицы при демультиплексировании** — таблицы сети и времени и прочие служебные PID исходного мультиплекса подчиняются тем же ключам `mpegts-filter-nit`, `mpegts-filter-tdt`, `mpegts-filter-unnecessary` и `mpegts-filter-cat`, что и на остальных трактах, а не отбрасываются безусловно. Умолчание при этом изменилось: выделенный из мультиплекса поток несёт таблицы сети и времени, которых прежде не нёс, — приёмник за таким потоком, и модуль CI в первую очередь, рассчитывает их видеть. Прежнее поведение возвращает `mpegts-filter-nit`.
- **Разрыв PCR не сбрасывает джиттер-буфер** — вход, поймавший скачок PCR вперёд, пересаживает точку синхронизации прямо в полосе, не сливая очередь, поэтому разрыв обходится одной заминкой вместо повторного набора буфера. Окно, за которым скачок считается разрывом, подбирается автоматически ([Синхронизация](../streamer/spts.md#streamer-spts-sync)).
- **Быстрый старт входа HLS** — живой плейлист подхватывается с хвоста: в очередь идут только последние сегменты, нужные под заданный джиттер, а не всё окно, поэтому вход выходит в эфир с задержкой в пару сегментов вместо целого окна плейлиста. Завершённый плейлист (VOD) по-прежнему воспроизводится с начала.
- **Подавление дребезга аварий** — авария, которая раз за разом поднимается и снимается, сворачивается в один инцидент: узел удерживает её на время затишья и закрывает, только когда дребезг действительно прекратился. Шторм повторов не расходится ни по журналу, ни по внешним каналам. Однажды опознанный дребезжащий источник остаётся таким и после затишья: следующая его серия удерживается с первого же повторения.
- **Правка канала EPG** — у канала задаются идентификатор XMLTV отдельно от отображаемого имени и названия по языкам, а ненужный канал удаляется целиком: вместе с ним уходят его названия, события и членство в наборах.
- Прочие улучшения и исправления ошибок.

## версия 2.0.2.335 Beta

*27.08.2026*

- **Meshwork (мультидомен)** — несколько серверов объединяются в именованные домены, и домен служит границей изоляции: членство узлов, каталог ресурсов и аварии расходятся только внутри своего домена, между доменами не передаётся ничего. Узел может состоять сразу в нескольких доменах, не смешивая их данные. Подробно — [Meshwork](../meshwork/index.md#meshwork).
- **Автообнаружение узлов** — достаточно задать домен и одну точку входа: узлы обмениваются списками соседей и сами достраивают полносвязную сеть прямых связей. Общий доменный ключ вырабатывается автоматически и передаётся только по защищённому каналу — TLS либо доверенный сегмент локальной сети.
- **Распределённая библиотека ресурсов** — выходы UDP, RTP, Pro-MPEG и RIST, multicast-входы UDP, RTP и RIST, а также связи PS1 и SRT публикуются в общем каталоге домена (`/data/library`): единый список multicast-групп, портов, VLAN, SSM-источников и связей точка-точка с указанием узла и потока. По каталогу видно, какие адреса и порты уже заняты, а новый вход подключается прямо из него — выбором потока, уже отдаваемого на другом узле домена, без ручного ввода адреса.
- **Обзор узлов домена** — по каждому узлу видны статус, время последнего контакта, роль, регион, версия сборки, время работы с момента запуска, загрузка CPU, трафик по физическим интерфейсам и число потоков в эфире, а по каждой межузловой связи PS1 или SRT — битрейт, RTT, доля повторов и потерь и вердикт состояния. Упавший узел не пропадает из списка: он держится в нём как недоступный вместе со своей аварией семь суток, а выведенный из эксплуатации убирается из обзора отдельной командой.
- **Работа через NAT** — узел за NAT участвует в домене полноценно и без проброса входящих портов: он подключается сам, публичная точка доступа достраивается по фактически видимому адресу и объявленному порту, а его состояние соседи ретранслируют на один хоп — узел виден и тем, кто не может обратиться к нему напрямую.
- **Имя узла из сертификата** — узел, у которого не задано имя хоста, объявляет соседям имя, покрытое его собственным сертификатом, и только после того, как это имя разрешается обратно в него, а результат проверки виден в данных сервера как `cert-host` и `cert-host-refused`.
- **Автологин связей внутри домена** — для PS1- и SRT-связей между узлами одного домена не нужно заводить логин и пароль на каждую связь: на вызывающей стороне (вход PS1, вход SRT, выход SRT в режиме caller) достаточно включить настройку «Meshwork peer auth», и авторизация выполняется по общему доменному секрету. Подтверждённый узел-партнёр и его поток видны в библиотеке ресурсов и в списке сессий.
- **Low-Latency HLS и MPEG-DASH на CMAF** — новый режим раздачи «OTT / LL-HLS / DASH»: встроенный мультиплексор формирует фрагментированный MP4 (CMAF), поверх которого отдаются MPEG-DASH на `/dash` и Low-Latency HLS на `/llhls`; адаптивные наборы собираются и для этих форматов. Подробно — [Режимы раздачи](../streamer/ott_dvr.md#streamer-ott-modes).
- **Малая задержка LL-HLS** — медиаплейлист дробится на части, применяются блокирующая перезагрузка плейлиста и подсказка предзагрузки, поэтому плеер начинает воспроизведение, не дожидаясь готовности полного сегмента. Сегменты CMAF несут Producer Reference Time, манифест DASH объявляет UTCTiming и целевую задержку, а настройка «Целевая длительность LL-части (ms)» применяется на лету, без перезапуска потока.
- **HTTP/3 (QUIC)** — HLS, MPEG-DASH, LL-HLS и MPEG-TS over HTTP отдаются поверх QUIC на отдельном UDP-порту, с необязательным 0-RTT; переход на QUIC клиент запрашивает параметром `?h3`. QUIC работает только поверх TLS: при выключенном TLS слушатель не поднимается и клиенту не предлагается, а фактическое состояние слушателя видно в данных HTTP-сервера, а не только в настройке. Административные маршруты остаются только на TCP.
- **Выравнивание сегментов по IDR** — сегментер различает IDR и обычный I-кадр: на источниках с closed-GOP каждый сегмент начинается с полноценной точки входа, поэтому плеер открывает поток с любого сегмента; на источниках с open-GOP границей служит ближайший I-кадр.
- **Защита контента (DRM)** — OTT-раздачу потока можно шифровать: HLS AES-128 с ключом от самого сервера или от внешнего key-сервера и с необязательной ротацией по временным окнам, либо MPEG Common Encryption (ISO/IEC 23001-7) по схемам cenc и cbcs для CMAF и DASH. Шифрование выполняется один раз, в момент формирования сегмента, поэтому архив DVR хранится зашифрованным и переживает любое число ротаций ключа. Подробно — [Защита контента (DRM)](../streamer/ott_dvr.md#streamer-ott-drm).
- **Каждое соединение MPEG-TS over HTTP — отдельная сессия** — в списке клиентов потока теперь одна строка на соединение со своим `sess-id`, подробности доступны по `/data/stream/http-clients/<sess-id>`, отдельное соединение закрывается через `POST /data/kick?sess-id=<id>`, а ограничение `max-conn` соблюдается и при значениях больше единицы.
- **DVR (сетевой архив)** — каждый OTT-канал пишется на диск параллельно с раздачей, той же сегментацией и без отдельного рекордера; в режиме низкой задержки архив ведётся двумя линиями, MPEG-TS и CMAF, поэтому запись доступна в том же контейнере, что и живое вещание. Подробно — [DVR](../streamer/ott_dvr.md#streamer-dvr).
- **Воспроизведение архива (VOD)** — архив отдаётся по тем же HLS, DASH и LL-HLS URL, что и живое вещание: `t=<время>` включает режим VOD и задаёт начало окна, `d=<секунды>` — его длительность. Плейлист HLS при этом закрытый, манифест DASH статический, разрывы записи оформлены отдельными периодами; адаптивные наборы воспроизводят архив теми же параметрами.
- **Catch-up по EPG** — вместо `t` и `d` достаточно передать `epg=<время>`: сервер сам находит на привязанном канале EPG передачу, идущую в этот момент, и берёт её начало и длительность как границы окна воспроизведения.
- **Субтитры в архиве** — дорожки WebVTT пишутся на диск вместе с сегментами и воспроизводятся в VOD по тем же URL; окна без реплик места на диске не занимают.
- **Хранилища DVR** — хранилищ может быть несколько, у каждого свой предел заполнения и свой порядок очистки. Глубина архива («Хранение (часы)», до 90 суток) и защищённый минимум задаются отдельно для каждого потока, а очистка по свободному месту не трогает ни защищённый минимум, ни окна открытых VOD-сессий.
- **Монитор DVR** — отдельный экран показывает состояние и заполнение хранилищ, объём и глубину архива по потокам и задержки чтения и записи, а гистограмма покрытия (`/data/dvrstat`) отмечает не только дыры в архиве, но и их причину — обрыв входа, смену PMT, скремблирование, срабатывание очистки. Отсюда же стираются архив отдельного потока и каталоги удалённых потоков.
- **Сбой диска архива не останавливает узел** — ошибка обслуживания архива DVR ограничивается тем хранилищем и тем шагом, где возникла: остальные потоки и остальные линии записи продолжают работать, а пострадавший архив помечается требующим перестроения.
- **Алертер** — новая служба оповещений: каждая авария становится инцидентом, который поднимается, обновляется и снимается автоматически, а дедуплицированный активный набор показывает только то, что происходит сейчас. Серьёзность задаётся единой шкалой — от информационной до требующей вмешательства администратора; такой инцидент снимается подтверждением оператора. Подробно — [Оповещения (алертер)](../meshwork/alerts.md#meshwork-alerts).
- **Каталог кодов аварий** — более пятидесяти типов инцидентов в одном списке: потоки и их входы и выходы, нарушения TR 101 290, ресурсы узла, хранилища и здоровье записи DVR, приём DVB и CI/CAM, транскодеры, OTT, сертификаты и узлы домена. Пороги срабатывания настраиваются в разделе оповещений.
- **Внешняя доставка оповещений** — аварии уходят за пределы веб-консоли: письмом по SMTP (STARTTLS, implicit TLS, AUTH), сообщением в Telegram и запуском произвольной команды, которой инцидент передаётся переменными окружения и полным JSON на стандартный вход. У каждого канала свой выключатель и свой порог серьёзности.
- **Аварии всего домена** — дежурный видит аварии любого узла с любого другого: активный набор расходится вместе с keep-alive и снимается сразу, как только исчез у источника, а у каждой строки указан узел-источник. Аппаратные и системные аварии по умолчанию остаются локальными и поднимаются до доменных отдельной настройкой.
- **Журнал в базе данных** — сообщения сервиса пишутся в SQLite: типизированные записи с источником и уровнем серьёзности, свёртка идущих подряд повторов в одну строку со счётчиком, ограничение хранения по сроку и по объёму. В отличие от активного набора аварий журнал переживает перезапуск.
- **Общий выключатель оповещений** — при выключенном `enable` в настройках оповещателя узел не поднимает собственных аварий и не отправляет наружу ничего, включая аварии, полученные от соседей по домену; в списке и в потоке событий остаются только разнесённые по домену аварии соседей.
- **Тяжесть аварии ввода-вывода — по последствиям** — отказавший вход, который в этот момент не несёт поток, отмечается уровнем Error, а несущий вход, любой выход и отказ при отсутствии эфира — уровнем Critical, причём оценка пересчитывается, пока авария открыта, и следует за переключением на резерв.
- **Цвет во внешних оповещениях** — в текст сообщения добавлен цветовой маркер уровня (красный для ошибок, жёлтый для предупреждений, зелёный для снятия, синий для информационных), а письмо уходит сразу в двух вариантах: обычный текст и HTML с цветной полосой.
- **Оповещения в Telegram переживают шторм** — накопленные аварии объединяются в наименьшее число сообщений, которое допускает предел в 4096 символов, а при ответе об ограничении частоты узел выжидает указанное время и повторяет отправку вместо того, чтобы отбросить оповещение.
- **Задержка оповещения распространена на резервный вход** — предупреждение о работе потока на резервном входе поднимается, только если положение продержалось дольше `alert-delay`, поэтому источник, который проверяется и снова падает, больше не даёт череду поднятий и снятий; при `alert-delay` равном нулю поведение прежнее.
- **Монитор TR 101 290** — непрерывный контроль соответствия входного потока стандарту: единый вердикт («Норма», «Проблема», «Проверка…») и структурный отчёт по приоритетам 1, 2 и 3, где для каждого показателя указаны пункт стандарта, измеренное значение и предел. Мультиплекс MPTS оценивается целиком — по всем PID, программам и таблицам SI. Поток автоматически классифицируется как CBR или VBR, и проверки, осмысленные только при постоянном битрейте, на VBR-источнике не оцениваются и не дают ложных срабатываний. Подробно — [Монитор TR 101 290](../streamer/analyzer.md#streamer-analyzer-tr101290).
- **Дрейф опорного генератора** — систематический уход тактовой частоты источника измеряется линейной регрессией в ppm при допуске ISO/IEC 13818-1 ±30 ppm и выводится отдельной метрикой. Медленный уход отрабатывается плавными микросдвигами точки синхронизации («Компенсация дрейфа синхронизации», включена по умолчанию), поэтому на выходе нет рывков.
- **Модель буфера T-STD** — анализ видеобуфера эталонного декодера по ISO/IEC 13818-1 со счётчиками переполнений и опустошений для MPEG-2, H.264 и HEVC; отсчёт ведётся по часам PCR, а скорость слива подстраивается под фактический битрейт видео. Включается настройкой «Анализировать видеобуфер T-STD».
- **Анализ для вставки рекламы** — разбор секций SCTE-35 с событиями склейки, точки склейки транспортного уровня с настраиваемым упреждением и метки случайного доступа. Данные выводятся в статистике потока при включённом глубоком анализе.
- **Помощник для рекламаций** — по потоку с устойчивыми нарушениями формируется готовое текстовое задание для AI-чата, по которому тот составляет формальное письмо-рекламацию поставщику потока: перечень устойчивых нарушений, измеренные значения, пункты стандарта и влияние на декодер. Задание отдаётся запросом `GET /data/stream/<id>/ai-complaint-prompt`; название потока и адрес источника в текст не включаются.
- **CI/CAM (EN 50221)** — встроенный хост Common Interface: обнаружение модуля, чтение его имени и списка поддерживаемых CA_system_id, выбор программ для дескремблирования и передача CA_PMT по каждой из них. Модуль, совмещённый с DVB-приёмником, дескремблирует выбранные программы принятого мультиплекса инлайн, несколько одновременно; состояние слотов и вердикт по каждой программе видны в интерфейсе.
- **Программный дескремблер BISS-1 / BISS-E** — применяется не только к приёму с DVB-карты, но и к любому входу потока: ключ задаётся на SPTS целиком или по программам мультиплекса и меняется на лету, без перезапуска входа. На приёме с DVB-карты результат дополнительно проверяется по самому потоку, поэтому неверный ключ не выглядит как успешное дескремблирование, а поднимает отдельную аварию.
- **Очистка условного доступа на приёме DVB** — из мультиплекса, принятого DVB-картой, отдельной настройкой адаптера удаляются PID ECM и EMM, а из PMT — CA-дескрипторы открытых программ: дальше по тракту уходит чистый FTA-поток. При потере ключа разметка условного доступа возвращается, чтобы приёмник ниже по цепочке смог заново запросить доступ.
- **Телеметрия транскодера** — по каждому энкодеру публикуется медиаинформация перекодированного выхода: формат кадра, кодек видео, набор аудиокодеков и текущий битрейт, а по каждому процессу — загрузка CPU и занятая память.
- **RTMP и RTMPS** — канал публикуется на любой RTMP-приёмник, включая YouTube и Facebook: видео H.264 или HEVC (HEVC — через Enhanced RTMP) и одна дорожка AAC, для `rtmps://` узел подключается как TLS-клиент. В обратную сторону вход сам забирает поток с источника `rtmp://` или `rtmps://` и ремультиплексирует FLV в MPEG-TS.
- **Бесшовное переключение источника** — при смене активного входа на передатчике приёмные пиры PS1 не переподключаются: нумерация и метки времени остаются непрерывными, всплеск очереди гасится отбрасыванием самых старых пакетов, а пропуск добирается штатной ретрансмиссией.
- **Адаптивная ретрансмиссия PS1** — приёмник измеряет фактический RTT до передатчика и сам подстраивает под него интервалы повторных запросов; измеренный RTT, текущий интервал перезапроса и признак слишком малой задержки выведены в статистику связи. Задержка приёмного тоннеля задаётся напрямую в миллисекундах вместо прежнего множителя от RTT.
- **Состояния «Переподключение» и «Действие администратора»** — потерявший источник вход или выход переоткрывается на месте и остаётся в состоянии «Переподключение» на всё время попыток, поднимая одно предупреждение на эпизод вместо сообщения на каждую попытку. Причину, которую повтором не устранить — занятый порт, отсутствующий интерфейс, данные не MPEG-TS, отказ SRT по шифрованию, — узел переводит в состояние «Действие администратора» с удерживаемым оповещением, а правка настроек применяется сразу.
- **Дата последней ошибки** — рядом с текстом последней ошибки входа или выхода публикуется её время (`last-error-ts`, то же поле есть и в потоке событий), поэтому давнюю причину, оставшуюся на приостановленном входе, видно отдельно от текущего сбоя.
- **Диагноз при непригодном содержимом входа** — сообщение о нарушении синхронизации MPEG-TS называет вероятную причину: пакеты найдены, но смещены на известное число байт, либо структуры MPEG-TS нет вовсе, и для входов PS1 и Pro-MPEG добавляется подсказка о парольной фразе шифрования.
- **Фактический размер приёмного буфера** — вход публикует `socket-buffer-actual`, размер, который выдало ядро, тогда как `socket-buffer-size` остаётся лишь запросом и урезается системным пределом, поэтому расхождение теперь видно сразу, а не проявляется потерями на высоком битрейте.
- **MPTS-мультиплексор: исходная идентичность** — программы могут сохранять свои исходные PID, а порядок программ в PAT, SDT и NIT задаётся вручную, поэтому мультиплекс переносится на **Perfect Streamer** без смены идентичности потока для приёмного оборудования. Программы с TS-скремблированием переносятся с исходными метками времени.
- **Автоматическая нумерация PID для SPTS** — `enable-autopid` вместе с `autopid-base` переносит всю программу в предсказуемое окно из 64 идентификаторов, начиная с PMT и далее видео, аудио и остальные элементарные потоки в порядке исходной таблицы; программа, не поместившаяся в окно, целиком остаётся с исходными PID.
- **Размер датаграммы задаётся на всех выходах** — настройка `packets` теперь применяется не только на SRT, но и на выходах UDP, RTP, Pro-MPEG и RIST, а на выводе в файл и в стандартный поток задаёт размер записываемого блока. Значения по умолчанию совпадают с прежним поведением, поэтому конфигурация, в которой ключ никогда не задавался, не меняется; сохранённое значение, отличное от умолчания, прежние сборки игнорировали, и теперь оно вступает в силу с первым же перезапуском — проверьте его до обновления.
- **Интеграция с внешним биллингом** — каждая зрительская сессия авторизуется во внешней биллинг- или CRM-системе, удерживается периодической ре-авторизацией и по завершении сообщается ей же: жизненный цикл Start / Interim / Stop в стиле RADIUS, отзыв подписки сбрасывает сессию посреди просмотра. Охвачены OTT, пиринг PS1 и выходы SRT, а сам биллинг подключается шаблонами запроса и разбора ответа, без доработки ПО.
- **Встроенный клиент ACME (Let’s Encrypt)** — выпуск и автоматическое продление сертификатов для веб-сервера, HTTP/OTT-сервера и EPG-сервера: сертификат заказывается на каждое настроенное имя хоста, продление проверяется ежедневно, при неудаче поднимается авария. Поддерживаются произвольный удостоверяющий центр и внешняя привязка учётной записи, а новый сертификат применяется без перезапуска сервиса.
- **Быстрая остановка сервиса** — остановка больше не ждёт клиента, переставшего читать данные: под той же нагрузкой узел завершается за 2–4 секунды вместо примерно минуты, поэтому перезапуск занимает секунды и не оставляет эфир без вещания.
- **pss_lic 2.0** — консольная утилита управления лицензией переведена на команды `apply`, `c2v`, `fingerprint`, `recipient`, `keys`, `detach`, `rehost` и `cancel` с длинными ключами: она применяет присланное обновление лицензии, выгружает состояние ключа для поставщика и переносит лицензию с узла на узел, в том числе временно, а любой файл принимает со стандартного ввода и выдаёт в стандартный вывод. Подробно — [pss_lic](../toolkit/pss_lic.md#toolkit-pss-lic).
- **Правка файла конфигурации вручную** — вместе с документацией публикуется схема JSON Schema для `pss.json` (строгая и совместимая) и пошаговое руководство по правке и переносу файла: конфигурацию остановленного узла разрешено править напрямую и переносить между установками и версиями, проверив результат по схеме, тогда как прежде единственным поддерживаемым способом был HTTP API. Подробно — [Файл настроек pss.json](../extras/config_file.md#extras-config-file).
- **Новый веб-интерфейс** — управление узлом переведено на новую консоль, которая открывается по адресу узла (путь `/admin`): обзор, потоки, мониторинг системы, DVB, DVR, транскодеры, клиенты, журнал, аварии и все настройки сервера. Отдельные схемы показывают топологию домена Meshwork и тракт выбранного потока от входов до выходов. Прежний интерфейс сохранён по адресу `/classic`. Подробно — [Веб-интерфейс](../webui/index.md#webui).
- **Единый вход в домене** — учётной записи можно разрешить автовход: после одного входа по паролю браузер 14 дней открывает панель этого узла без формы входа и переживает перезапуск. Переход по ссылке из этой панели передаёт сеанс на соседний узел домена, если выполнены условия перехода ([Веб-сервер и учётные записи](../webui/administration.md#webui-web-server)); набранный вручную адрес соседа сеанса не передаёт. Скрипт или сторонняя панель предъявляют тот же ключ заголовком `X-Auth-Token` или параметром `auth-token`, а администратор отзывает автовход сразу во всём домене.
- **CORS для административного API** — узлы одного домена Meshwork разрешены без всякой настройки, остальные источники перечисляются в `web-server/cors-origin` (значение `*` разрешает любой источник, `none` выключает механизм), поэтому интерфейс одного узла обращается к API другого; кросс-доменный запрос обязан нести токен явно — cookie и Digest в нём не действуют.
- **Токен своей сессии** — `GET /data/auth-token` возвращает клиенту его собственный токен и абсолютный срок действия, а в `/data/server` добавлено поле `web-login-expires`, поэтому интерфейс показывает, до какого момента действителен вход, не читая сам токен.
- **Завершение сессии автологина** — `POST /data/auth-tokens/revoke?login=<login>` закрывает все действующие сессии учётной записи, а `?id=<hex>` — одну по идентификатору из списка сессий; в ответе приходит число закрытых сессий, и отзыв расходится по всему домену.
- **Причина отказа при переходе на соседний узел** — если переход не дал автоматического входа, узел возвращает в адресе параметр `jump` со значением `no-session`, `foreign-domain`, `autologin-off` или `token-refused`, вместо того чтобы молча показать форму ввода пароля.
- **Обновление в реальном времени** — узел отдаёт своё состояние потоком событий на `/data/events`: при подключении приходит полный снимок, дальше раз в секунду обновляются кадры потоков, системных ресурсов, клиентов и DVB-адаптеров, а аварии и смены состояния приходят событиями. Интерфейс и внешние панели работают без периодического опроса.
- **Контекстная справка** — каждый экран и каждое важное окно нового интерфейса снабжены вызовом справки, который открывает раздел документации именно по тому, что сейчас открыто: общая кнопка справки — для экрана, кнопка «?» в заголовке окна — для этого окна. Раздел открывается на языке интерфейса.
- **Языки, темы и раскладки** — интерфейс переведён на шесть языков (русский, английский, немецкий, французский, испанский, португальский), поддерживает светлое и тёмное оформление и сам подстраивает плотность раскладки под телефон, планшет, рабочую станцию и видеостену.
- **Доступ без ограничения по числу подключений** — у лимитов подключений получателя появилось третье состояние «Без ограничения» рядом с «Протокол запрещён» и «Не более» с числом; прежде неограниченный доступ изображали заведомо большим числом. Ноль по-прежнему означает запрет протокола, поэтому смысл сохранённых настроек после обновления не меняется. Подробно — [Пользователь: добавление и изменение](../webui/configure.md#webui-user-editor).
- **Правка доступа к потокам не задевает посторонние сессии** — добавление потока в список разрешённых и возврат к пустому списку не разрывают ни одной сессии, а сужение списка закрывает сессии PS1 и SRT только на тех потоках, которые из него ушли. Прежде любая правка списка отключала запись целиком по всем протоколам.
- **Активация лицензии из веб-интерфейса** — на экране «Лицензия» появился раздел «Активация»: выгрузка состояния ключа для поставщика — файлом C2V или в буфер обмена — и применение присланного ключа V2C файлом или вставкой текста. Применение ключа перезапускает узел. Подробно — [Лицензия](../webui/administration.md#webui-license).
- **Предупреждение об истечении лицензии** — узел поднимает аварию за две недели до конца срока и повышает её до требующей вмешательства, когда срок истёк. Авария расходится по домену, поэтому истекающую лицензию соседа видно с любого узла ([Оповещения (алертер)](../meshwork/alerts.md#meshwork-alerts)).
- **Неподлинная лицензия останавливает узел** — узел, чья лицензия признана неподлинной, поднимает аварию, требующую вмешательства администратора, перезапускает службу, и запуск отклоняется: служба остаётся остановленной, пока на узле не окажется подлинная лицензия. Авария расходится по домену ([Оповещения (алертер)](../meshwork/alerts.md#meshwork-alerts)).
- **Откат на последнюю рабочую конфигурацию** — узел хранит копию настроек, с которыми в прошлый раз стартовал начисто, и при неприемлемом `pss.json` поднимается на ней — со всеми своими потоками, а не на настройках по умолчанию, в которых потоков нет. Архив отвергнутых файлов приведён в порядок: имена по UTC, номерной суффикс вместо перезаписи при двух отказах в одну секунду, двадцать последних копий; путь архивной копии авария называет прямо. Подробно — [Поведение при старте и ошибках конфигурации](../install/files.md#startup-config-errors).
- **Приоритет входов правится мышью и с клавиатуры** — администратору входы потока переставляются перетаскиванием или сочетаниями `Alt+↑` и `Alt+↓`, на вкладке «Входы» редактора и в раскрытой строке списка потоков (на телефоне порядок только показывается); добавленный вход всегда встаёт последним и не подменяет собой основной ([Потоки](../webui/streams.md#webui-streams)).
- **Номер входа — его место в списке резервирования** — один и тот же номер стоит теперь в строке потока, в раскрытой строке, в редакторе и в тексте оповещения. Входы с одинаковым значением приоритета сохраняют порядок записи и при последующих правках настроек ([Резервирование источников](../streamer/spts.md#streamer-spts-reservation)).
- **Отказ оставленного входа читается как история** — вход, с которого поток ушёл на резерв, останавливается, но причину сохраняет: интерфейс показывает её приглушённой строкой с возрастом, а не как текущий сбой, и оповещение об ошибке этого входа снимается. Причина при этом своя, транспортная, если вход успел сообщить её сам ([Резервирование источников](../streamer/spts.md#streamer-spts-reservation)).
- **Сортировка списка клиентов** — на экране «Клиенты» заголовок колонки сортирует список: числовые колонки открываются по убыванию, текстовые — от А к Я, третье нажатие возвращает порядок узла. Сортируется весь найденный список, а не показанная страница ([Клиенты](../webui/monitor.md#webui-clients)).
- **Переход к потоку с экрана транскодеров** — в строке декодера и каждого энкодера появилась кнопка, открывающая список потоков на нужном потоке. Доступна в любой роли ([Транскодеры](../webui/monitor.md#webui-transcoders)).
- **Программа демультиплексора выбирается из списка и для DVB-адаптера** — работающий адаптер публикует свой мультиплекс, и поле «PNR» предлагает его программы с именами, включая внутренние программы T2-MI под составными номерами ([Демультиплексор (demuxer)](../webui/io/internal.md#webui-io-demuxer)). Адаптер у входа `dvb` тоже выбирается по имени, а не вводится номером записи ([DVB-адаптер (dvb)](../webui/io/local.md#webui-io-dvb)).
- **Приём DVB больше не зависит от сборки** — тип входа `dvb` и раздел DVB-адаптеров доступны на любом узле; единственное условие — обнаруженный фронтенд и драйвер, который даёт службе его открыть ([DVB-приёмник](../streamer/dvb.md#streamer-dvb)).
- **Сканер DVB уступает тюнер настроенному адаптеру** — применять найденный мультиплекс можно, не дожидаясь конца прохода: адаптер забирает тюнер и поднимается примерно через секунду, а сканирование заканчивается отменённым, сохраняя свои результаты на экране. Проход останавливается кнопкой «Стоп» и закрытием окна ([Сканирование](../streamer/dvb.md#streamer-dvb-scan)).
- **Панели обзора узла — по наличию подсистемы** — «Транскодеры» и «DVB-адаптеры» на обзоре показываются там, где есть само оборудование или экземпляры либо есть что доложить об отказе. На узле без транскодеров и без тюнера этих панелей нет, и входа в их разделы с обзора тоже ([Обзор узла](../webui/monitor.md#webui-overview)).
- **Адреса интерфейсов в системном мониторе** — карточка «Сеть» и графики истории подписаны адресом IPv4 интерфейса, если узел его сообщает, включая вложенные VLAN ([Системный монитор](../webui/monitor.md#webui-system)).
- **Путь хранилища DVR пишется без завершающего разделителя** — интерфейс и HTTP API такое значение отклоняют: два написания одного каталога прошли бы проверку уникальности как два разных хранилища ([Хранилища DVR](../webui/administration.md#webui-dvr-storages)).
- **Пакету нужна служба защиты 10.33 или новее** — **pstreamer** поставляет библиотеки системы защиты нового поколения, и более старый **aksusbd** их не принимает ([Требования к системе](../install/requirements.md#install-requirements)). Служба лежит в том же репозитории и ставится вместе с пакетом, но обновление её необратимо, независимо от типа ключа — порядок и последствия описаны на страницах установки ([Установка на системы семейства RHEL](../install/rhel.md#install-rhel), [Установка на системы семейства Debian](../install/debian.md#install-debian)).
- **Явный выбор PLP на DVB-T2** — у поля «Stream id (ISI/PLP)» появилось значение «авто» (-1): фильтр не применяется, тюнер берёт поток по умолчанию драйвера, и новый адаптер создаётся именно таким. Явный ноль стал при этом настоящим выбором нулевого потока, а не «не задано», поэтому адаптер, у которого ноль сохранён в настройках, после обновления узла станет принимать только его ([Адаптеры](../streamer/dvb.md#streamer-dvb-adapter)).
- **Сканер находит PLP** — поле «Проверять PLP до» перебирает PLP на транспондерах DVB-T2 и выводит каждый найденный отдельной строкой со своим списком программ; номер переносится в созданный адаптер, а в статистике адаптера появилась строка «PLP / ISI» ([Сканирование](../streamer/dvb.md#streamer-dvb-scan)).
- **Поиск в справочниках сканера** — сотни спутников и региональных диапазонов отсортированы по названию и фильтруются строкой поиска; уже выбранная строка из списка не исчезает, что бы ни было набрано ([Сканирование DVB](../webui/monitor.md#webui-dvb-scan)).
- **Исправление ссылки на PCR в PMT** — новая настройка MPEG-TS для источников, у которых таблица не объявляет пригодного PCR: узел объявляет в PMT тот PID, на котором PCR действительно передаётся ([Модификация потока](../streamer/spts.md#streamer-spts-modify)).
- **Восстановление джиттер-буфера после просадки источника** — вход, переживший остановку источника, больше не остаётся с почти пустой очередью, передавая на выходы каждую следующую заминку: узел один раз перестраивает буфер, ценой единственного разрыва ([Синхронизация](../streamer/spts.md#streamer-spts-sync)).
- **Режим управления битрейтом видеокодера** — у транскодера появился выбор между постоянной скоростью и двумя переменными режимами: заданное число трактуется как средний битрейт (пики доходят до полутора его величин) либо как жёсткий потолок (средняя скорость составляет две трети от него). Число при этом остаётся одно — второй предел кодер выводит сам из фиксированного отношения пика к среднему 1,5. В переменных режимах кодер перестаёт добивать элементарный поток, поэтому экономия полосы получается только там, где поток-приёмник не выравнивает битрейт обратно ([Настройки кодера](../streamer/transcoder.md#streamer-transcoder-encoder)).
- **Перезапуск транскодера объясняется в журнале** — каждый перезапуск дочернего процесса называет свою причину и код выхода уровнем «Уведомление», а не молча в трассировке. Кроме того, узел перестал бесконечно переоткрывать канал, который не отвечает: после двух неудачных попыток он запрашивает новый процесс ([Контроль работы](../streamer/transcoder.md#streamer-transcoder-monitor)).
- **Удалённый поток виден в открытом редакторе** — если поток удалён с узла, пока открыт его редактор или схема обработки, узел сообщает об этом отдельной строкой, а сохранение становится недоступным с той же причиной рядом с кнопкой. Прежде у такого потока просто пустели все списки, что выглядело как поток без настроенных входов и выходов ([Настроить поток](../webui/streams.md#webui-stream-editor)).
- **Отказ сохранения называет причину** — вместо одной общей фразы на все случаи форма сообщает, что именно помешало: истёкшее время ожидания ответа, запрет по роли или собственный отказ узла его же словами.
- **Подписи и выбор PID в правилах фильтрации** — каждый номер подписан видом и кодеком, а на мультиплексе — ещё и программой, которой он принадлежит; в строке добавления появился список тех PID, которые источник действительно несёт. Ручной ввод при этом остаётся: транспорт может нести PID, о котором ничего не декодировано ([Редактор входа и выхода](../webui/streams.md#webui-stream-io)).
- **На экранах DVB показан адресуемый номер программы** — у сервиса внутри несущей T2-MI в списке программ адаптера и в его статистике стоит составной PNR, тот же, которым программа адресуется в выборе у демультиплексора, BISS и CAM. Собственный номер внутри несущей на транспондере с зеркальными группами повторяется у каждой несущей и не указывает ни на что ([Статистика адаптера](../webui/monitor.md#webui-dvb-stats)).
- **Слот BISS всегда предлагается списком** — открытые программы попали в него последними, с пометкой `· clear ·`, поэтому на мультиплексе без единой закодированной программы список больше не оказывается пустым: ключ нередко задают заранее, а событийный фид между событиями открыт ([Дескремблирование](../streamer/dvb.md#streamer-dvb-descrambling)).
- **Из статистики потока — к транскодеру и к его источнику** — если активный вход потока создан транскодером, его значение стало ссылкой на экран транскодеров с раскрытой строкой нужного экземпляра, а рядом появилась плашка с именем потока, который этот экземпляр декодирует. Обе ссылки доступны в любой роли ([Статистика потока](../webui/streams.md#webui-stream-stats)).
- **Границы прогонов в журнале** — каждый запуск службы отмечен в ленте отдельной строкой с моментом старта и сборкой, на которой прогон поднялся: у текущего рядом стоит аптайм, у прошедших — сколько прогон проработал и сколько узел простоял до следующего запуска, а завершившийся без штатной остановки помечается особо. Разделитель ставится и при включённом фильтре по важности ([Журналы](../webui/monitor.md#webui-logs)).
- **Предел объёма базы статистики** — базу метрик ограничивает не только окно хранения, но и размер. Узел отчитывается о последней чистке — сколько истории осталось, каков объём базы и сколько заняла чистка — и прямо сообщает, если предел объёма оказался жёстче настроенного окна ([Настройки сервера](../webui/administration.md#webui-server-settings)).
- **Подрезанные при загрузке значения объявляются сразу** — если узел, читая настройки, подтянул значение к допустимому пределу, он сообщает об этом на экране сразу после запуска, а не только строкой в журнале ([Поведение при старте и ошибках конфигурации](../install/files.md#startup-config-errors)).
- **Лицензия устаревшего поколения не принимается** — узел с подлинной лицензией прежнего поколения не запускается и поднимает отдельную аварию. Это не истёкший срок и не подделка: поколение 2 принимается только как временная пробная лицензия, поэтому бессрочная лицензия того поколения отклоняется сразу, а не доживает до даты ([Каталог кодов алертов](../meshwork/alerts.md#meshwork-alert-codes)).
- **Автоматическое заполнение считает цель по содержимому** — в автоматическом режиме битрейта узел отталкивается от фактической скорости содержимого, а не от собственного выхода, поэтому цель больше не ползёт вверх без возврата и опускается обратно, как только содержимое снова умещается в настроенную скорость ([Управление битрейтом](../streamer/spts.md#streamer-spts-bitrate)).
- **Окно компенсации дрейфа соразмерно буферу** — мягкое окно ограничено четвертью целевого размера джиттер-буфера, но не меньше 100 мс: вход со стандартным буфером больше не работает без запаса, компенсация подтягивает синхронизацию раньше, а аварийная перестройка буфера при опустошении наконец срабатывает ([Синхронизация](../streamer/spts.md#streamer-spts-sync)).
- Прочие улучшения и исправления ошибок.
