138 lines
18 KiB
Markdown
138 lines
18 KiB
Markdown
# MediaBrowser.Plugins.VuPlus
|
||
MediaBrowser Vu+ Plugin
|
||
|
||
Plugin for MediaBrowser to allow it to view channels, browse epg, set and delete timers, play recordings etc.
|
||
|
||
Known Issues / Limitations
|
||
--------------------------
|
||
|
||
Genres are set to 'Unknown'.
|
||
No Series related functionality.
|
||
If paths are entered on the config page then remember to end them with a slash
|
||
|
||
|
||
Setup on Vu+ / Enigma2
|
||
----------------------
|
||
|
||
Ensure openWebIf is installed and running - go into settings and make a note of them so they can be entered on the MediaBrowser Vu+ config page.
|
||
|
||
|
||
Setup on MediaBrowser server
|
||
----------------------------
|
||
|
||
Install Vu+ plugin and restart MediaBrowser server.
|
||
Go to config page for Vu+ and amend default contents as follows (at a minimum, the first 3 must be entered):
|
||
|
||
Vu+ hostname or ip address:
|
||
The host name (address) or ip address of your Vu+ receiver
|
||
|
||
Vu+ streaming port:
|
||
The Streaming port of your Vu+ receiver eg. 8001 / 8002
|
||
|
||
Vu+ Web Interface port:
|
||
The web Interface port of your receiver eg. 8000
|
||
|
||
Vu+ Web Interface username:
|
||
The web Interface username of your receiver (optional)
|
||
Vu+ Web Interface password:
|
||
The web Interface password of your receiver (optional)
|
||
|
||
Use secure HTTP (HTTPS):
|
||
Use HTTPS instead of HTTPS to connect to your receiver
|
||
|
||
Fetch Only one TV bouquet:
|
||
Limit channels to only those contained within the specified TV Bouquet below (optional)
|
||
Vu+ TVBouquet:
|
||
The TV Bouquet to load channels for (optional - only required if 'Fetch Only one TV bouquet' set)
|
||
|
||
Zap before Channel switch (single tuner)
|
||
Set if only one tuner within receiver to make tuner jump to channel
|
||
|
||
Fetch picons from webinterface:
|
||
Set if you want to retrieve Picons from the web interface of the receiver
|
||
Picons Path:
|
||
The local location of your Picons (must end with appropriate slash) eg. C:\Picons\ (optional - only required if 'Fetch picons from webinterface' is not set)
|
||
|
||
Recording Path:
|
||
The location to store your recordings on your receiver (must end with appropriate slash) eg. /hdd/movie/ (optional)
|
||
|
||
Enable VuPlus debug logging:
|
||
Plugin Debugging
|
||
|
||
|
||
## Local Jellyfin 10.11 integration
|
||
See [integration changes and deployment](README.integration.md). Internet EPG artwork, native channel preferences, optional Vu+ recordings provider; local version 6.1.0.0.
|
||
|
||
## Kandydat 7.0.9 — stare wpisy kanałów po migracji, 23.10.2026
|
||
|
||
Odczyt metadanych LiveTvChannel potwierdził stare i nowe wpisy Pulsu/Pulsu 2 oraz stare wpisy WP i TVN24 po zmianie bukietów dekodera. GetChannelStream odświeża listę z dekodera i rozwiązuje zapamiętaną referencję przed zapem, rejestracją relay i wyznaczeniem SID do probe. Najpierw zachowuje dokładny aktualny wpis; potem dopuszcza jednoznaczną zmianę samego typu usługi DVB; migrację SID/TSID rozpoznaje tylko po unikalnej dokładnej nazwie odczytanej z historycznego kanału Enigma2. Brak dopasowania lub niejednoznaczność zachowuje poprzednie zachowanie. Nie zgadujemy HD/SD ani wariantów regionalnych. Natywny identyfikator kanału i preferencje użytkownika pozostają zachowane. Stary i nowy wpis wskazują ten sam adres relay, więc nie otwierają dwóch źródeł. Odczyt bukietu ma wspólny limit 5 s; niedostępny lub zawieszony OpenWebif zachowuje próbę odtwarzania oryginalnej referencji. Anulowanie przez klienta pozostaje obowiązujące.
|
||
|
||
102 kontrole .NET10 przeszły, w tym rzeczywiste GetChannelStream z atrapą OpenWebif i natywnej biblioteki: nowy SID 5105, wspólne metadane i jedno połączenie relay dla starego/nowego Pulsu, anulowanie bez dodatkowego połączenia. Build Release: 0 ostrzeżeń, 0 błędów. Restore korzystał z cache pakietów bez sieci; NuGetAudit wyłączono jedynie dla tego odtworzenia offline. Nie potwierdza to odbioru na zalogowanym urządzeniu.
|
||
|
||
Status na moment zapisu: **7.0.9 przygotowana, niewdrożona**. W produkcji pozostaje 7.0.8. Nowa sesja Wydarzeń 24 rozpoczęta o 16:21:45 UTC dała poprawne serwerowe HLS (248 klatek 1080p / 9,88 s oraz 10,027 s audio). Restart wymagany do podmiany DLL czeka na zgodę dotyczącą tej aktywnej sesji. Osobny brak odkodowanego wyjścia CANAL+4K wymaga diagnostyki źródła ECM i nie jest naprawiany przez ten resolver. Nie zmieniono ustawień Jellyfina, wrapperów, plików Web ani konfiguracji dekodera.
|
||
|
||
### 7.0.9 wdrożona — 23.10.2026, 19:07 CEST
|
||
|
||
Po poleceniu użytkownika „Restart” wdrożono DLL o SHA256 `8db3b3700ef417c591f2361e013e20c601052bd35bc124f449c899183950c986`. Produkcja używa teraz **7.0.9.0**, co potwierdził świeży log załadowania i publiczny health. Konfiguracja serwera/wtyczki, wrappery, moduł Web i 26 plików preferencji pozostały identyczne. Dwa aktywne nagrania dekodera zachowano; nie restartowano odbiornika. Backup: `/var/lib/jellyfin/decoder-plugin-backups/plugin-only-20261023T170741733074Z`; raport `deployment-7.0.9-20261023.json`. Poprzedni akapit opisuje etap przed zgodą i wdrożeniem. Obsługa automatycznej synchronizacji okresowej jest osobnym zadaniem; 7.0.9 sprawdza aktualne referencje przy odtwarzaniu.
|
||
|
||
## 7.0.10 — automatyczna synchronizacja, 23.10.2026
|
||
|
||
Na żądanie użytkownika domyślny harmonogram zadania wtyczki „Synchronizacja kanałów Enigma2” to **start serwera i co 6 godzin**. Dodano w ustawieniach wtyczki przełącznik automatycznej synchronizacji, domyślnie włączony. Godziny można zmienić w natywnych zadaniach zaplanowanych dla tego zadania. Nie zmieniamy globalnego harmonogramu Refresh Guide.
|
||
|
||
Zadanie pobiera bukiety z limitem30s i wykrywa zmiany referencji, nazw, kolejności, numerów lub adresów logo. Przy zmianie albo braku kanałów w natywnej bibliotece uruchamia przez ITaskManager istniejące natywne RefreshGuide (limit5min), dzięki czemu aktualizowana jest właściwa Telewizja i EPG. Nie otwiera strumieni ani nie zmienia tunerów. Pusta lista lub błąd odbiornika nie uruchamia odświeżenia. Gdy RefreshGuide już trwa, synchronizacja jest odkładana do kolejnego wyzwolenia. Lista bez zmian nie wymaga ponownego pełnego odświeżania przewodnika.
|
||
|
||
Przed natywnym odświeżeniem zapisuje własny checkpoint w `data/decoder-integration/channel-sync.json`: stare identyfikatory/ref/nazwy oraz natywne ulubione. Po jednoznacznej migracji aktualizuje natywne ulubione oraz ulubione/ukryte/kolejność we własnych preferencjach użytkowników. Aktualizacje plików preferencji używają tych samych blokad co edytor, zachowują aktualne ustawienia i usuwają duplikaty. Błąd/anulowanie pozostawia checkpoint do ponowienia również wtedy, gdy natywne zadanie usunęło już stare kanały. Bezpośrednich zapisów do bazy Jellyfina nie ma. Stan ostatniej kontroli/synchronizacji jest dostępny w administracyjnym DecoderIntegration/Status.
|
||
|
||
120 kontroli .NET10 przeszło: dokładnie6h/start, zmiany numerów i logo, migracja natywnych i własnych preferencji, rozdzielenie użytkowników, pusta lista, zajęty przewodnik, częściowa awaria i ponowienie, współbieżność, anulowanie oraz wyłączenie funkcji. Źródła ani nagrania produkcyjne nie były używane w tych testach. Stan przed wdrożeniem: produkcja7.0.9, kandydat7.0.10.
|
||
|
||
### 7.0.11 — czas pełnego importu EPG
|
||
|
||
7.0.10 wdrożono o17:27UTC. Zadanie startowe poprawnie uruchomiło natywny RefreshGuide i wprowadziło aktualne referencje Pulsu/Pulsu2/WP/TVN24. Pełny import7dni EPG przekroczył jednak narzucone5min i został anulowany o17:32:55UTC. Własna synchronizacja prawidłowo zgłosiła błąd i zachowała checkpoint216starych wpisów; nie oznaczono importu jako udanego. W7.0.11 usunięto własny limit czasu natywnego zadania — używane są zwykłe zasady jego wykonania i anulowania. Limit30s dotyczy tylko wstępnego pobrania bukietu. Dodano regresję na brak krótkiego MaxRuntimeTicks. Checkpoint i natywne preferencje pozostają zgodne pomiędzy7.0.10 i7.0.11, więc start nowej wersji ponawia migrację z oryginalnego stanu sprzed odświeżenia.
|
||
|
||
### Potwierdzone wdrożenie i pierwszy pełny przebieg7.0.11
|
||
|
||
Wdrożenie17:35:43–17:36:05UTC: świeży loader7.0.11, DLL SHA256 `10107a4e9c81c972f9d98b664ec9f14208f5e1dd95df769760f3540955089ade`, ustawienia serwera i wrappery bez zmian, nagranie dekodera zachowane. NativeRefreshGuide zakończyło7min8s importu o17:43:14UTC, po czym zadanie wtyczki zakończyło się statusemCompleted. Checkpoint odzyskano i wyczyszczono po powodzeniu, zapisano fingerprint oraz czas ostatniej synchronizacji. Przeniesiono4zmienione identyfikatory. Natywna biblioteka ma214unikalnych kanałów (216pozycji bukietu), nowe referencje Puls/Puls2/WP/TVN24 są obecne. Zadanie nie ma nadpisanych wyzwalaczy, więc korzysta ze sprawdzonego domyślnego harmonogramu6h/start z wdrożonej DLL.
|
||
|
||
121 kontroli backendu PASS; build bez ostrzeżeń i błędów. Produkcyjne sprawdzenie: `channel-sync-verification-20261023.json`; odczyt `BaseItems` oraz samychID `Users` służy wyłącznie kontroli metadanych, bez pól uwierzytelniania. 26historycznych plików preferencji nie ma już właścicieli w19bieżących kontach; zachowano je, nie przepisując danych usuniętych użytkowników. Zawierają32odwołania do4starych kanałów; nie są to preferencje bieżących kont. Nie jest to pełny test wszystkich klientów ani naprawa przerywanego braku AV Polsatu Sport1. Użytkownik potwierdził odtwarzanie Polsatu SportExtra1 po ponownym uruchomieniu tego samego kanału; pierwsza próba nie rozpoznała AV po22s, kolejna otworzyła się po5,35s bez zmiany referencji i konfiguracji dekodera.
|
||
|
||
|
||
### 7.0.12 — plansze FFmpeg, podtrzymanie streamu i język użytkownika
|
||
|
||
Nowa opcja `EnableContinuitySlates` utrzymuje otwartą listę HLS podczas oczekiwania na dekoder i po utracie danych. Wtyczka ponawia odbiór co 3–10 sekund, bez kończenia odtwarzania po stronie widza. Po odzyskaniu użytecznego AV wraca do kanału. Granica segmentu 2,24 s odpowiada 112 klatkom przy 50 Hz oraz 105 ramkom AAC 48 kHz. Znaczniki PTS/DTS/PCR są przenoszone na wspólny zegar, a reset liczników TS jest sygnalizowany w pakietach. Początkowy segment enkodera jest pomijany.
|
||
|
||
Jeden producent FFmpeg odbiera dany kanał przez istniejący współdzielony relay. Widzowie mają osobne identyfikatory i języki plansz, ale korzystają z tych samych segmentów obrazu kanału. Playlisty nigdy nie zawierają ENDLIST podczas awarii. Pamięć segmentów jest ograniczona; zatrzymanie ostatniego widza lub brak żądań HTTP przez 60 s zatrzymuje producenta. Dotychczasowy relay może jeszcze zachować fizyczne połączenie przez 15 s. Limit to cztery kanały i 64 widzów jednocześnie. Nagrania w tle nie korzystają z plansz.
|
||
|
||
Wspólny katalog tekstów zawiera polski, angielski, niemiecki, francuski, hiszpański i ukraiński. Web przekazuje język aktualnego interfejsu z `<html lang>`; wtyczka zapamiętuje go krótko dla konkretnego użytkownika i urządzenia. Następne źródła to zapisana preferencja `usersettings/emby/language` bieżącego profilu (jeśli istnieje), Accept-Language klienta i `ServerConfiguration.UICulture`, a ostatecznie angielski. W zbadanej instalacji język web był zapisany lokalnie, a serwer miał UICulture=pl; nie było serwerowych preferencji language. Nie używamy języka metadanych, audio ani napisów jako języka interfejsu. Android TV bez przekazanego języka i bez preferencji profilu korzysta z języka serwera.
|
||
|
||
Moduł web pokazuje stan do pierwszej odtworzonej klatki, umożliwia anulowanie i nie zabija już działającego streamu po upływie pierwotnych 45 s podczas późniejszego buforowania. Opcjonalne `ShowNativeStartupMessages` korzysta z natywnego DisplayMessage wyłącznie na żądającym urządzeniu Android TV; jest niezależne od obrazu FFmpeg. Dla trybu plansz można je wyłączyć, aby nie dublować komunikatów.
|
||
|
||
**Koszt i zakres:** tryb jest domyślnie wyłączony w nowych konfiguracjach. Włączenie normalizuje kanał do H264 1920×1080 50 kl./s, CRF20 z maksimum 12 Mb/s, AAC 48 kHz stereo. Nie zachowuje 4K, HDR, wielokanałowego audio, dodatkowych ścieżek ani napisów. Wymaga programowego kodowania; pomiary dotyczą konkretnego testu. Wyłączenie przywraca dotychczasowy odbiór. Nie zmienia konfiguracji Jellyfina, wrapperów, profili dekodera ani OSCam.
|
||
|
||
Weryfikacja: `Tests` obejmuje izolację użytkowników/urządzeń, uprawnienia, migrację kanałów i wcześniejsze mechanizmy streamu, katalog języków, zegar TS i ograniczoną pamięć przy symulowanej sześciogodzinnej awarii. `test-web-bridge.cjs` sprawdza web bez kont produkcyjnych. `experiments/run-continuity-e2e.py` uruchamia izolowany harness z prawdziwym FFmpeg, dwoma językami i sterowanym źródłem syntetycznym; opcja `--long` utrzymuje awarię 75 s, sprawdza odzyskanie obrazu, rygorystyczny odczyt AV i wszystkie 12 plansz. Nie jest to test fizycznego Android TV ani produkcyjnej sesji Jellyfina. Należy jawnie odróżnić przygotowany kandydat od wersji aktywnej na serwerze.
|
||
|
||
|
||
### 7.0.13 — zachowanie rozdzielczości źródła
|
||
|
||
Na żądanie użytkownika usunięto sztywny limit Full HD z domyślnego trybu plansz. `PreserveSourceResolution` domyślnie wynosi true: filtr producenta nie skaluje ani nie zmienia SAR kanału. Rozdzielczość początkowej planszy nie jest już wpisywana jako rozmiar źródła do natywnej negocjacji Jellyfina. Profile urządzeń mogą nadal ograniczać wyjście zgodnie z możliwościami klienta i jego ustawieniami jakości. Nie ustawiono sztywnego limitu szerokości/wysokości producenta; maksymalny segment zwiększono do 32 MiB, a limit przepływności kodera do 48 Mb/s. Kodek i dźwięk pozostają H264 8-bit, 50 kl./s i AAC stereo — ta zmiana nie dodaje zachowania HDR, oryginalnego kodeka, ścieżek audio ani napisów.
|
||
|
||
Izolowana próba z rzeczywistym FFmpeg potwierdziła przejścia plansza → 720×576, 1280×720, 1920×1080, 2560×1440 i 3840×2160. Odczytano rzeczywiste wymiary zdekodowanych klatek zarówno z MPEG-TS, jak i HLS fMP4, a dla SD również SAR16:15. To test syntetyczny o małej zmienności obrazu, nie dowód wydajności każdego kanału UHD ani test fizycznej aplikacji. Dodatkowa próba z zachowaniem 720p potwierdziła 75 sekund awarii, właściwe języki plansz i odzyskanie obrazu bez ponownego otwierania klienta. Testy wykorzystują również natywny StreamBuilder Jellyfina12.2 do sprawdzenia limitów urządzeń od SD do UHD.
|
||
|
||
7.0.13 jest kandydatem do odrębnego zatwierdzenia; nie nadpisuje automatycznie wdrożonej7.0.11. Wcześniejsza zgoda dotyczyła tylko nocnego Jellytel. Nie aktywować starego kandydata7.0.12 ograniczonego do Full HD.
|
||
|
||
|
||
### 7.0.14 — wybór języka audio i nadawanych napisów
|
||
|
||
Analiza programu zachowuje wszystkie ścieżki audio oraz napisy DVB i teletekstowe, języki ISO639, tytuły oraz oznaczenia default/forced/hearing-impaired. Nazwy kodeków napisów są normalizowane do natywnych DVBSUB/DVBTXT Jellyfina, aby bitmapy nie trafiały do ścieżki ekstrakcji tekstu. Natywne menu odtwarzacza wybiera język i napisy; wtyczka nie wymusza pierwszego audio ani napisów na stałe.
|
||
|
||
Programy z wieloma ścieżkami lub napisami są przepakowywane do jednego, jawnie uporządkowanego MPEG-TS/HLS. Wejście jest mapowane po PID, a wyjście zawsze ma wideo, wszystkie audio i wszystkie napisy. To usuwa problem -1/automatycznego wyboru/-sn w natywnym mapowaniu Jellyfina i nie uzależnia wyboru od pozycji PID danych EPG. Segmenter MPEG-TS zachowuje napisy DVB/teletekst zamiast ograniczać je do WebVTT. Odbiór nadal korzysta ze współdzielonego relay; analiza i widzowie nie otwierają osobnych połączeń do dekodera.
|
||
|
||
Z włączonymi planszami każdy język ma oddzielną ścieżkę AAC stereo. Plansza ma odpowiadające im ścieżki ciszy oraz deklaracje napisów i pustą stronę DVB. Wersje stron, obiektów, regionów i definicji obrazu DVB są porządkowane oddzielnie dla widza, aby pusty napis z planszy nie zablokował późniejszego napisu o tej samej wersji. Powtórne pobranie segmentu używa tego samego planu wersji; bufory i liczba obiektów są ograniczone. Rozmiar obrazu źródła pozostaje zachowany. Po udanej analizie negocjacja dostaje rzeczywiste wymiary kanału, a nie planszy; przy nieznanych metadanych nie zgadujemy rozdzielczości. Tryb nadal koduje wideo do H264 8-bit/50Hz i każde audio do AAC stereo, bez zachowania HDR/5.1.
|
||
|
||
Przy wyłączonych planszach bogaty program jest tylko przepakowywany: oryginalne kodeki wideo/audio, liczba kanałów audio i metadane koloru pozostają zachowane. Ścieżka jednego audio bez napisów zachowuje poprzednie zachowanie. Nagrania w tle nie otrzymują plansz. Przepakowanie zmienia nagłówki kontenera i porządkuje wersje napisów; nie jest kopią binarną całego TS.
|
||
|
||
Lista ścieżek jest wykrywana przed negocjacją odtwarzania. Ostatnie poprawne metadane są trzymane w pamięci maksymalnie6h dla256 źródeł/programów i pozwalają szybko pokazać planszę podczas awarii. Po zimnym starcie bez wcześniejszych danych i przy niedostępnym źródle nie można poznać jego języków: wtedy plansza używa układu zastępczego, a pełny wybór jest dostępny przy ponownym otwarciu po udanej analizie. Nie są wymyślane języki nieobecnych ścieżek. Ten cache nie zmienia harmonogramu synchronizacji kanałów co6h.
|
||
|
||
Kandydat pozostaje oddzielony od aktywnej wersji7.0.11. Nie wdrażać go ani nie rozszerzać nocnego planu Jellytel bez wyraźnego zatwierdzenia użytkownika.
|
||
|
||
Weryfikacja7.0.14:182 kontrole .NET przeszły, build i publikacja bez ostrzeżeń. Rzeczywisty FFmpeg na CT100191 z samodzielnie wygenerowanym MPEG-TS potwierdził dwa różne języki audio (440/880Hz), dwa języki bitmap DVB i dodatkowy strumień teletekstu. Trzej odbiorcy (pełen program, drugie audio, drugie audio z napisami) przetrwali12s utraty źródła, zachowując jedno połączenie fizyczne. Sprawdzono rzeczywiste pakiety wszystkich napisów i różnicę pikseli po nałożeniu bitmapy. Wykryty w próbie konflikt wersji pustej i nadawanej strony DVB został usunięty; same pakiety lub poprawny exit FFmpeg nie były uznawane za dowód obrazu. Dodatkowo powtórzono75s awarii z PL/EN oraz SD/720/1080/1440/2160 w TS i fMP4. Testy pozostają syntetyczne, bez dekodera, kont produkcyjnych i fizycznego Android TV. Teletekst sprawdzono do poziomu wykrywania i przekazywania pakietów; renderowanie konkretnej strony na rzeczywistym kliencie wymaga próby po wdrożeniu. Raporty w projekcie Infra: `enigma-diagnostics/startup-feedback-preview/verified/`.
|