Record H264 comparison and plugin 7.0.7 rollout verification

This commit is contained in:
2026-10-13 00:12:48 +02:00
parent a7e44efdf7
commit e942cbccc5
6 changed files with 3490 additions and 0 deletions
+10
View File
@@ -121,3 +121,13 @@ Kod zawiera opcję „Preferuj H264 przy transkodowaniu telewizji w przeglądarc
Moduł window zawęża klon profilu transkodowania w `appHost.getDeviceProfile(item, options)` do H264 wyłącznie dla potwierdzonego kanału Enigma w zwykłym Web. Zachowuje audio, napisy, ograniczenia profilu i DirectPlay. Filmy, inne źródła TV, inny serwer, NativeShell i zdalny odtwarzacz pozostają bez zmiany. Brak H264 w oryginalnym profilu lub niedostępna polityka zachowuje natywną negocjację. Oczekiwanie na politykę jest ograniczone do 2 s; ten odczyt HTTP nie otwiera TV. JS i endpoint muszą być wdrożone razem; nie należy nadpisywać globalnych preferencji Jellyfina.
Wspólny build .NET10/ABI12.2 i testy backendu przeszły, w tym autoryzacja, własność i konfiguracja false. `test-web-bridge.cjs` potwierdził zakres H264, brak mutacji wspólnego profilu, zachowanie audio/warunków, fallback, retry i ochronę przed ponownym instalowaniem wrappera. **Na etapie zapisu tego punktu produkcja nadal używa 7.0.6.0; 7.0.7.0 nie wdrożono.** Próba A/B i kontrola rzeczywistego endpointu pozostają do wykonania po kolejnym sygnale zadania odbiornika. Wynik AV1 nie dowodzi problemu każdego klienta Web ani awarii anteny.
## A/B H264 i wdrożenie — 13.10.2026 CEST
Po kolejnym wyraźnym START zadania odbiornika wykonano pięć minut TVP1 z nowym JS wyłącznie w dwóch izolowanych kontekstach, przy produkcyjnej DLL nadal 7.0.6.0. Raporty `reception-h264-20261012.json` i `reception-h264-summary-20261012.json` używają daty UTC: firstframe 12.10 21:59:14.667 UTC / 23:59 CEST, cleanup 22:04:46.092 UTC / 13.10 00:04 CEST. Wyjście faktycznie H264/AAC 1080p50; polityka podmieniona tylko dla dokładnego ID TVP1. **15/15 kontroli transportu, dwóch odbiorców, audio, wyjścia i zwolnienia źródła PASS.** Pierwszy widz: 297,551 s pomiaru, postęp 295,088 s (ratio 0,992), dropped 1,4%, około 48,855 kl./s nieodrzuconych, trzy oczekiwania / 2,473 s. Drugi: ratio 1,000, dropped 0,1%, około 49,913 kl./s, zero oczekiwań po starcie. Jeden fizyczny klient Jellyfina przez całą fazę dwóch widzów; licznik otwarć 19 nie wzrósł. Końcowo brak klientów OpenWebif i relay 0/0. Oba stanowiska zaliczyły kryterium płynności klienta testowego. Nie jest to gwarancja innych urządzeń ani słyszalnego dźwięku.
Po zakończeniu uzgodnionego okna i potwierdzeniu zera odbiorców wdrożono **7.0.7.0**: DLL i skrypt wtyczki, z wcześniej zatwierdzonym restartem wyłącznie Jellyfina. Backup `/var/lib/jellyfin/decoder-plugin-backups/plugin-only-20261012T220741Z` zawiera poprzednią DLL/manifest oraz JS. Instalator potwierdził aktywną wersję i niezmienione hashe `/etc/default/jellyfin`, `encoding.xml`, wrapperów oraz `index.html/config.json` Web. Nie zmieniono odbiornika ani konfiguracji serwera. Preferencja H264 jest domyślną wartością nowego pola w konfiguracji dodatku; nie zapisywano globalnych ustawień klienta.
`verify.py` sprawdził rzeczywisty endpoint dla zwykłego użytkownika: kanał Enigma true/true, film i brak false/false, użytkownik bez uprawnień TV 403. Preferencje, izolacja, natywna paginacja i admin ACL PASS; 216 kanałów i 38 aktualnych timerów, bez tworzenia nowych timerów przez test. `test-e2e.cjs --ui-only` na produkcyjnej 7.0.7 zakończył się **17/17 PASS**, 500 audycji i 500 grafik w sprawdzanym EPG; nagrania Vu pozostają wyłączone. Po restarcie liczniki relay i dopasowań EPG zaczynają od zera; istniejące grafiki programów pozostały w natywnych danych i przeszły test ładowania. Na tym etapie nie uruchamiano dodatkowej TV po wdrożeniu: krótka kontrola odtwarzania bez podmian wymaga kolejnego uzgodnionego okna. W przeglądarkach z wcześniejszym JS należy wymusić odświeżenie (Ctrl+F5).
Parametr `--frame=<plik.png>` w próbie ciągłej może zapisać jeden kadr aktywnego wideo dla kontroli wizualnej. Jest opcjonalny; sam licznik klatek nie potwierdza obrazu na ekranie człowieka ani jakości odsłuchu.
+109
View File
@@ -0,0 +1,109 @@
{
"checked_utc": "2026-10-12T22:09:18.893Z",
"mode": "ui",
"checks": [
{
"name": "two isolated users can sign in",
"status": "PASS",
"evidence": {
"users": 2,
"plugin": "7.0.7.0"
}
},
{
"name": "anonymous page requires login",
"status": "PASS"
},
{
"name": "complete channel list and logos",
"status": "PASS",
"evidence": {
"channels": 216,
"loaded_logos": 36
}
},
{
"name": "search filters and restores channels",
"status": "PASS"
},
{
"name": "favorites persist and synchronize natively",
"status": "PASS"
},
{
"name": "hide applies to native channels and is isolated per user",
"status": "PASS",
"evidence": {
"mine": 215,
"other": 216
}
},
{
"name": "restore hidden channel",
"status": "PASS"
},
{
"name": "custom order persists in native API",
"status": "PASS"
},
{
"name": "EPG renders actual programmes",
"status": "PASS",
"evidence": {
"programmes": 500
}
},
{
"name": "EPG image links exist and load",
"status": "PASS",
"evidence": {
"images": 500
}
},
{
"name": "default preference persists after reload",
"status": "PASS"
},
{
"name": "native default Channels and explicit Guide",
"status": "PASS"
},
{
"name": "ordinary user cannot read admin diagnostics",
"status": "PASS"
},
{
"name": "external relay access denied",
"status": "PASS"
},
{
"name": "Vu recording provider disabled; timers remain readable",
"status": "PASS",
"evidence": {
"timers": 38
}
},
{
"name": "administrator plugin configuration loads current receiver settings",
"status": "PASS"
},
{
"name": "no uncaught browser errors",
"status": "PASS"
}
],
"plugin": {
"Name": "Enigma2",
"Version": "7.0.7.0",
"ConfigurationFileName": "Jellyfin.Plugin.Enigma2.xml",
"Description": "Provides live TV using Enigma2 PVR as a back-end.",
"Id": "193f29f9ea6c4595a6f655e79d7c590a",
"CanUninstall": true,
"HasImage": false,
"Status": "Active"
},
"finished_utc": "2026-10-12T22:09:59.477Z",
"pass": 17,
"fail": 0,
"blocked": 0
}
File diff suppressed because it is too large Load Diff
+103
View File
@@ -0,0 +1,103 @@
{"utc":"2026-10-12T21:58:50.492Z","type":"isolated_bridge_served","viewer":1}
{"utc":"2026-10-12T21:58:57.013Z","type":"isolated_bridge_served","viewer":2}
{"utc":"2026-10-12T21:59:02.196Z","type":"server","label":"before","elapsed":null,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":18,"ActiveSources":0,"Consumers":0,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-b0b81cc6","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}},{"user":"decoder-reception-3281562c","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}}],"receiver":{"status":200,"jellyfin_channel_rows":0,"rows":[{"ip":"192.168.160.155","name":"TVN 24 HD","ref":"1:0:1:3DD2:640:13E:820000:0:0:0:"},{"ip":"192.168.160.155","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"},{"ip":"192.168.160.155","name":"TVP 2 HD","ref":"1:0:1:C22:1E78:71:820000:0:0:0:"}],"channel_matches":1}}
{"utc":"2026-10-12T21:59:05.028Z","type":"isolated_policy_request","viewer":1,"matched":true}
{"utc":"2026-10-12T21:59:14.667Z","type":"check","name":"viewer 1 one-click decoded start","status":"PASS","evidence":{"seconds":12.47}}
{"utc":"2026-10-12T21:59:16.527Z","type":"server","label":"primary-started","elapsed":1.86,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":1,"Consumers":1,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":1},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-3281562c","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":75,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-b0b81cc6","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}}],"receiver":{"status":200,"jellyfin_channel_rows":1,"rows":[{"ip":"192.168.160.155","name":"TVN 24 HD","ref":"1:0:1:3DD2:640:13E:820000:0:0:0:"},{"ip":"192.168.160.155","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"},{"ip":"192.168.160.155","name":"TVP 2 HD","ref":"1:0:1:C22:1E78:71:820000:0:0:0:"},{"ip":"192.168.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":2}}
{"utc":"2026-10-12T21:59:16.569Z","type":"video","viewer":1,"elapsed":1.9,"video":{"time":1.876559,"frames":40,"dropped":2,"audio_bytes":69657,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.3123999999999993},"events":[{"type":"waiting","at":1791842350487,"time":0,"error":null},{"type":"playing","at":1791842354585,"time":0,"error":null}],"route":"#/video"}
{"utc":"2026-10-12T21:59:21.583Z","type":"video","viewer":1,"elapsed":6.92,"video":{"time":6.925073,"frames":292,"dropped":2,"audio_bytes":233798,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.2638860000000003},"events":[],"route":"#/video"}
{"utc":"2026-10-12T21:59:26.591Z","type":"video","viewer":1,"elapsed":11.92,"video":{"time":11.933131,"frames":541,"dropped":2,"audio_bytes":395180,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.255828000000001},"events":[],"route":"#/video"}
{"utc":"2026-10-12T21:59:31.603Z","type":"video","viewer":1,"elapsed":16.94,"video":{"time":16.944833,"frames":792,"dropped":5,"audio_bytes":557941,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":5.244126000000001},"events":[],"route":"#/video"}
{"utc":"2026-10-12T21:59:36.620Z","type":"video","viewer":1,"elapsed":21.95,"video":{"time":21.96176,"frames":1043,"dropped":5,"audio_bytes":720013,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.227198999999999},"events":[],"route":"#/video"}
{"utc":"2026-10-12T21:59:41.633Z","type":"video","viewer":1,"elapsed":26.97,"video":{"time":26.97434,"frames":1294,"dropped":5,"audio_bytes":881395,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.214618999999999},"events":[],"route":"#/video"}
{"utc":"2026-10-12T21:59:46.635Z","type":"video","viewer":1,"elapsed":31.97,"video":{"time":31.977022,"frames":1544,"dropped":5,"audio_bytes":1043466,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.2119369999999954},"events":[],"route":"#/video"}
{"utc":"2026-10-12T21:59:48.389Z","type":"server","label":"periodic","elapsed":33.72,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":1,"Consumers":1,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":1},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-3281562c","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":53,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-b0b81cc6","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}}],"receiver":{"status":200,"jellyfin_channel_rows":1,"rows":[{"ip":"192.168.160.155","name":"TVN 24 HD","ref":"1:0:1:3DD2:640:13E:820000:0:0:0:"},{"ip":"192.168.160.155","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"},{"ip":"192.168.160.155","name":"TVP 2 HD","ref":"1:0:1:C22:1E78:71:820000:0:0:0:"},{"ip":"192.168.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":2}}
{"utc":"2026-10-12T21:59:53.392Z","type":"video","viewer":1,"elapsed":38.73,"video":{"time":38.733765,"frames":1882,"dropped":5,"audio_bytes":1262091,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":1.4551939999999988},"events":[],"route":"#/video"}
{"utc":"2026-10-12T21:59:58.403Z","type":"video","viewer":1,"elapsed":43.74,"video":{"time":43.745543,"frames":2132,"dropped":5,"audio_bytes":1424162,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.443415999999999},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:00:03.421Z","type":"video","viewer":1,"elapsed":48.75,"video":{"time":48.762651,"frames":2384,"dropped":5,"audio_bytes":1586234,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.426307999999999},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:00:08.427Z","type":"video","viewer":1,"elapsed":53.76,"video":{"time":53.766429,"frames":2634,"dropped":5,"audio_bytes":1748306,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":1.4225299999999947},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:00:13.440Z","type":"video","viewer":1,"elapsed":58.77,"video":{"time":58.782276,"frames":2885,"dropped":5,"audio_bytes":1910377,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.406682999999994},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:00:18.445Z","type":"video","viewer":1,"elapsed":63.78,"video":{"time":63.786593,"frames":3135,"dropped":5,"audio_bytes":2071417,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.4023659999999936},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:00:20.081Z","type":"server","label":"periodic","elapsed":65.41,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":1,"Consumers":1,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":1},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-3281562c","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":52,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-b0b81cc6","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}}],"receiver":{"status":200,"jellyfin_channel_rows":1,"rows":[{"ip":"192.168.160.155","name":"TVN 24 HD","ref":"1:0:1:3DD2:640:13E:820000:0:0:0:"},{"ip":"192.168.160.155","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"},{"ip":"192.168.160.155","name":"TVP 2 HD","ref":"1:0:1:C22:1E78:71:820000:0:0:0:"},{"ip":"192.168.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":2}}
{"utc":"2026-10-12T22:00:25.100Z","type":"video","viewer":1,"elapsed":70.43,"video":{"time":70.440709,"frames":3467,"dropped":5,"audio_bytes":2286290,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.7482499999999987},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:00:30.113Z","type":"video","viewer":1,"elapsed":75.45,"video":{"time":75.455398,"frames":3718,"dropped":5,"audio_bytes":2449248,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.7335609999999946},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:00:35.116Z","type":"video","viewer":1,"elapsed":80.45,"video":{"time":80.458436,"frames":3968,"dropped":5,"audio_bytes":2610389,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":1.730522999999991},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:00:40.126Z","type":"video","viewer":1,"elapsed":85.46,"video":{"time":85.469341,"frames":4219,"dropped":5,"audio_bytes":2773150,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.719617999999997},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:00:45.142Z","type":"video","viewer":1,"elapsed":90.48,"video":{"time":90.483532,"frames":4470,"dropped":5,"audio_bytes":2934532,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.7054270000000002},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:00:50.146Z","type":"video","viewer":1,"elapsed":95.48,"video":{"time":95.487846,"frames":4720,"dropped":5,"audio_bytes":3095914,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":1.7011129999999923},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:00:51.813Z","type":"server","label":"periodic","elapsed":97.15,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":1,"Consumers":1,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":1},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-3281562c","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":52,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-b0b81cc6","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}}],"receiver":{"status":200,"jellyfin_channel_rows":1,"rows":[{"ip":"192.168.160.155","name":"TVN 24 HD","ref":"1:0:1:3DD2:640:13E:820000:0:0:0:"},{"ip":"192.168.160.155","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"},{"ip":"192.168.160.155","name":"TVP 2 HD","ref":"1:0:1:C22:1E78:71:820000:0:0:0:"},{"ip":"192.168.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":2}}
{"utc":"2026-10-12T22:00:59.535Z","type":"isolated_policy_request","viewer":2,"matched":true}
{"utc":"2026-10-12T22:01:07.552Z","type":"check","name":"viewer 2 one-click decoded start","status":"PASS","evidence":{"seconds":10.72}}
{"utc":"2026-10-12T22:01:09.768Z","type":"server","label":"secondary-joined","elapsed":115.1,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":1,"Consumers":2,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":2},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-b0b81cc6","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":104,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-3281562c","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":51,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}}],"receiver":{"status":200,"jellyfin_channel_rows":1,"rows":[{"ip":"192.168.160.155","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"},{"ip":"192.168.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":2}}
{"utc":"2026-10-12T22:01:09.772Z","type":"video","viewer":1,"elapsed":115.11,"video":{"time":115.113613,"frames":5700,"dropped":11,"audio_bytes":3724201,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":0.07534599999999614},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:09.776Z","type":"video","viewer":2,"elapsed":115.11,"video":{"time":2.301304,"frames":40,"dropped":0,"audio_bytes":83450,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":5.303655},"events":[{"type":"waiting","at":1791842464182,"time":0,"error":null},{"type":"playing","at":1791842467406,"time":0,"error":null}],"route":"#/video"}
{"utc":"2026-10-12T22:01:14.780Z","type":"video","viewer":1,"elapsed":120.11,"video":{"time":118.961222,"frames":5894,"dropped":12,"audio_bytes":3862134,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.2277369999999905},"events":[{"type":"waiting","at":1791842469797,"time":115.140231,"error":null},{"type":"playing","at":1791842470941,"time":115.2,"error":null}],"route":"#/video"}
{"utc":"2026-10-12T22:01:14.783Z","type":"video","viewer":2,"elapsed":120.12,"video":{"time":7.308216,"frames":290,"dropped":0,"audio_bytes":246212,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":6.296742999999999},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:19.786Z","type":"video","viewer":1,"elapsed":125.12,"video":{"time":123.969167,"frames":6144,"dropped":12,"audio_bytes":4024210,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.219791999999998},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:19.789Z","type":"video","viewer":2,"elapsed":125.12,"video":{"time":12.315273,"frames":541,"dropped":0,"audio_bytes":407594,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.289686000000001},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:24.793Z","type":"video","viewer":1,"elapsed":130.13,"video":{"time":128.975089,"frames":6394,"dropped":14,"audio_bytes":4185588,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.213870000000014},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:24.796Z","type":"video","viewer":2,"elapsed":130.13,"video":{"time":17.321367,"frames":790,"dropped":1,"audio_bytes":568976,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":5.283592000000002},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:26.455Z","type":"server","label":"periodic","elapsed":131.79,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":1,"Consumers":2,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":2},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-3281562c","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":51,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-b0b81cc6","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":62,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}}],"receiver":{"status":200,"jellyfin_channel_rows":1,"rows":[{"ip":"192.168.160.155","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"},{"ip":"192.168.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":2}}
{"utc":"2026-10-12T22:01:31.465Z","type":"video","viewer":1,"elapsed":136.8,"video":{"time":135.647502,"frames":6727,"dropped":14,"audio_bytes":4401453,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":6.541457000000008},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:31.469Z","type":"video","viewer":2,"elapsed":136.8,"video":{"time":23.994703,"frames":1125,"dropped":1,"audio_bytes":785531,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.610256},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:36.474Z","type":"video","viewer":1,"elapsed":141.81,"video":{"time":140.656175,"frames":6978,"dropped":15,"audio_bytes":4562964,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.532784000000021},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:36.477Z","type":"video","viewer":2,"elapsed":141.81,"video":{"time":29.002894,"frames":1375,"dropped":1,"audio_bytes":947603,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.6020649999999996},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:41.488Z","type":"video","viewer":1,"elapsed":146.82,"video":{"time":145.667843,"frames":7227,"dropped":18,"audio_bytes":4725597,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.5211160000000064},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:41.492Z","type":"video","viewer":2,"elapsed":146.82,"video":{"time":34.016629,"frames":1624,"dropped":1,"audio_bytes":1108295,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.588329999999999},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:46.505Z","type":"video","viewer":1,"elapsed":151.84,"video":{"time":150.686526,"frames":7479,"dropped":18,"audio_bytes":4887668,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.5024330000000248},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:46.507Z","type":"video","viewer":2,"elapsed":151.84,"video":{"time":39.032623,"frames":1876,"dropped":1,"audio_bytes":1271747,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.572336},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:51.510Z","type":"video","viewer":1,"elapsed":156.84,"video":{"time":155.691999,"frames":7728,"dropped":18,"audio_bytes":5048361,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.496960000000001},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:51.513Z","type":"video","viewer":2,"elapsed":156.85,"video":{"time":44.039004,"frames":2126,"dropped":1,"audio_bytes":1433128,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.5659550000000024},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:56.530Z","type":"video","viewer":1,"elapsed":161.86,"video":{"time":160.712512,"frames":7980,"dropped":18,"audio_bytes":5211122,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":5.476447000000007},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:56.533Z","type":"video","viewer":2,"elapsed":161.87,"video":{"time":49.058493,"frames":2376,"dropped":1,"audio_bytes":1595200,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.5464660000000023},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:01:58.145Z","type":"server","label":"periodic","elapsed":163.48,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":1,"Consumers":2,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":2},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-3281562c","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":51,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-b0b81cc6","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":54,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}}],"receiver":{"status":200,"jellyfin_channel_rows":1,"rows":[{"ip":"192.168.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":1}}
{"utc":"2026-10-12T22:02:03.157Z","type":"video","viewer":1,"elapsed":168.49,"video":{"time":167.338757,"frames":8311,"dropped":19,"audio_bytes":5425608,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.850202000000024},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:03.161Z","type":"video","viewer":2,"elapsed":168.49,"video":{"time":55.685453,"frames":2708,"dropped":1,"audio_bytes":1810376,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":5.919505999999998},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:08.164Z","type":"video","viewer":1,"elapsed":173.5,"video":{"time":172.346217,"frames":8559,"dropped":21,"audio_bytes":5585611,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.8427420000000154},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:08.167Z","type":"video","viewer":2,"elapsed":173.5,"video":{"time":60.693591,"frames":2959,"dropped":5,"audio_bytes":1971758,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.911367999999996},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:13.175Z","type":"video","viewer":1,"elapsed":178.51,"video":{"time":177.357419,"frames":8812,"dropped":21,"audio_bytes":5749885,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.831540000000018},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:13.178Z","type":"video","viewer":2,"elapsed":178.51,"video":{"time":65.703929,"frames":3209,"dropped":5,"audio_bytes":2133829,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.901029999999992},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:18.184Z","type":"video","viewer":1,"elapsed":183.52,"video":{"time":182.367203,"frames":9063,"dropped":21,"audio_bytes":5911823,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.821756000000022},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:18.188Z","type":"video","viewer":2,"elapsed":183.52,"video":{"time":70.713987,"frames":3460,"dropped":5,"audio_bytes":2295901,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.8909719999999908},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:23.190Z","type":"video","viewer":1,"elapsed":188.52,"video":{"time":187.37359,"frames":9313,"dropped":21,"audio_bytes":6073247,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.815369000000004},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:23.193Z","type":"video","viewer":2,"elapsed":188.53,"video":{"time":75.718181,"frames":3710,"dropped":5,"audio_bytes":2457283,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.8867779999999925},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:28.210Z","type":"video","viewer":1,"elapsed":193.54,"video":{"time":192.392823,"frames":9564,"dropped":21,"audio_bytes":6235982,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.7961360000000184},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:28.213Z","type":"video","viewer":2,"elapsed":193.55,"video":{"time":80.738507,"frames":3960,"dropped":5,"audio_bytes":2619355,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.866451999999995},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:30.007Z","type":"server","label":"periodic","elapsed":195.34,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":1,"Consumers":2,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":2},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-3281562c","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":51,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-b0b81cc6","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":52,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}}],"receiver":{"status":200,"jellyfin_channel_rows":1,"rows":[{"ip":"192.168.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":1}}
{"utc":"2026-10-12T22:02:36.879Z","type":"check","name":"viewer 2 exit to Channels","status":"PASS","evidence":{"elapsed":202.21}}
{"utc":"2026-10-12T22:02:38.259Z","type":"server","label":"secondary-left","elapsed":203.59,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":1,"Consumers":1,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":1},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-3281562c","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":51,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-b0b81cc6","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}}],"receiver":{"status":200,"jellyfin_channel_rows":1,"rows":[{"ip":"192.168.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":1}}
{"utc":"2026-10-12T22:02:38.262Z","type":"video","viewer":1,"elapsed":203.6,"video":{"time":202.445138,"frames":10067,"dropped":22,"audio_bytes":6560800,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.7438210000000254},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:43.273Z","type":"video","viewer":1,"elapsed":208.61,"video":{"time":207.455876,"frames":10319,"dropped":29,"audio_bytes":6722871,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.733083000000022},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:48.278Z","type":"video","viewer":1,"elapsed":213.61,"video":{"time":212.458439,"frames":10563,"dropped":31,"audio_bytes":6880805,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.730520000000013},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:53.284Z","type":"video","viewer":1,"elapsed":218.62,"video":{"time":217.465721,"frames":10804,"dropped":36,"audio_bytes":7036670,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.723238000000009},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:02:58.299Z","type":"video","viewer":1,"elapsed":223.63,"video":{"time":222.481591,"frames":11069,"dropped":77,"audio_bytes":7208546,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.7073680000000024},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:03:03.313Z","type":"video","viewer":1,"elapsed":228.65,"video":{"time":227.497078,"frames":11320,"dropped":77,"audio_bytes":7370468,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.6918810000000235},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:03:05.090Z","type":"server","label":"periodic","elapsed":230.42,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":1,"Consumers":1,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":1},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-3281562c","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":51,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-b0b81cc6","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}}],"receiver":{"status":200,"jellyfin_channel_rows":1,"rows":[{"ip":"192.168.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":1}}
{"utc":"2026-10-12T22:03:10.130Z","type":"video","viewer":1,"elapsed":235.46,"video":{"time":234.297342,"frames":11660,"dropped":77,"audio_bytes":7589782,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.891617000000025},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:03:15.136Z","type":"video","viewer":1,"elapsed":240.47,"video":{"time":239.320467,"frames":11910,"dropped":78,"audio_bytes":7753233,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":1.8684920000000034},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:03:20.144Z","type":"video","viewer":1,"elapsed":245.48,"video":{"time":244.326955,"frames":12161,"dropped":96,"audio_bytes":7914615,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.862004000000013},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:03:25.151Z","type":"video","viewer":1,"elapsed":250.49,"video":{"time":249.334507,"frames":12412,"dropped":96,"audio_bytes":8076687,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.854452000000009},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:03:30.158Z","type":"video","viewer":1,"elapsed":255.49,"video":{"time":254.340386,"frames":12662,"dropped":96,"audio_bytes":8238759,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.848573000000016},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:03:35.163Z","type":"video","viewer":1,"elapsed":260.5,"video":{"time":259.347239,"frames":12913,"dropped":96,"audio_bytes":8400830,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.8417200000000093},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:03:36.844Z","type":"server","label":"periodic","elapsed":262.18,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":1,"Consumers":1,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":1},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-3281562c","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":51,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-b0b81cc6","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}}],"receiver":{"status":200,"jellyfin_channel_rows":1,"rows":[{"ip":"192.168.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":1}}
{"utc":"2026-10-12T22:03:41.860Z","type":"video","viewer":1,"elapsed":267.19,"video":{"time":266.036838,"frames":13247,"dropped":104,"audio_bytes":8616696,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":5.152121000000022},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:03:46.866Z","type":"video","viewer":1,"elapsed":272.2,"video":{"time":271.049455,"frames":13498,"dropped":106,"audio_bytes":8778768,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.139503999999988},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:03:51.881Z","type":"video","viewer":1,"elapsed":277.22,"video":{"time":276.064773,"frames":13749,"dropped":106,"audio_bytes":8940839,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.124186000000009},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:03:56.888Z","type":"video","viewer":1,"elapsed":282.22,"video":{"time":281.07178,"frames":13997,"dropped":113,"audio_bytes":9100842,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":5.1171790000000215},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:04:01.892Z","type":"video","viewer":1,"elapsed":287.23,"video":{"time":286.076081,"frames":14249,"dropped":113,"audio_bytes":9263603,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.1128780000000233},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:04:07.001Z","type":"video","viewer":1,"elapsed":292.34,"video":{"time":291.092414,"frames":14484,"dropped":113,"audio_bytes":9416020,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.096544999999992},"events":[],"route":"#/video"}
{"utc":"2026-10-12T22:04:09.111Z","type":"server","label":"periodic","elapsed":294.45,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":1,"Consumers":1,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":1},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-3281562c","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":50,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-b0b81cc6","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}}],"receiver":{"status":200,"jellyfin_channel_rows":1,"rows":[{"ip":"192.168.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":1}}
{"utc":"2026-10-12T22:04:14.120Z","type":"video","viewer":1,"elapsed":299.45,"video":{"time":296.96406,"frames":14785,"dropped":210,"audio_bytes":9625678,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.2248989999999935},"events":[{"type":"waiting","at":1791842647019,"time":291.202802,"error":null},{"type":"playing","at":1791842647575,"time":291.264,"error":null},{"type":"waiting","at":1791842651588,"time":295.213946,"error":null},{"type":"playing","at":1791842652361,"time":295.284,"error":null}],"route":"#/video"}
{"utc":"2026-10-12T22:04:20.969Z","type":"check","name":"viewer 1 exit to Channels","status":"PASS","evidence":{"elapsed":306.3}}
{"utc":"2026-10-12T22:04:20.970Z","type":"check","name":"scheduled duration completed","status":"PASS","evidence":{"seconds":304.47,"interrupted":false}}
{"utc":"2026-10-12T22:04:20.970Z","type":"check","name":"second viewer phase completed","status":"PASS","evidence":{"joinAt":100,"leaveAt":200}}
{"utc":"2026-10-12T22:04:42.796Z","type":"server","label":"after-cleanup","elapsed":328.13,"plugin":"7.0.6.0","streams":{"UpstreamConnectionsOpened":19,"ActiveSources":0,"Consumers":0,"LastErrors":["Decoder closed the live stream.","Decoder closed the live stream.","The operation was canceled."],"Channels":[{"Id":"91bf9c0a4fd04dbd9923edcabe61f66a","ServiceReference":"/1:0:1:428D:2BC0:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"dfc8c635289f419987efa5a6e24526e4","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e5b639b9e6e64157acf5213d49cb6a42","ServiceReference":"/1:0:1:C22:1E78:71:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"ce7d07ce0afb421ba784df8342cfde51","ServiceReference":"/1:0:1:3DCD:640:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"e98c970f44a34da5a989debd43b6954f","ServiceReference":"/1:0:1:3A99:514:13E:820000:0:0:0:","Active":false,"Consumers":0},{"Id":"f02288443b7140dcbf34d74d660eb6ae","ServiceReference":"/1:0:1:C23:1E78:71:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-3281562c","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}},{"user":"decoder-reception-b0b81cc6","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}}],"receiver":{"status":200,"jellyfin_channel_rows":0,"rows":[],"channel_matches":0}}
{"utc":"2026-10-12T22:04:42.797Z","type":"check","name":"own relay consumers released after last viewer","status":"PASS","evidence":{"relay_id":"dfc8c635289f419987efa5a6e24526e4","active":false,"consumers":0,"baseline_active":false,"baseline_consumers":0}}
{"utc":"2026-10-12T22:04:46.087Z","type":"check","name":"viewer 1 continuous decoded progress","status":"PASS","evidence":{"samples":54,"progressing_intervals":53,"stalled_intervals":0,"audio_progress_intervals":53}}
{"utc":"2026-10-12T22:04:46.088Z","type":"check","name":"viewer 1 browser and HLS responses","status":"PASS","evidence":{"browser_errors":[],"hls":{"manifests":107,"segments":0,"failed":[],"request_failed":[]}}}
{"utc":"2026-10-12T22:04:46.088Z","type":"check","name":"viewer 1 audio decoding progresses","status":"PASS","evidence":{"progressing_intervals":53}}
{"utc":"2026-10-12T22:04:46.089Z","type":"check","name":"viewer 2 continuous decoded progress","status":"PASS","evidence":{"samples":16,"progressing_intervals":15,"stalled_intervals":0,"audio_progress_intervals":15}}
{"utc":"2026-10-12T22:04:46.090Z","type":"check","name":"viewer 2 browser and HLS responses","status":"PASS","evidence":{"browser_errors":[],"hls":{"manifests":33,"segments":0,"failed":[],"request_failed":[]}}}
{"utc":"2026-10-12T22:04:46.090Z","type":"check","name":"viewer 2 audio decoding progresses","status":"PASS","evidence":{"progressing_intervals":15}}
{"utc":"2026-10-12T22:04:46.091Z","type":"check","name":"sharing uses one physical receiver stream","status":"PASS","evidence":{"before_opened":19,"during":[{"elapsed":115.1,"opened":19,"physical_rows":1,"consumers":2},{"elapsed":131.79,"opened":19,"physical_rows":1,"consumers":2},{"elapsed":163.48,"opened":19,"physical_rows":1,"consumers":2},{"elapsed":195.34,"opened":19,"physical_rows":1,"consumers":2}]}}
{"utc":"2026-10-12T22:04:46.091Z","type":"check","name":"global receiver upstream counter stable during sharing","status":"PASS","evidence":{"before":19,"during":[19,19,19,19],"scope":"Global plugin counter; correlate a failure with other users and channel snapshots."}}
+53
View File
@@ -0,0 +1,53 @@
{
"input": "enigma-diagnostics/jellyfin-decoder-plugin/reception-h264-20261012.json",
"plugin": "7.0.6.0",
"isolated_bridge_override": true,
"channel": "TVP 1 HD",
"first_video_utc": "2026-10-12T21:59:14.667Z",
"finished_utc": "2026-10-12T22:04:46.092Z",
"transport_checks": {
"pass": 15,
"fail": 0,
"unverified": 0
},
"viewers": [
{
"viewer": 1,
"sampled_seconds": 297.551,
"media_progress_seconds": 295.088,
"realtime_ratio": 0.992,
"total_frame_delta": 14745,
"dropped_frame_delta": 208,
"dropped_fraction": 0.014,
"approximate_presented_fps": 48.855,
"waiting_events": 3,
"waiting_seconds": 2.473,
"waiting_median_seconds": 0.773,
"waiting_max_seconds": 1.144,
"waiting_unmatched": 0,
"minimum_buffer_seconds": 0.075,
"audio_decoded_byte_delta": 9556021,
"status": "SMOOTH_TEST_CLIENT",
"scope": "Headless test client only. Frame presentation is approximated; audible sound and other devices are not verified."
},
{
"viewer": 2,
"sampled_seconds": 78.437,
"media_progress_seconds": 78.437,
"realtime_ratio": 1,
"total_frame_delta": 3920,
"dropped_frame_delta": 5,
"dropped_fraction": 0.001,
"approximate_presented_fps": 49.913,
"waiting_events": 0,
"waiting_seconds": 0,
"waiting_median_seconds": null,
"waiting_max_seconds": null,
"waiting_unmatched": 0,
"minimum_buffer_seconds": 2.566,
"audio_decoded_byte_delta": 2535905,
"status": "SMOOTH_TEST_CLIENT",
"scope": "Headless test client only. Frame presentation is approximated; audible sound and other devices are not verified."
}
]
}
+9
View File
@@ -9,6 +9,7 @@ const duration = Number(option('duration', '900')), joinAt = Number(option('join
const channel = option('channel', 'TVP 1 HD');
const reportPath = option('report', 'reception-trial.json');
const bridgeFile = option('bridge-file', null);
const frameFile = option('frame', null);
if (!process.argv.includes('--coordinated') || !Number.isFinite(duration) || !Number.isFinite(joinAt) || !Number.isFinite(leaveAt) || !(0 < joinAt && joinAt < leaveAt && leaveAt < duration)) {
console.error('Requires --coordinated after explicit start signal, and 0 < join < leave < duration (seconds).');
process.exit(2);
@@ -143,6 +144,14 @@ function identifyRelay(snapshot) {
await open(primary); started = performance.now(); report.first_video_utc = new Date().toISOString();
const first = await serverSnapshot('primary-started');
identifyRelay(first);
if (frameFile) {
await primary.page.waitForTimeout(3000);
const handle = await primary.page.evaluateHandle(() => [...document.querySelectorAll('video')].find(v => v.currentTime > 0 && v.videoWidth > 0 && !v.paused));
const video = handle.asElement();
if (!video) throw Error('No active video for visual verification');
await video.screenshot({ path: frameFile }); await handle.dispose();
report.frame_artifact = frameFile; record('frame_saved', { path: frameFile, elapsed: elapsed() });
}
let joined = false, left = false, nextServer = 30, nextProgress = 60;
while (!stopRequested && elapsed() < duration) {
if (!joined && elapsed() >= joinAt) { joined = true; report.secondary_request_seconds = elapsed(); await open(secondary); report.secondary_video_seconds = elapsed(); await serverSnapshot('secondary-joined'); }