×

⊳ Muxer

MPTS · TSDuck · PSI/SI

MPTS мултиплексер & Adaptive Hybrid Statmux

Stream Manager mux събира множество SPTS потоци в един CBR MPTS изход (DVB/IPTV). Adaptive Hybrid Statmux съчетава CBR ядро пълнене с VBR балансирани енкодери за постоянен mux изход.

Архитектура на енкодера

Енкодерите кодират аудио и видео потоци от източници. GStreamer енкодерите използват хардуерни ускорители (NVIDIA NVENC, VAAPI).

Архитектура на мултиплексъра

Мултиплексърът комбинира кодираните потоци в TS/PES/ES формат и прилага EIT/PF таблица.

3. Изходен слой (UDP)

Изходният модул изпраща мултиплексиран поток към мултикаст адрес или записва в файл.

Muxer бюджет

Mux горна лента показва 3 суми със статус цвят. Правила:

Σ avg ≤ 85 % mux.bitrate — средна целева сума по всички канали плюс аудио. Това е mux 'бюджетът'. 15 % статистическият резерв защитава от съвпадение на пиковете. Зелено ≤ 85 %, амбър ≤ 100 %, червено > 100 %.

Максимален битрейт на потока.

Минимален битрейт на потока.

Пример за бюджет

Пример: при 50Mbps общ бюджет и 5 потока, всеки може да получи до 50Mbps.

Диагностика

При ≥ 10 алерти в 60s вспиш уведомление се появява в Mux UI препоръчвайки намаляване на битрейта. Автоматично отстъпване НЕ е активно — оператърът решава.

Монитор на битрейта - следи битрейта на всеки поток в реално време.

-P continuity — проследяване TS continuity броячи. Логира предупреждение при всяко падане (свръхподписване, FFmpeg крах, NIC трептене).

-P pcrverify --jitter-max 500000 — DVB позволява PCR трептене ≤ 500 µs. Алерт = pcradjust не може да следва или източник има счупени PCR.

Muxer грешки

Съвпадение на GOP

Входна загуба на сигнал — един канал станва черен, mux продължава (благодарения на -I null база). Продължителност ~3-8 s за FFmpeg рестарт.

Оверсубскрипшън

PCR Drift

VBV Underrun

Параметри

Параметрите на мултиплексъра включват PCR cadence, PMT PID, EIT настройки, и изходен битрейт.

Muxer препоръка

Препоръчителни настройки: PCR cadence 50ms за HD, 100ms за SD, статмулкс за оптимална ефективност.

Цвят

Покритие

Запомнете, че формулата е приблизителна - реалната ефективност може да варира.

Препоръчителни настройки

Препоръчителни настройки

Muxer statmux

Въведение в статмулкса.

Капацитет — как се разделя битрейта

ASCII диаграма на капацитета.

Практична печалба (10 потоци × 3 Mbps avg, 4 Mbps макс)

Без Adaptive Hybrid Statmux трябва да размериш mux за най-лошия случай Σ макс. С Adaptive Hybrid Statmux размериш около Σ avg + статистически буфер (излъчване съотношение ρ=0.15). Реална печалба ~5 Mbps на 38 Mbps mux, или +1 поток на същия лимит.

CBR - фиксиран битрейт.

Статмулкс изключен.

Статмулкс включен.

Mutex

Mutex - предотвратява едновременни промени.

Pipeline

ASCII диаграма на pipeline.

Размер

Размер на статмулкса.

Пример за размер.

Формула за размер.

Съвети

Поне 1 балансиран поток — без един Adaptive Hybrid маршрутизатор няма нищо да смачка по време на пикове, така че печалба = 0

Музикални и информационни канали са най-добрите кандидати — 90 %+ толеранс към намаляване на битрейта

Съвет 3: Мониторите на битрейта са критични.

Съвет 4: Тествайте с реални потоци.

Работен процес

Стъпка 1: Настройте мултиплексъра.

Превключи Statmux в mux заглавие (жълтен чип). Когато активирана, всички енкодери превключат на VBR и рестартират

Стъпка 3: Стартирайте статмулкса.

Стъпка 4: Мониторите.

Statmux

The mux runs on a native C NIF (single-host, replaced the old gst_mux.py). Each channel has its own CBR encoder; the NIF demultiplexes them, statistically allocates bitrate by scene complexity, pads with NULL packets to a fixed wire cap, and emits one MPTS UDP multicast. This help describes the current UI: chart, headroom slider, diff gauge, channel cards.

Клас: статмукс с обратна връзка в затворен контур с изпреварващ поглед C1 (напреднало подаване) над VBR кодери — принцип на излъчващ статмукс, управляван от сложността на източника.

Архитектура и поток от данни

Architecture diagram

UDP мултикаст SSM, на канал

Кодер

сложност на източника

Цикъл

собствена линия / поток

Алокатор

Буфер

нулево запълване → CBR

CBR кабел при таван

предвиждане на сложна сцена преди спада

измерен кабел — калибриране

целеви битрейт

Всеки канал работи на собствена линия до мукса (отделен кодер + loopback връзка), където всички се сливат в един MPTS мултикаст поток при точно фиксиран битрейт. Разпределителят е централният мозък (1 GenServer на мукс), тик ~0,85 с.

Мозък: обратна връзка + C1 изпреварващ поглед

Разпределителят съчетава два сигнала — предсказване от сложността на източника (напред) и измерения кабел (назад). Това се доближава до излъчващите статмукси, които знаят цената на кадъра преди кодиране.

C1 измерва сложността на съдържанието при декодера — което изпреварва изхода на кодера с времето на латентността на конвейера. Относителната промяна на сложността (корелация r≈0,92 с битове) се прилага към целевия битрейт И В ДВЕТЕ посоки ПРЕДИ кодерът да го произведе: на нарастваща сцена се предварително разпределя (без спад), на падаща се освобождават битове за другите рано.

Измерен кабел (обратна връзка)

Точните битове, излъчени от мукса на поток (броячи от страна на изпращача), калибрират съпоставянето сложност→битрейт и поддържат сумата точно в пула. Котва за реална стойност — предсказването C1 не е перфектно (r 0,92), изходният кабел го коригира.

deliver_t

Претенцията на даден поток е подкрепена от реално произведеното от кодера (× резерв за пикове). Лесен канал не може да натрупа честотна лента, която не може да изразходва — той я освобождава за гладния.

Изравнено качество

Целта не е равен битрейт, а равно качество — непрекъснатото налягане премества битове от висококачествени канали (нисък QP) към нискокачествени (висок QP).

Предсказващо преразпределение

Когато C1 сигнализира спад на канал, честотната му лента се предава на другите в същия тик — те нарастват преди спадът реално да достигне кабела.

Тегло на канал = complexity_q12 × max_bps (сцена действие + по-висок макс ⇒ повече битове).

Бюджет на поток = глобален бюджет × тегло / Σтегла, обхващане [min_bps, max_bps], преизчислено всеки 10 ms.

×headroom % (slider) on the encoder target → Σ real encoder < wire cap ⇒ rings drain empty ⇒ clean video.

Stale-exclusion: a dead input (no receive > 2 s) is dropped from the splitter — its share goes to live channels, not wasted; re-included automatically on recovery.

NULL pad fills the difference to the wire cap (strictly CBR). Encoder feedback: ZMQ complexity → BalanceRouter → set_bitrate.

CBR кабел: буфер + нулево запълване + темпиране

Изходът е точен CBR поток при конфигурирания таван. Три слоя го гарантират:

Постоянен буфер ~1 с

Опашката за изпращане поддържа постоянно ниво от ~1 с на кабела, поглъщащо под-секундни GOP спадове (между I-кадрите). Проверено от записа: 0,5–1 с поглъща 88–91% от спадовете.

Нулево запълване

Когато съдържанието е под тавана, разликата се запълва с нулеви MPEG-TS пакети (PID 0x1FFF). Кабелът ВИНАГИ достига тавана — съвместимост с DVB.

Точно темпиране

Изходящият поток е темпиран към точния таван (busy-spin ABSTIME); ограничение от 12 мс дълг предотвратява наваксване след кратко спиране → без PCR джитър, без пикове над тавана.

Bitrate chart (main)

Stacked area — each channel has its colour (matching its card below). Σ of all + NULL pad = wire cap. Switch the time window 10m / 1h / 24h; pills next to it = event counts (CC / PCR / BR / OVF) for the selected window.

Оцветени ленти

Всеки канал има стабилен цвят; дебелината = мигновеният му битрейт. Накладните разходи (PSI/EIT) са сиви в долната, нулевото запълване е текстурирано бяло в горната.

Линия Таван / Макс

Пунктирана линия в горната = конфигуриран таван (таван на кабела). Съдържание + нулево запълване винаги са под него.

Нулева лента

Пунктирана бяла лента в горната = нулево запълване (свободен капацитет). Колкото по-тънка е, толкова по-пълен е кабелът; изчезва при взискателно съдържание.

Маркери за изпускане

Червени маркери на времевата линия = препълване на опашката за изпращане (изпускане). Нула в стабилно състояние; пакети само при стартиране/наводняване.

Диапазон (30с–30м)

Бутоните превключват времевия прозорец незабавно (от страна на клиента), активният е с сив фон. Графиката натрупва 30 мин. в браузъра.

tip_t

Задържането показва битрейт на канал, QP и качествен индекс в момента (исторически стойности, не на живо).

cap_t

Текущо ниво на регулиране на пула (pool/(pool−trim)). >100% = свръхналягане (запълване на буфера), <100% = подрязване.

Резерв (плъзгач)

Лента на толеранс над тавана — колко да се запази като нулев резерв. 0 = запълване точно до N; положително = по-голям резерв (по-безопасно); отрицателно = леко препълване.

Буфер (изпускания)

Заглавката показва % използване на опашката за изпращане и кумулативни изпускания. Бутонът "изчисти изпусканията" нулира брояча.

gop_t

Обща дължина на GOP за всички канали в мукса (заключена в видео профилите при стартиране). Разпределянето по стена разпространява I-кадрите във времето, за да не се сблъскват.

vbv_t

Размер на VBV буфера на кодера (мс). По-малкият изравнява I-кадрите (добро за канали с движение), по-голямото дава по-подробен I-кадър. По подразбиране 850; отмяна на потока е възможна.

Channel cards (Programs)

The section header has a 'Collapse / Expand all' toggle. Expand a card by clicking it or clicking its colour band in the chart. The left coloured strip with checkbox = channel membership in the mux.

dark = running OK

orange = starting / restarting

сиво + затъмнено = изключено/грешка и квадратче изключено (намерено деактивирано — без алерт)

red + BLINKING = FAULT — channel is in the mux (checkbox ON) but the stream is down/error

PSI/SI таблици (пълен DVB набор)

StatMux генерира пълния набор от задължителни MPEG-TS / DVB таблици директно в NIF мукса — без външен SI вмъкващ елемент. Таблиците са равномерно времеви в потока, за да може STB винаги бързо да получи PSI/SI след пренастройка.

Таблица

psi h_pid

psi h_int

Предназначение / Източник

EIT ↔ EPG: пълна интеграция

EIT (Event Information Table, PID 0x12) не е статична — тя е напълно свързана с EPG системата на приложението. Операторът присвоява на всеки канал в мукса EPG услуга (eit_epg_service_id) и мукса генерира EIT на живо от планираните събития.

Размериране / препоръки

mux.bitrate = wire CBR cap (typ. 37 Mbps for 12 SD/HD channels).

Σ avg ≲ cap (comfortable target) · Σ max oversubscribed 1.5–2× cap (that is the point of statmux — peaks rarely coincide) · Σ min = worst-case floor.

Set per-stream min/avg/max in Stream → Transcoder profile (auto-syncs to mux_input). Action/sport 8–10 M, news/talking head 1–2 M, min never < 800 k.

The headroom slider is a quick live lever of reserve vs. tightness — no restart.

Отношение към излъчващите статмукси

Правим реален статистически мултиплексиране — динамично преразпределение на битове между VBR канали, споделящи фиксиран кабел, с изравняване на качеството. Механично се доближаваме до професионалните заглавни статмукси (изравняване на тавана, буфер 1 с, нулево запълване, GOP/B-кадри, отмяна на минимума).

Какво имаме

CBR кабел при таван · 1 с буфер · пропорционално разпределение на поток · напреднало подаване C1 · изравняване на качеството · предсказващо преразпределение · нулево запълване · точно темпиране.

Където се различаваме

Излъчващият статмукс използва оценката за скорост-изкривяване на кодера (точна цена на кадъра, кодерът е подчинен на разпределителя). Ние използваме сложност на източника C1 (r≈0,92) + VBR кодер, избиращ свой QP — хардуерно ограничение, не дизайнерско. Клас: обратна връзка + изпреварващ поглед вместо чисто напреднало подаване.

TS заглавка

ts h_sym

ts h_fix

Channel red and blinking

In the mux (checkbox ON) but stream down/error → check the source/encoder of that stream. Self-recovers once restored.

Lots of NULL / large grey area

Calm content or low headroom — normal (statmux gain). For tighter utilization raise the headroom slider or per-stream max_bps.

Picture freezes / glitches

Headroom too high (rings not draining) → lower the slider to 80–82 %. Watch the diff gauge / NULL.

After restart streams=0 / all NULL

Mux started before the encoders — self-heal automatically reaches 12 within ~30 s (1 s tick retry). No manual action.

Diff gauge stuck at 0 / chart empty

Няма живи примери (mux спран или енкодери не работят) — проверете както mux така и статуса на потока.

Архитектура

ASCII диаграма

enc_b

nif_b

out_b

Ред 1

Ред 2

Състояния карти

ASCII диаграма

Червена 'cap' линия: wire CBR таван (mux.bitrate) — NULL пълнене до тук.

Оранжева линия 'headroom N%': = cap × headroom плъзгач / 100. Целите на encoder set_bitrate се уцелват тук. Движи се със плъзгача.

Сива площ с черни точки между съдържание и лимит = NULL пълнене (неизползвана резерва). Повече точки = повече резерва.

L4

Разписание

MuxEitAdapter чете събития от EPG системата по услуга, изгражда DVB EIT секции (наименование, час, продължителност, описание, жанр) и ги пакетира на PID 0x12. Версиите на секциите се увеличават при промяна на EPG — STB получава актуализацията.

EIT се инжектира директно в NIF мукса, равномерно В нулевото пространство (1 пакет / N изходящ + p/f периодично) — заменяйки бурния външен tsp каскад. Пик/средно ≈ 1,1, без изгонване на съдържание, тавана се поддържа.

Таблица 0x4E — текущото работещо + следващото събитие. Инжектира се на всеки ≤2 с за незабавна актуалност "сега/следващо" на STB.

Мукса периодично регенерира EIT .bin от EPG (~15 с) — промяна в EPG разписанието достига кабела без рестартиране. Заглавката на мукса показва "EIT ✓" когато е активно.

Таблици 0x50/0x51 — пълното разписание часове/дни напред (сегменти). Разпределено равномерно в потока.

Индикатор

Въведение

ASCII индикатор

Заглавки

HR b1

По-високо (→90): по-стегнато използване на лимит, по-малко NULL.

HR b3

HR b4

Контролира колко от лимита енкодерите цел: енкодер цел = бюджет × headroom% / 100 (оранжева линия в диаграмата). Промени live (ефект от следващ 10 ms тик), съхранено в SystemConfig.

ISO 13818-1

ISO 13818-1 тяло

PCR

PCR тяло

CAT — условен достъп (само при кодиране / ECM).

EIT — информация за събитие (EPG) — от EPG системата, виж по-долу.

NIT — мрежова информация (мрежов ID, наименование, транспортен поток).

PAT — списък на програми (съпоставя PNR → PMT PID).

PMT — за програма: видео/аудио/PCR PID, кодеци, дескриптори.

SDT — имена на услуги и доставчици (какво STB показва в списъка).

TDT/TOT — час и дата + местно отместване (часовник на STB).