Universal transcoder start.mpd returns 400 when called from custom player

I’m building a small custom player and I can’t get Plex’s universal transcoder to start. Regular library fetches/direct play work, but every call to video/:/transcode/universal/start.mpd comes back 400 Bad Request.

What I’m doing:

  • GET /video/:/transcode/universal/decision with the same query/headers Plex Web uses (path, session, mediaIndex, partIndex, X-Plex-* identifiers, X-Plex-Client-Profile-Extra, etc.). PMS returns 200.

  • Immediately GET /video/:/transcode/universal/start.mpd with the exact same parameters and token.

  • PMS responds with HTTP 400 and

    Bad Request

    (no extra info in the server logs).

I’m probably missing something terribly simple, I’ve been staring at this for a while now.

Ok I was able to get transcoding (playback and audio) working on iOS.

however the plex dashboard shows nothing is playing (bandwidth spike, but thats it) any tips on that one? I’m including everything in the timeline, but no such luck yet.