diff --git a/README.integration.md b/README.integration.md index 48864e2..15c4961 100644 --- a/README.integration.md +++ b/README.integration.md @@ -131,3 +131,9 @@ Po zakończeniu uzgodnionego okna i potwierdzeniu zera odbiorców wdrożono **7. `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=` 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. + +## Końcowe odtwarzanie produkcyjne 7.0.7 — 13.10.2026 CEST + +Po osobnym START zadania odbiornika wykonano uzgodnione 90 s TVP1 z produkcyjną DLL i JS **bez żadnych podmian**. `reception-production-7.0.7-20261013.json`: firstframe 22:14:02.849 UTC / 00:14 CEST, cleanup 22:16:02.627 UTC / 00:16 CEST; **15/15 PASS**. Rzeczywiste H264/AAC, 1920×1080, tor audio dekodowany i licznik rosnący. Główny widz: 82,787 s próbkowania, postęp filmu 82,791 s, około 49,887 kl./s nieodrzuconych, dropped 0,2%, zero waiting po starcie. Drugi: około 49,948 kl./s, zero dropped i waiting w sprawdzonym oknie; ze względu na startup drugi klient był mierzony przez 11,452 s w zaplanowanej fazie 30–60 s. Starty obu, domyślne Kanały i powrót po zatrzymaniu PASS. Jeden fizyczny strumień odbiornika, relay Consumers 1→2→1→0, globalny licznik otwarć pozostawał 1 po restarcie. `reception-production-summary-7.0.7-20261013.json` oddziela kontrolę płynności od transportu. + +Kadr `frame-7.0.7-20261013.png` obejrzano: rzeczywista transmisja wideo, nie picon ani plansza. Nie wykonywano odsłuchu przez człowieka; potwierdzenie audio dotyczy dekodowania. Końcowy niezależny odczyt: aktywna 7.0.7, zero źródeł, zero odbiorców relay, zero tymczasowych kont i zero plików `enigma-probe-*.ts`. Zakończenie przekazano zadaniu odbiornika; nie pozostawiono własnych sesji ani procesów próbnych. Testy TV po tej kontroli są zakończone. Nie sprawdzono w tej fazie wszystkich 216 kanałów, Android TV ani wielogodzinnej stabilności. diff --git a/frame-7.0.7-20261013.png b/frame-7.0.7-20261013.png new file mode 100644 index 0000000..6f1f10c Binary files /dev/null and b/frame-7.0.7-20261013.png differ diff --git a/reception-production-7.0.7-20261013.json b/reception-production-7.0.7-20261013.json new file mode 100644 index 0000000..5126415 --- /dev/null +++ b/reception-production-7.0.7-20261013.json @@ -0,0 +1,960 @@ +{ + "started_utc": "2026-10-12T22:13:31.094Z", + "channel": "TVP 1 HD", + "relay_id": "bd9828873b2f4a1cbbb9853beb9630e5", + "isolated_bridge_override": false, + "schedule_seconds": { + "duration": 90, + "join": 30, + "leave": 60 + }, + "checks": [ + { + "name": "viewer 1 one-click decoded start", + "status": "PASS", + "evidence": { + "seconds": 15.04 + } + }, + { + "name": "viewer 2 one-click decoded start", + "status": "PASS", + "evidence": { + "seconds": 14 + } + }, + { + "name": "viewer 2 exit to Channels", + "status": "PASS", + "evidence": { + "elapsed": 64.5 + } + }, + { + "name": "viewer 1 exit to Channels", + "status": "PASS", + "evidence": { + "elapsed": 95.31 + } + }, + { + "name": "scheduled duration completed", + "status": "PASS", + "evidence": { + "seconds": 92.9, + "interrupted": false + } + }, + { + "name": "second viewer phase completed", + "status": "PASS", + "evidence": { + "joinAt": 30, + "leaveAt": 60 + } + }, + { + "name": "own relay consumers released after last viewer", + "status": "PASS", + "evidence": { + "relay_id": "bd9828873b2f4a1cbbb9853beb9630e5", + "active": false, + "consumers": 0, + "baseline_active": false, + "baseline_consumers": 0 + } + }, + { + "name": "viewer 1 continuous decoded progress", + "status": "PASS", + "evidence": { + "samples": 13, + "progressing_intervals": 12, + "stalled_intervals": 0, + "audio_progress_intervals": 12 + } + }, + { + "name": "viewer 1 browser and HLS responses", + "status": "PASS", + "evidence": { + "browser_errors": [], + "hls": { + "manifests": 36, + "segments": 0, + "failed": [], + "request_failed": [] + } + } + }, + { + "name": "viewer 1 audio decoding progresses", + "status": "PASS", + "evidence": { + "progressing_intervals": 12 + } + }, + { + "name": "viewer 2 continuous decoded progress", + "status": "PASS", + "evidence": { + "samples": 3, + "progressing_intervals": 2, + "stalled_intervals": 0, + "audio_progress_intervals": 2 + } + }, + { + "name": "viewer 2 browser and HLS responses", + "status": "PASS", + "evidence": { + "browser_errors": [], + "hls": { + "manifests": 11, + "segments": 0, + "failed": [], + "request_failed": [] + } + } + }, + { + "name": "viewer 2 audio decoding progresses", + "status": "PASS", + "evidence": { + "progressing_intervals": 2 + } + }, + { + "name": "sharing uses one physical receiver stream", + "status": "PASS", + "evidence": { + "before_opened": 1, + "during": [ + { + "elapsed": 45.97, + "opened": 1, + "physical_rows": 1, + "consumers": 2 + }, + { + "elapsed": 47.41, + "opened": 1, + "physical_rows": 1, + "consumers": 2 + } + ] + } + }, + { + "name": "global receiver upstream counter stable during sharing", + "status": "PASS", + "evidence": { + "before": 1, + "during": [ + 1, + 1 + ], + "scope": "Global plugin counter; correlate a failure with other users and channel snapshots." + } + } + ], + "events": [], + "snapshots": [ + { + "utc": "2026-10-12T22:13:47.808Z", + "type": "server", + "label": "before", + "elapsed": null, + "plugin": "7.0.7.0", + "streams": { + "UpstreamConnectionsOpened": 0, + "ActiveSources": 0, + "Consumers": 0, + "LastErrors": [], + "Channels": [] + }, + "probe_error": null, + "sessions": [ + { + "user": "decoder-reception-d06a6455", + "channel": null, + "transcoding": { + "VideoCodec": null, + "AudioCodec": null, + "IsVideoDirect": null, + "IsAudioDirect": null, + "Framerate": null, + "TranscodeReasons": null + } + }, + { + "user": "decoder-reception-9aaca800", + "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:14:04.561Z", + "type": "server", + "label": "primary-started", + "elapsed": 1.71, + "plugin": "7.0.7.0", + "streams": { + "UpstreamConnectionsOpened": 1, + "ActiveSources": 1, + "Consumers": 1, + "LastErrors": [], + "Channels": [ + { + "Id": "bd9828873b2f4a1cbbb9853beb9630e5", + "ServiceReference": "/1:0:1:3ABD:514:13E:820000:0:0:0:", + "Active": true, + "Consumers": 1 + } + ] + }, + "probe_error": null, + "sessions": [ + { + "user": "decoder-reception-9aaca800", + "channel": "TVP 1 HD", + "transcoding": { + "VideoCodec": "h264", + "AudioCodec": "aac", + "IsVideoDirect": false, + "IsAudioDirect": false, + "Framerate": 65, + "TranscodeReasons": [ + "ContainerNotSupported", + "AudioCodecNotSupported", + "InterlacedVideoNotSupported" + ] + } + }, + { + "user": "decoder-reception-d06a6455", + "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:14:48.818Z", + "type": "server", + "label": "secondary-joined", + "elapsed": 45.97, + "plugin": "7.0.7.0", + "streams": { + "UpstreamConnectionsOpened": 1, + "ActiveSources": 1, + "Consumers": 2, + "LastErrors": [], + "Channels": [ + { + "Id": "bd9828873b2f4a1cbbb9853beb9630e5", + "ServiceReference": "/1:0:1:3ABD:514:13E:820000:0:0:0:", + "Active": true, + "Consumers": 2 + } + ] + }, + "probe_error": null, + "sessions": [ + { + "user": "decoder-reception-d06a6455", + "channel": "TVP 1 HD", + "transcoding": { + "VideoCodec": "h264", + "AudioCodec": "aac", + "IsVideoDirect": false, + "IsAudioDirect": false, + "Framerate": 58, + "TranscodeReasons": [ + "ContainerNotSupported", + "AudioCodecNotSupported", + "InterlacedVideoNotSupported" + ] + } + }, + { + "user": "decoder-reception-9aaca800", + "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:14:50.258Z", + "type": "server", + "label": "periodic", + "elapsed": 47.41, + "plugin": "7.0.7.0", + "streams": { + "UpstreamConnectionsOpened": 1, + "ActiveSources": 1, + "Consumers": 2, + "LastErrors": [], + "Channels": [ + { + "Id": "bd9828873b2f4a1cbbb9853beb9630e5", + "ServiceReference": "/1:0:1:3ABD:514:13E:820000:0:0:0:", + "Active": true, + "Consumers": 2 + } + ] + }, + "probe_error": null, + "sessions": [ + { + "user": "decoder-reception-d06a6455", + "channel": "TVP 1 HD", + "transcoding": { + "VideoCodec": "h264", + "AudioCodec": "aac", + "IsVideoDirect": false, + "IsAudioDirect": false, + "Framerate": 57, + "TranscodeReasons": [ + "ContainerNotSupported", + "AudioCodecNotSupported", + "InterlacedVideoNotSupported" + ] + } + }, + { + "user": "decoder-reception-9aaca800", + "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:15:08.968Z", + "type": "server", + "label": "secondary-left", + "elapsed": 66.12, + "plugin": "7.0.7.0", + "streams": { + "UpstreamConnectionsOpened": 1, + "ActiveSources": 1, + "Consumers": 1, + "LastErrors": [], + "Channels": [ + { + "Id": "bd9828873b2f4a1cbbb9853beb9630e5", + "ServiceReference": "/1:0:1:3ABD:514:13E:820000:0:0:0:", + "Active": true, + "Consumers": 1 + } + ] + }, + "probe_error": null, + "sessions": [ + { + "user": "decoder-reception-9aaca800", + "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.100.191", + "name": "TVP 1 HD", + "ref": "1:0:1:3ABD:514:13E:820000:0:0:0:" + } + ], + "channel_matches": 1 + } + }, + { + "utc": "2026-10-12T22:15:25.724Z", + "type": "server", + "label": "periodic", + "elapsed": 82.88, + "plugin": "7.0.7.0", + "streams": { + "UpstreamConnectionsOpened": 1, + "ActiveSources": 1, + "Consumers": 1, + "LastErrors": [], + "Channels": [ + { + "Id": "bd9828873b2f4a1cbbb9853beb9630e5", + "ServiceReference": "/1:0:1:3ABD:514:13E:820000:0:0:0:", + "Active": true, + "Consumers": 1 + } + ] + }, + "probe_error": null, + "sessions": [ + { + "user": "decoder-reception-9aaca800", + "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.100.191", + "name": "TVP 1 HD", + "ref": "1:0:1:3ABD:514:13E:820000:0:0:0:" + } + ], + "channel_matches": 1 + } + }, + { + "utc": "2026-10-12T22:15:59.915Z", + "type": "server", + "label": "after-cleanup", + "elapsed": 117.07, + "plugin": "7.0.7.0", + "streams": { + "UpstreamConnectionsOpened": 1, + "ActiveSources": 0, + "Consumers": 0, + "LastErrors": [], + "Channels": [ + { + "Id": "bd9828873b2f4a1cbbb9853beb9630e5", + "ServiceReference": "/1:0:1:3ABD:514:13E:820000:0:0:0:", + "Active": false, + "Consumers": 0 + } + ] + }, + "probe_error": null, + "sessions": [ + { + "user": "decoder-reception-9aaca800", + "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 + } + } + ], + "audio_scope": "Decoded byte counter when available; no human audible verification.", + "first_video_utc": "2026-10-12T22:14:02.849Z", + "service_reference": "/1:0:1:3ABD:514:13E:820000:0:0:0:", + "frame_artifact": "enigma-diagnostics/jellyfin-decoder-plugin/frame-7.0.7-20261013.png", + "secondary_request_seconds": 30.16, + "secondary_video_seconds": 44.16, + "secondary_stop_seconds": 62.44, + "playback_elapsed_seconds": 92.9, + "primary_stop_seconds": 92.9, + "finished_utc": "2026-10-12T22:16:02.627Z", + "pass": 15, + "fail": 0, + "unverified": 0, + "viewers": [ + { + "viewer": 1, + "startup_seconds": 15.04, + "samples": [ + { + "utc": "2026-10-12T22:14:07.955Z", + "type": "video", + "viewer": 1, + "elapsed": 5.11, + "video": { + "time": 5.120881, + "frames": 206, + "dropped": 0, + "audio_bytes": 175353, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 4.980078 + }, + "events": [ + { + "type": "waiting", + "at": 1791843236668, + "time": 0, + "error": null + }, + { + "type": "playing", + "at": 1791843242753, + "time": 0, + "error": null + } + ], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:14:12.960Z", + "type": "video", + "viewer": 1, + "elapsed": 10.11, + "video": { + "time": 10.129345, + "frames": 456, + "dropped": 0, + "audio_bytes": 337352, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 2.971613999999999 + }, + "events": [], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:14:17.975Z", + "type": "video", + "viewer": 1, + "elapsed": 15.13, + "video": { + "time": 15.144421, + "frames": 706, + "dropped": 0, + "audio_bytes": 498183, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 3.956538 + }, + "events": [], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:14:22.992Z", + "type": "video", + "viewer": 1, + "elapsed": 20.14, + "video": { + "time": 20.160787, + "frames": 958, + "dropped": 0, + "audio_bytes": 661575, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 4.9401720000000005 + }, + "events": [], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:14:28.006Z", + "type": "video", + "viewer": 1, + "elapsed": 25.16, + "video": { + "time": 25.174385, + "frames": 1209, + "dropped": 0, + "audio_bytes": 823605, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 5.926573999999999 + }, + "events": [], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:14:48.822Z", + "type": "video", + "viewer": 1, + "elapsed": 45.97, + "video": { + "time": 45.991756, + "frames": 2249, + "dropped": 7, + "audio_bytes": 1496686, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 3.109203000000001 + }, + "events": [], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:14:55.264Z", + "type": "video", + "viewer": 1, + "elapsed": 52.42, + "video": { + "time": 52.432635, + "frames": 2571, + "dropped": 8, + "audio_bytes": 1703659, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 5.6683240000000055 + }, + "events": [], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:15:00.275Z", + "type": "video", + "viewer": 1, + "elapsed": 57.43, + "video": { + "time": 57.445776, + "frames": 2822, + "dropped": 8, + "audio_bytes": 1865694, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 3.655183000000001 + }, + "events": [], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:15:08.973Z", + "type": "video", + "viewer": 1, + "elapsed": 66.12, + "video": { + "time": 66.142985, + "frames": 3257, + "dropped": 9, + "audio_bytes": 2147099, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 3.957974000000007 + }, + "events": [], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:15:13.982Z", + "type": "video", + "viewer": 1, + "elapsed": 71.13, + "video": { + "time": 71.151762, + "frames": 3508, + "dropped": 9, + "audio_bytes": 2309882, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 4.949196999999998 + }, + "events": [], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:15:19.000Z", + "type": "video", + "viewer": 1, + "elapsed": 76.15, + "video": { + "time": 76.168919, + "frames": 3759, + "dropped": 9, + "audio_bytes": 2471981, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 5.932040000000001 + }, + "events": [], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:15:24.008Z", + "type": "video", + "viewer": 1, + "elapsed": 81.16, + "video": { + "time": 81.17878, + "frames": 4009, + "dropped": 9, + "audio_bytes": 2633952, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 3.922179 + }, + "events": [], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:15:30.742Z", + "type": "video", + "viewer": 1, + "elapsed": 87.89, + "video": { + "time": 87.911523, + "frames": 4345, + "dropped": 9, + "audio_bytes": 2851535, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 6.189436000000001 + }, + "events": [], + "route": "#/video" + } + ], + "errors": [], + "hls": { + "manifests": 36, + "segments": 0, + "failed": [], + "request_failed": [] + } + }, + { + "viewer": 2, + "startup_seconds": 14, + "samples": [ + { + "utc": "2026-10-12T22:14:48.826Z", + "type": "video", + "viewer": 2, + "elapsed": 45.98, + "video": { + "time": 1.945995, + "frames": 28, + "dropped": 0, + "audio_bytes": 72577, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 5.530964 + }, + "events": [ + { + "type": "waiting", + "at": 1791843278929, + "time": 0, + "error": null + }, + { + "type": "playing", + "at": 1791843286817, + "time": 0, + "error": null + } + ], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:14:55.269Z", + "type": "video", + "viewer": 2, + "elapsed": 52.42, + "video": { + "time": 8.388411, + "frames": 350, + "dropped": 0, + "audio_bytes": 280189, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 5.088548000000001 + }, + "events": [], + "route": "#/video" + }, + { + "utc": "2026-10-12T22:15:00.278Z", + "type": "video", + "viewer": 2, + "elapsed": 57.43, + "video": { + "time": 13.398709, + "frames": 600, + "dropped": 0, + "audio_bytes": 441582, + "width": 1920, + "height": 1080, + "ready": 4, + "paused": false, + "ended": false, + "error": null, + "buffered_ahead": 6.078250000000001 + }, + "events": [], + "route": "#/video" + } + ], + "errors": [], + "hls": { + "manifests": 11, + "segments": 0, + "failed": [], + "request_failed": [] + } + } + ] +} diff --git a/reception-production-7.0.7-20261013.json.jsonl b/reception-production-7.0.7-20261013.json.jsonl new file mode 100644 index 0000000..4e53afd --- /dev/null +++ b/reception-production-7.0.7-20261013.json.jsonl @@ -0,0 +1,39 @@ +{"utc":"2026-10-12T22:13:47.808Z","type":"server","label":"before","elapsed":null,"plugin":"7.0.7.0","streams":{"UpstreamConnectionsOpened":0,"ActiveSources":0,"Consumers":0,"LastErrors":[],"Channels":[]},"probe_error":null,"sessions":[{"user":"decoder-reception-d06a6455","channel":null,"transcoding":{"VideoCodec":null,"AudioCodec":null,"IsVideoDirect":null,"IsAudioDirect":null,"Framerate":null,"TranscodeReasons":null}},{"user":"decoder-reception-9aaca800","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:14:02.849Z","type":"check","name":"viewer 1 one-click decoded start","status":"PASS","evidence":{"seconds":15.04}} +{"utc":"2026-10-12T22:14:04.561Z","type":"server","label":"primary-started","elapsed":1.71,"plugin":"7.0.7.0","streams":{"UpstreamConnectionsOpened":1,"ActiveSources":1,"Consumers":1,"LastErrors":[],"Channels":[{"Id":"bd9828873b2f4a1cbbb9853beb9630e5","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":1}]},"probe_error":null,"sessions":[{"user":"decoder-reception-9aaca800","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":65,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-d06a6455","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:14:07.945Z","type":"frame_saved","path":"enigma-diagnostics/jellyfin-decoder-plugin/frame-7.0.7-20261013.png","elapsed":5.1} +{"utc":"2026-10-12T22:14:07.955Z","type":"video","viewer":1,"elapsed":5.11,"video":{"time":5.120881,"frames":206,"dropped":0,"audio_bytes":175353,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.980078},"events":[{"type":"waiting","at":1791843236668,"time":0,"error":null},{"type":"playing","at":1791843242753,"time":0,"error":null}],"route":"#/video"} +{"utc":"2026-10-12T22:14:12.960Z","type":"video","viewer":1,"elapsed":10.11,"video":{"time":10.129345,"frames":456,"dropped":0,"audio_bytes":337352,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":2.971613999999999},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:14:17.975Z","type":"video","viewer":1,"elapsed":15.13,"video":{"time":15.144421,"frames":706,"dropped":0,"audio_bytes":498183,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.956538},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:14:22.992Z","type":"video","viewer":1,"elapsed":20.14,"video":{"time":20.160787,"frames":958,"dropped":0,"audio_bytes":661575,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.9401720000000005},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:14:28.006Z","type":"video","viewer":1,"elapsed":25.16,"video":{"time":25.174385,"frames":1209,"dropped":0,"audio_bytes":823605,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":5.926573999999999},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:14:47.007Z","type":"check","name":"viewer 2 one-click decoded start","status":"PASS","evidence":{"seconds":14}} +{"utc":"2026-10-12T22:14:48.818Z","type":"server","label":"secondary-joined","elapsed":45.97,"plugin":"7.0.7.0","streams":{"UpstreamConnectionsOpened":1,"ActiveSources":1,"Consumers":2,"LastErrors":[],"Channels":[{"Id":"bd9828873b2f4a1cbbb9853beb9630e5","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":2}]},"probe_error":null,"sessions":[{"user":"decoder-reception-d06a6455","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":58,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-9aaca800","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:14:48.822Z","type":"video","viewer":1,"elapsed":45.97,"video":{"time":45.991756,"frames":2249,"dropped":7,"audio_bytes":1496686,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.109203000000001},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:14:48.826Z","type":"video","viewer":2,"elapsed":45.98,"video":{"time":1.945995,"frames":28,"dropped":0,"audio_bytes":72577,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":5.530964},"events":[{"type":"waiting","at":1791843278929,"time":0,"error":null},{"type":"playing","at":1791843286817,"time":0,"error":null}],"route":"#/video"} +{"utc":"2026-10-12T22:14:50.258Z","type":"server","label":"periodic","elapsed":47.41,"plugin":"7.0.7.0","streams":{"UpstreamConnectionsOpened":1,"ActiveSources":1,"Consumers":2,"LastErrors":[],"Channels":[{"Id":"bd9828873b2f4a1cbbb9853beb9630e5","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":2}]},"probe_error":null,"sessions":[{"user":"decoder-reception-d06a6455","channel":"TVP 1 HD","transcoding":{"VideoCodec":"h264","AudioCodec":"aac","IsVideoDirect":false,"IsAudioDirect":false,"Framerate":57,"TranscodeReasons":["ContainerNotSupported","AudioCodecNotSupported","InterlacedVideoNotSupported"]}},{"user":"decoder-reception-9aaca800","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:14:55.264Z","type":"video","viewer":1,"elapsed":52.42,"video":{"time":52.432635,"frames":2571,"dropped":8,"audio_bytes":1703659,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":5.6683240000000055},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:14:55.269Z","type":"video","viewer":2,"elapsed":52.42,"video":{"time":8.388411,"frames":350,"dropped":0,"audio_bytes":280189,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":5.088548000000001},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:15:00.275Z","type":"video","viewer":1,"elapsed":57.43,"video":{"time":57.445776,"frames":2822,"dropped":8,"audio_bytes":1865694,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.655183000000001},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:15:00.278Z","type":"video","viewer":2,"elapsed":57.43,"video":{"time":13.398709,"frames":600,"dropped":0,"audio_bytes":441582,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":6.078250000000001},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:15:07.344Z","type":"check","name":"viewer 2 exit to Channels","status":"PASS","evidence":{"elapsed":64.5}} +{"utc":"2026-10-12T22:15:08.968Z","type":"server","label":"secondary-left","elapsed":66.12,"plugin":"7.0.7.0","streams":{"UpstreamConnectionsOpened":1,"ActiveSources":1,"Consumers":1,"LastErrors":[],"Channels":[{"Id":"bd9828873b2f4a1cbbb9853beb9630e5","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":1}]},"probe_error":null,"sessions":[{"user":"decoder-reception-9aaca800","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.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":1}} +{"utc":"2026-10-12T22:15:08.973Z","type":"video","viewer":1,"elapsed":66.12,"video":{"time":66.142985,"frames":3257,"dropped":9,"audio_bytes":2147099,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.957974000000007},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:15:13.982Z","type":"video","viewer":1,"elapsed":71.13,"video":{"time":71.151762,"frames":3508,"dropped":9,"audio_bytes":2309882,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":4.949196999999998},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:15:19.000Z","type":"video","viewer":1,"elapsed":76.15,"video":{"time":76.168919,"frames":3759,"dropped":9,"audio_bytes":2471981,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":5.932040000000001},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:15:24.008Z","type":"video","viewer":1,"elapsed":81.16,"video":{"time":81.17878,"frames":4009,"dropped":9,"audio_bytes":2633952,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":3.922179},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:15:25.724Z","type":"server","label":"periodic","elapsed":82.88,"plugin":"7.0.7.0","streams":{"UpstreamConnectionsOpened":1,"ActiveSources":1,"Consumers":1,"LastErrors":[],"Channels":[{"Id":"bd9828873b2f4a1cbbb9853beb9630e5","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":true,"Consumers":1}]},"probe_error":null,"sessions":[{"user":"decoder-reception-9aaca800","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.100.191","name":"TVP 1 HD","ref":"1:0:1:3ABD:514:13E:820000:0:0:0:"}],"channel_matches":1}} +{"utc":"2026-10-12T22:15:30.742Z","type":"video","viewer":1,"elapsed":87.89,"video":{"time":87.911523,"frames":4345,"dropped":9,"audio_bytes":2851535,"width":1920,"height":1080,"ready":4,"paused":false,"ended":false,"error":null,"buffered_ahead":6.189436000000001},"events":[],"route":"#/video"} +{"utc":"2026-10-12T22:15:38.154Z","type":"check","name":"viewer 1 exit to Channels","status":"PASS","evidence":{"elapsed":95.31}} +{"utc":"2026-10-12T22:15:38.155Z","type":"check","name":"scheduled duration completed","status":"PASS","evidence":{"seconds":92.9,"interrupted":false}} +{"utc":"2026-10-12T22:15:38.155Z","type":"check","name":"second viewer phase completed","status":"PASS","evidence":{"joinAt":30,"leaveAt":60}} +{"utc":"2026-10-12T22:15:59.915Z","type":"server","label":"after-cleanup","elapsed":117.07,"plugin":"7.0.7.0","streams":{"UpstreamConnectionsOpened":1,"ActiveSources":0,"Consumers":0,"LastErrors":[],"Channels":[{"Id":"bd9828873b2f4a1cbbb9853beb9630e5","ServiceReference":"/1:0:1:3ABD:514:13E:820000:0:0:0:","Active":false,"Consumers":0}]},"probe_error":null,"sessions":[{"user":"decoder-reception-9aaca800","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:15:59.916Z","type":"check","name":"own relay consumers released after last viewer","status":"PASS","evidence":{"relay_id":"bd9828873b2f4a1cbbb9853beb9630e5","active":false,"consumers":0,"baseline_active":false,"baseline_consumers":0}} +{"utc":"2026-10-12T22:16:02.622Z","type":"check","name":"viewer 1 continuous decoded progress","status":"PASS","evidence":{"samples":13,"progressing_intervals":12,"stalled_intervals":0,"audio_progress_intervals":12}} +{"utc":"2026-10-12T22:16:02.623Z","type":"check","name":"viewer 1 browser and HLS responses","status":"PASS","evidence":{"browser_errors":[],"hls":{"manifests":36,"segments":0,"failed":[],"request_failed":[]}}} +{"utc":"2026-10-12T22:16:02.624Z","type":"check","name":"viewer 1 audio decoding progresses","status":"PASS","evidence":{"progressing_intervals":12}} +{"utc":"2026-10-12T22:16:02.624Z","type":"check","name":"viewer 2 continuous decoded progress","status":"PASS","evidence":{"samples":3,"progressing_intervals":2,"stalled_intervals":0,"audio_progress_intervals":2}} +{"utc":"2026-10-12T22:16:02.625Z","type":"check","name":"viewer 2 browser and HLS responses","status":"PASS","evidence":{"browser_errors":[],"hls":{"manifests":11,"segments":0,"failed":[],"request_failed":[]}}} +{"utc":"2026-10-12T22:16:02.625Z","type":"check","name":"viewer 2 audio decoding progresses","status":"PASS","evidence":{"progressing_intervals":2}} +{"utc":"2026-10-12T22:16:02.626Z","type":"check","name":"sharing uses one physical receiver stream","status":"PASS","evidence":{"before_opened":1,"during":[{"elapsed":45.97,"opened":1,"physical_rows":1,"consumers":2},{"elapsed":47.41,"opened":1,"physical_rows":1,"consumers":2}]}} +{"utc":"2026-10-12T22:16:02.627Z","type":"check","name":"global receiver upstream counter stable during sharing","status":"PASS","evidence":{"before":1,"during":[1,1],"scope":"Global plugin counter; correlate a failure with other users and channel snapshots."}} diff --git a/reception-production-summary-7.0.7-20261013.json b/reception-production-summary-7.0.7-20261013.json new file mode 100644 index 0000000..730f6cc --- /dev/null +++ b/reception-production-summary-7.0.7-20261013.json @@ -0,0 +1,53 @@ +{ + "input": "enigma-diagnostics/jellyfin-decoder-plugin/reception-production-7.0.7-20261013.json", + "plugin": "7.0.7.0", + "isolated_bridge_override": false, + "channel": "TVP 1 HD", + "first_video_utc": "2026-10-12T22:14:02.849Z", + "finished_utc": "2026-10-12T22:16:02.627Z", + "transport_checks": { + "pass": 15, + "fail": 0, + "unverified": 0 + }, + "viewers": [ + { + "viewer": 1, + "sampled_seconds": 82.787, + "media_progress_seconds": 82.791, + "realtime_ratio": 1, + "total_frame_delta": 4139, + "dropped_frame_delta": 9, + "dropped_fraction": 0.002, + "approximate_presented_fps": 49.887, + "waiting_events": 0, + "waiting_seconds": 0, + "waiting_median_seconds": null, + "waiting_max_seconds": null, + "waiting_unmatched": 0, + "minimum_buffer_seconds": 2.972, + "audio_decoded_byte_delta": 2676182, + "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": 11.452, + "media_progress_seconds": 11.453, + "realtime_ratio": 1, + "total_frame_delta": 572, + "dropped_frame_delta": 0, + "dropped_fraction": 0, + "approximate_presented_fps": 49.948, + "waiting_events": 0, + "waiting_seconds": 0, + "waiting_median_seconds": null, + "waiting_max_seconds": null, + "waiting_unmatched": 0, + "minimum_buffer_seconds": 5.089, + "audio_decoded_byte_delta": 369005, + "status": "SMOOTH_TEST_CLIENT", + "scope": "Headless test client only. Frame presentation is approximated; audible sound and other devices are not verified." + } + ] +}