Plex hakker på Chromecast fordi PGS-undertekster tvinger transkoding

Feil spor først
Første mistanke er alltid nettet. Sjekket og avkreftet med én gang: sesjonen kjørte over LAN (Player local=1, relayed=0, location=lan), så internett var aldri strømmeveien. Wifi-signalet ble målt over 50 minutter: 0 reassosieringer, signalstyrke mellom minus 58 og minus 61 dBm, satisfaction 98 til 100. Én reassosiering ble registrert, men falt sammen med at TV-en ble slått av og på, ikke med et nettproblem. 8 prosent tx-retries og enkelte ping-topper på 279 ms ser ille ut i et øyeblikksbilde, men er normal power-save-oppførsel på en Chromecast.
Maskinvaretranskoding på serveren fungerte også hele tiden. Full VAAPI-pipeline, ingen flaskehals der.
Det som faktisk tvang transkoding
To ting, begge uavhengige av nett og maskinvare:
PGS-undertekster er bildebaserte, ikke tekst. De kan ikke sendes som undertekst-spor til en Chromecast, så Plex må brenne dem inn i selve bildet. Det tvinger full videotranskoding uansett hvor kraftig klienten er, og uansett hvor god forbindelsen er. Skrur du undertekstene av midt i en episode, kommer de tilbake ved neste, fordi Plex lagrer undertekstvalget per serie, ikke per avspilling. Fiksen er å velge et SRT-spor i stedet, eller sette standardundertekst til «Ingen» på serienivå.
Plex-appens videokvalitet stod satt lavt, og skalerte 1080p ned til 720x404 ved rundt 2 Mbps, selv på et lokalt nett som tåler langt mer. Innstillingen skal stå på Maximum eller Original når klient og server er på samme LAN.
Resultatet
Etter begge rettet:
videoDecision: transcode -> copy
bitrate: 2 110 kbps -> 14 076 kbps
avspilling: 48 min sammenhengende, 0 buffer-stopp
copy betyr direkte filoverføring uten omkoding. Når den feltet går fra transcode til copy samtidig som bitraten stiger kraftig, er det det eneste beviset som trengs.
Diagnoseoppskriften
Den aktive sesjonen kan leses direkte fra serveren:
curl -s "http://<plex-server>:32400/status/sessions"
Feltene som faktisk avgjør saken:
Player local / relayed -> LAN eller ikke, avkrefter internett i ett blikk
Session location -> lan eller wan
TranscodeSession videoDecision -> copy = direkte, transcode = tvungen omkoding
subtitleDecision -> copy + location=segments-av = innbrent bildeundertekst
maxOffsetAvailable - viewOffset -> hvor mye serveren har bufret foran spilleren
viewOffset under avspilling -> står den stille mens state=playing, er det klienten som har stoppet å hente, ikke serveren
Lærdommen
Relay og wifi er fristende å skylde på fordi de er usynlige og vage. Begge avkreftes på sekunder med harde tall fra sesjonsloggen. Det som faktisk stoppet avspillingen var to konkrete, synlige innstillinger: undertekstformat og en kvalitetsgrense i appen. Les sesjonsfeltene før du begynner å feilsøke nettet.


