Transcode runner appears to have died on FreeBSD

Server Version#: 1.43.1.10611
Player Version#: tried roku stick, roku ultra, android, web player, etc

I had to replace the plex jail on my FreeBSD server for an unrelated reason, so I’m starting from scratch on a new jail originally on 14.3, but I’ve since upgrade to 14.4 and now 15.0, hoping something would magically work. I believe I have all the same settings that worked on my previous jail and I’ve installed PMS from the latest pkg repos.

The issue is that any time I try to watch something that requires transcoding (whether for audio or video), I can see the transcoded files being outputted to the correct path on the server, but the client hangs and never gets a response. I can see the Plex Transcoder process running and doing it’s job, but when the process disappears in top is about when I see the PMS output a bunch of entries along the lines of “Transcode runner appears to have died… Sending back blank segment for …” How can I debug this? This has been an issue for about 2 weeks, and I can watch some content (anything that direct plays), but my family is getting pretty pissed at me…

I’ve attached the debug logs

plex-debug.txt (589.3 KB)

Permissions and ownership of /var/tmpdisk and /var/tmpdisk/Transcode and /var/tmpdisk/Transcode/Sessions ?

All the plex processes are running as the user “blank” (1002) and the owner of /var/tmpdisk is blank:blank (1002:1002) with 0755 permissions. This is the same for all directories under /var/tmdisk including Transcode and Transcode/Sessions.

While the transcoder is running, I can see the ts files under Transcode/Sessions/plex-transcode-{some-identifier}/media-{segment-id}.ts. Once it crashes, it cleans up the “plex-transcode-{identifier}” folder just fine and deletes the ts files.

Interesting!

Does it change anything if you don’t override the transcode directory and let it use the default?

I’m curious why we’re using a non-standard user here. Not saying it’s the cause of the problem but since Plex has its own user account already it feels like an unnecessary change in the server operation.

Does it change anything if you don’t override the transcode directory and let it use the default?

No it doesn’t change anything, the transcoded files get written but not streamed.

I’m curious why we’re using a non-standard user here. Not saying it’s the cause of the problem but since Plex has its own user account already it feels like an unnecessary change in the server operation

It’s a pattern I came up with 10ish years ago, idk if it makes sense, but basically I have separate jails writing to the data drive that is mounted into each jail, so I wanted a consistent user/group in the different jails so that the files had the same ownership across them. I don’t think it’s the issue, everything used to work with this model, and direct play works fine as well as the transferring, just not the streaming of the transcoded files…

If you use Plex to optimize some media, does that work?

Was Plex installed manually or from the pkg?

I don’t see anything that gives me any clues in those logs. Usually the Plex guys want you to include the server startup messages when sharing logs. It’s worth restarting the server, waiting a minute, and then attempting to play something, and then sharing those logs.

I restarted the server and tried to load the same video, I didn’t let it run as long, but it should give the startup details for the server.

I tried to optimize the same video and it immediately failed saying “Unable to convert”, which is strange because the behavior when streaming is that it actually runs for a bit (minutes) and then eventually fails, and the converted video files are in the transcode folder when trying to stream, which I don’t see in this case.

I installed it from pkg, just as I had before. I got into this mess by cleaning things up on the server and destroying a jail that happened to share the same root zfs filesystem without realizing it, so it wiped my plex installation out. I think I’ve set everything up as I had it before, but I just can not get it to stream the transcoded results.

Looks like I forgot to upload the logs…

plex-debug.txt (112.8 KB)

No one else has run into this?

I have not. But it possibly is something related to the specific FreeBSD version you’re on, so I wouldn’t be much help in that…

I can’t remember when if ever I have had to rebuild by server from scratch. I’ve always transferred it from one jail to another.

I had set the jails up with iocage years ago and apparently they were all using the same root zfs filesystem, so when I destroyed one of the jails that was no longer needed, it nuked all the jails. That was a rough night…

It had been running on 14.3 with no issues. After nuking the jails, I created new ones on 14.3 and I had this issue. Same when I upgrade to 14.4 and 15.

I do see this in the logs.

May 19, 2026 19:36:48.130 [0x176eceb49010] WARN - [Req#354/Transcode] Denying access due to session lacking permission to transcode key /library/metadata/12184

My guess is still permissions somehow/somewhere, but I don’t have any particular suggestions of where to look.

Oh I totally missed that in the logs, that’s a good find. Just need to figure out how that transcode key translates to a file path. Thanks for pointing that out

I’m not seeing that in my recent logs. I just tried to watch something that requires transcoding, saw the same behavior on the client of it hanging and not receiving the stream, when that eventually times out, I look at the logs and I can’t find any instance of “Denying” or “permission” or “lacking” when searching the file.

Any other suggestions on how to debug this?

I’m still struggling with this. I just set up an entirely fresh jail on 15.0-RELEASE upgraded to the latest pkg versions with basically no customizations (e.g. using the plex user and no separate tmp disk for transcoding) and I’m still running into the same issues, albeit with different errors.

Here’s the beginning of the log file

Jun 07, 2026 08:25:21.263 [0x31b953cde810] INFO - Plex Media Server v1.43.2.10687-563d026ea - FreeBSD PC amd64 - build: freebsd-x86_64 freebsd - GMT -07:00
Jun 07, 2026 08:25:21.264 [0x31b953cde810] INFO - FreeBSD version: 15.0-RELEASE-p8, language: en-US
Jun 07, 2026 08:25:21.264 [0x31b953cde810] INFO - Processor: 8-core Intel(R) Xeon(R) CPU E3-1231 v3 @ 3.40GHz
Jun 07, 2026 08:25:21.264 [0x31b953cde810] INFO - Compiler is - Clang 11.0.1 (https://plex.tv -----)
Jun 07, 2026 08:25:21.264 [0x31b953cde810] INFO - /usr/local/share/plexmediaserver/Plex_Media_Server
Jun 07, 2026 08:25:21.263 [0x31b953cde010] DEBUG - BPQ: [Idle] -> [Starting]
Jun 07, 2026 08:25:21.263 [0x31b953cde010] DEBUG - FeatureManager: Using cached data for features list
Jun 07, 2026 08:25:21.265 [0x31b953cde010] DEBUG - MyPlex: mapping state set to 'Unknown'.
Jun 07, 2026 08:25:21.265 [0x31b953cde010] DEBUG - Relay: read 0 cached entries from hosts file
Jun 07, 2026 08:25:21.265 [0x31b953cde010] DEBUG - Opening 20 database sessions to library (com.plexapp.plugins.library), SQLite 3.39.4, threadsafe=1
Jun 07, 2026 08:25:21.267 [0x31b953cde010] INFO - SQLITE3:(nil), 283, recovered 624 frames from WAL file /usr/local/plexdata/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db-wal
Jun 07, 2026 08:25:21.290 [0x31b953cde010] DEBUG - MyPlex: using cached data for request for https://plex.tv/api/v2/server/users/features?filterFeatures[]=b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b&filterFeatures[]=926bc176-58ca-47da-b8e3-080ed14ea6ba&filterFeatures[]=ea791163-c28d-4b7c-af88-bcc9553b206d&filterFeatures[]=6ab6677b-ad9b-444f-9ca1-b8027d05b3e1&filterFeatures[]=56cd352b-0d47-436d-aced-f20db3508de5
Jun 07, 2026 08:25:21.307 [0x31b953cde010] DEBUG - [CERT] Subject name is /CN=*.----.plex.direct
Jun 07, 2026 08:25:21.307 [0x31b953cde010] DEBUG - [CERT] Installed certificate with fingerprint ----.
Jun 07, 2026 08:25:21.307 [0x31b953cde010] DEBUG - [CERT/OCSP] no URL available
Jun 07, 2026 08:25:21.307 [0x31b953cde010] WARN - [CERT/OCSP] getCertInfo failed; skipping stapling
Jun 07, 2026 08:25:21.307 [0x31b953cde010] DEBUG - HttpServer: Listening on port 32400.
Jun 07, 2026 08:25:21.307 [0x31b953cde010] DEBUG - HttpServer: Listening on port 32401.

and when I try to watch something remotely the logs blow up with

Jun 07, 2026 08:29:16.950 [0x31b953d0b010] ERROR - [Req#771f/Transcode/18d7e6c4-7426-4432-b2b1-41b5cd2e3f1b/2100d4fe-42f7-4c2c-9894-533fb878c1b1] [vost#0:0/copy @ 0x14033942b780] Too many packets buffered for output stream 0:0.
Jun 07, 2026 08:29:16.950 [0x31b953d0b010] ERROR - [Req#7720/Transcode/18d7e6c4-7426-4432-b2b1-41b5cd2e3f1b/2100d4fe-42f7-4c2c-9894-533fb878c1b1] [vost#0:0/copy @ 0x14033942b780] Error submitting a packet to the muxer

with messages like this interspersed

Jun 07, 2026 08:29:17.223 [0x31b953d1d010] ERROR - [Req#7ecb/Transcode/18d7e6c4-7426-4432-b2b1-41b5cd2e3f1b/2100d4fe-42f7-4c2c-9894-533fb878c1b1] [eac3_eae @ 0x14033943b400] Cannot group in blocks of 6!
Jun 07, 2026 08:29:17.223 [0x31b953d1d010] ERROR - [Req#7ecc/Transcode/18d7e6c4-7426-4432-b2b1-41b5cd2e3f1b/2100d4fe-42f7-4c2c-9894-533fb878c1b1] [aist#0:1/eac3 @ 0x140339426900] Error submitting packet to decoder: Invalid data found when 
processing input

until I kill the attempt to play the video.

What can I do to debug this?

I’m still trying to figure this out, it seems like the application chooses to delete the transcoded data just before it tries to vend it to the caller

Request: [192.168.12.2:56466 (WAN)] GET /video/:/transcode/universal/session/ogfnkd25ve7jbdzj76jfvme9/1/header (19 live) #4b4 TLS GZIP Signed-in
Jun 19, 2026 10:38:08.609 [0x23c8f9b88010] DEBUG - [Req#9f/Transcode] Streaming Resource: Timing out session 0x23c8fde84418:rvc9l3pb2hpgn1lsgndptntu
Jun 19, 2026 10:38:08.609 [0x23c8f9b88010] DEBUG - [Req#9f/Transcode] Streaming Resource: Terminating session 0x23c8fde84418:rvc9l3pb2hpgn1lsgndptntu which is using 6898kbps of WAN bandwidth.  Used is now 0kbps
Jun 19, 2026 10:38:08.609 [0x23c8f9b5b810] DEBUG - [Req#9f/Transcode] Killing job.
Jun 19, 2026 10:38:08.609 [0x23c8f9b5b810] DEBUG - [Req#9f/Transcode] Signalling job ID 59910 with 9
Jun 19, 2026 10:38:08.609 [0x23c8f9b5b810] DEBUG - [Req#9f/Transcode] Job was already killed, not killing again.
Jun 19, 2026 10:38:08.609 [0x23c8f9b5b810] DEBUG - [Req#9f/Transcode] Stopping transcode session ogfnkd25ve7jbdzj76jfvme9
Jun 19, 2026 10:38:08.609 [0x23c8f9b88810] DEBUG - [Req#9f/Transcode] Cleaning directory for session ogfnkd25ve7jbdzj76jfvme9 (/var/tmpdisk/Transcode/Sessions/plex-transcode-ogfnkd25ve7jbdzj76jfvme9-df7102db-2e49-4761-98fb-fb71fbbd9e99)
Jun 19, 2026 10:38:08.609 [0x23c8f9b88010] DEBUG - [Req#9f/Transcode] Streaming Resource: Terminated session 0x23c8fde84418:rvc9l3pb2hpgn1lsgndptntu with reason Client stopped playback.
Jun 19, 2026 10:38:08.609 [0x23c8f9b88010] DEBUG - [Req#9f/Transcode] Streaming Resource: Removing session 0x23c8fde84418:rvc9l3pb2hpgn1lsgndptntu
Jun 19, 2026 10:38:08.610 [0x23c8f9b5b810] DEBUG - [Req#9f/Transcode] Transcoder: Cleaning old transcode directories.
Jun 19, 2026 10:38:08.612 [0x23c8f9b5b810] DEBUG - [Req#9f/Transcode] Transcoder: Cleaning old transcode directory: "/var/tmpdisk/Transcode/Sessions/plex-transcode-ogfnkd25ve7jbdzj76jfvme9-df7102db-2e49-4761-98fb-fb71fbbd9e99"
Jun 19, 2026 10:38:08.767 [0x23c8f9b44810] DEBUG - [Req#4b5/Transcode/ogfnkd25ve7jbdzj76jfvme9] Exists("/var/tmpdisk/Transcode/Sessions/plex-transcode-ogfnkd25ve7jbdzj76jfvme9-df7102db-2e49-4761-98fb-fb71fbbd9e99/init-stream0.m4s") => 0
Jun 19, 2026 10:38:08.767 [0x23c8f9aec810] DEBUG - Completed: [192.168.12.2:54048] 404 GET /video/:/transcode/universal/session/ogfnkd25ve7jbdzj76jfvme9/0/header (19 live) #4b5 TLS GZIP 46011ms 504 bytes (pipelined: 2)
Jun 19, 2026 10:38:08.787 [0x23c8f9b4a010] DEBUG - [Req#49f/Transcode/ogfnkd25ve7jbdzj76jfvme9] Exists("/var/tmpdisk/Transcode/Sessions/plex-transcode-ogfnkd25ve7jbdzj76jfvme9-df7102db-2e49-4761-98fb-fb71fbbd9e99/init-stream1.m4s") => 0
Jun 19, 2026 10:38:08.787 [0x23c8f9aec810] DEBUG - Completed: [192.168.12.2:54038] 404 GET /video/:/transcode/universal/session/ogfnkd25ve7jbdzj76jfvme9/1/header (18 live) #49f TLS GZIP 54412ms 504 bytes (pipelined: 1)
Jun 19, 2026 10:38:08.788 [0x23c8f9b3d010] DEBUG - [Req#4b4/Transcode/ogfnkd25ve7jbdzj76jfvme9] Exists("/var/tmpdisk/Transcode/Sessions/plex-transcode-ogfnkd25ve7jbdzj76jfvme9-df7102db-2e49-4761-98fb-fb71fbbd9e99/init-stream1.m4s") => 0
Jun 19, 2026 10:38:08.788 [0x23c8f9aec810] DEBUG - Completed: [192.168.12.2:56466] 404 GET /video/:/transcode/universal/session/ogfnkd25ve7jbdzj76jfvme9/1/header (17 live) #4b4 TLS GZIP 9502ms 504 bytes (pipelined: 1)
Jun 19, 2026 10:38:08.798 [0x23c8f9b26810] DEBUG - [Req#362/Transcode/ogfnkd25ve7jbdzj76jfvme9] Exists("/var/tmpdisk/Transcode/Sessions/plex-transcode-ogfnkd25ve7jbdzj76jfvme9-df7102db-2e49-4761-98fb-fb71fbbd9e99/init-stream0.m4s") => 0
Jun 19, 2026 10:38:08.798 [0x23c8f9afa010] DEBUG - [Req#9a/Transcode/ogfnkd25ve7jbdzj76jfvme9] Exists("/var/tmpdisk/Transcode/Sessions/plex-transcode-ogfnkd25ve7jbdzj76jfvme9-df7102db-2e49-4761-98fb-fb71fbbd9e99/init-stream0.m4s") => 0
Jun 19, 2026 10:38:08.798 [0x23c8f9b56810] DEBUG - [Req#167/Transcode/ogfnkd25ve7jbdzj76jfvme9] Exists("/var/tmpdisk/Transcode/Sessions/plex-transcode-ogfnkd25ve7jbdzj76jfvme9-df7102db-2e49-4761-98fb-fb71fbbd9e99/init-stream1.m4s") => 0
Jun 19, 2026 10:38:08.798 [0x23c8f9b39810] DEBUG - [Req#396/Transcode/ogfnkd25ve7jbdzj76jfvme9] Exists("/var/tmpdisk/Transcode/Sessions/plex-transcode-ogfnkd25ve7jbdzj76jfvme9-df7102db-2e49-4761-98fb-fb71fbbd9e99/init-stream1.m4s") => 0
Jun 19, 2026 10:38:08.798 [0x23c8f9afe010] DEBUG - [Req#1f6/Transcode/ogfnkd25ve7jbdzj76jfvme9] Exists("/var/tmpdisk/Transcode/Sessions/plex-transcode-ogfnkd25ve7jbdzj76jfvme9-df7102db-2e49-4761-98fb-fb71fbbd9e99/init-stream0.m4s") => 0
Jun 19, 2026 10:38:08.798 [0x23c8f9b56010] DEBUG - [Req#2bb/Transcode/ogfnkd25ve7jbdzj76jfvme9] Exists("/var/tmpdisk/Transcode/Sessions/plex-transcode-ogfnkd25ve7jbdzj76jfvme9-df7102db-2e49-4761-98fb-fb71fbbd9e99/init-stream0.m4s") => 0
Jun 19, 2026 10:38:08.798 [0x23c8f9b26010] DEBUG - [Req#1f2/Transcode/ogfnkd25ve7jbdzj76jfvme9] Exists("/var/tmpdisk/Transcode/Sessions/plex-transcode-ogfnkd25ve7jbdzj76jfvme9-df7102db-2e49-4761-98fb-fb71fbbd9e99/init-stream1.m4s") => 0
Jun 19, 2026 10:38:08.798 [0x23c8f9aec810] DEBUG - Completed: [192.168.12.2:58218] 404 GET /video/:/transcode/universal/session/ogfnkd25ve7jbdzj76jfvme9/0/header (17 live) #9a TLS GZIP 179691ms 504 bytes (pipelined: 2)

I ran into this after finally jumping from TrueNAS CORE 13.3 to FreeBSD 15.1 with Plex Media Server 1.43.3.10896 was running in a Bastille jail.

Music played fine, as did video that could direct-play. Anything requiring transcoding failed though. The transcode session started successfully and the transcoder wrote its segment files, but the client’s init-segment/header request never returned in time. The transcoder’s loopback HTTP calls to 127.0.0.1:32400 were stalling for ~120 seconds.

Turns out the issue was the jail’s networking. It was a shared-IP jail, so lo0 had no 127.0.0.1 of its own. Instead, loopback traffic was being handled by the shared NIC, which showed up as the jail’s address instead of a real localhost.

The issue was immediately resolved by setting up a proper VNET jail instead. They have their own network stack and 127.0.0.1 loopback.

Ah good find! Thanks for posting what you found!