This took a while to piece together as there are a bunch of different things that all line up to cause problems so I’ll lay out the facts and then explain the full issue.
- Plex doesn’t support embedded metadata for MKV files.
- Roku doesn’t support 4k MP4 files.
- Roku supports 4k MKV files.
- Roku doesn’t support VP9, OPUS, etc in MP4 files.
- Roku supports VP9, OPUS, etc in MKV files.
Because Plex doesn’t support MKV metadata, even if only to match the same fields, etc as MP4 means that Libraries without online metadata must use MP4 containers.
When playing 4k MP4 files on Roku, they are converted down to 1080 h264. This can cause the stream to use more bandwidth than direct play of the original 4k stream, depending on the codec.
When playing MP4 files that contain VP9 video and OPUS audio, which Roku does not support, Plex converts both the video and audio.
When playing MP4 files that contain h264 video and OPUS audio, which the Roku does not support, Plex defaults to Direct Play. This means that the video plays but the audio is ignored. If Direct Play is disabled, Plex converts the audio.
I propose that the Roku client defaults to converting MP4 containers to MKV. Not only does this fix the h264/OPUS bug, but it also reduces the amount of conversion required. Since Roku supports VP9, OPUS, and more in MKV but not MP4, Plex can copy those directly into the MKV container stream. This means that Roku users can enjoy the broader codec support and still keep the embedded metadata that they already have.