It happens with all Plex Media Server versions (on both PC / NAS, it really doesn’t matter).
So if you’ve got a video that has 27 subtitles then it will direct play it just fine.
However, if you’ve got a video that has 28 subtitles (or more) then it will transcode it no matter what you do.
It happens with both Samsung TVs and LG TVs.
It seems like a Plex limitation and not a TV limitation, because I tested and my TV was able to play both videos just fine on USB.
Anyone can test this, but I can provide a sample MKV file just so it can be more easily tested. Both files have the same Audio/Video codecs. The original had 28 subtitles and I just removed 1 subtitles for testing purposes. See the 2 files here
I’m hoping the Plex Developers can see this bug and remove the limitation that’s causing the transcoding.
As I clearly mentioned, if I play the video on my Samsung TV or LG TV directly via USB, then it works properly. How can it be a Samsung limitation if the TV on its own plays it just fine?
It’s clearly a Plex issue as it happens with both Samsung and LG and also it works fine on the respective TVs if played via USB.
Maybe Samsung and LG did have a problem just as you say, but they’ve clearly fixed it by now. Maybe it’s time for Plex to disable this workaround that they have?
Hi ChuckPa
Alright, I’m uploading the logs here. Plex Media Server Logs_2023-03-06_21-40-18.zip (1.2 MB)
Please note that I have the same issue with a 2020 Samsung TV, another 2021 Samsung TV and an LG OLED B1 (2022 or maybe 2021).
Again, as I can’t stress this enough: Why should Plex do this Direct Streaming (audio transcoding) if the TV on its own (without Plex) is perfectly capable of playing the MKV file? It surely sounds like a bug on Plex’s side to me.
It’s NOT transcoding. “DirectStream” of video = Remux.
When you removed the subtitle stream from the file – you ALSO did a Remux
The text in the log says ‘transcoded’ because the transcoder, in Select+Copy mode (aka Remux) logs its activty.
Mar 06, 2023 18:02:33.919 [9872] DEBUG - [Req#c3/Transcode] TranscodeUniversalRequest: adapting profile with augmentation data: add-transcode-target(type=videoProfile&context=streaming&protocol=dash&container=mp4&videoCodec=h264,hevc&audioCodec=aac)+add-limitation(scope=videoCodec&scopeName=h264&type=upperBound&name=video.level&value=51)+add-limitation(scope=videoTranscodeTarget&scopeName=h264&scopeType=videoCodec&context=streaming&protocol=dash&type=upperBound&name=video.width&value=4096)+add-limitation(scope=videoTranscodeTarget&scopeName=h264&scopeType=videoCodec&context=streaming&protocol=dash&type=upperBound&name=video.height&value=2160)+add-limitation(scope=videoTranscodeTarget&scopeName=h264&scopeType=videoCodec&context=streaming&protocol=dash&type=upperBound&name=video.bitDepth&value=8)+add-limitation(scope=videoTranscodeTarget&scopeName=h264&scopeType=videoCodec&context=streaming&protocol=dash&type=upperBound&name=video.frameRate&value=60)+add-limitation(scope=videoTranscodeTarget&scopeName=h264&scopeType=videoCodec&context=streaming&protocol=dash&type=upperBound&name=video.bitrate&value=60000)+add-limitation(scope=videoTranscodeTarget&scopeName=hevc&scopeType=videoCodec&context=streaming&protocol=dash&type=upperBound&name=video.width&value=4096)+add-limitation(scope=videoTranscodeTarget&scopeName=hevc&scopeType=videoCodec&context=streaming&protocol=dash&type=upperBound&name=video.height&value=2160)+add-limitation(scope=videoTranscodeTarget&scopeName=hevc&scopeType=videoCodec&context=streaming&protocol=dash&type=upperBound&name=video.bitDepth&value=10)+add-limitation(scope=videoTranscodeTarget&scopeName=hevc&scopeType=videoCodec&context=streaming&protocol=dash&type=upperBound&name=video.frameRate&value=60)+add-limitation(scope=videoTranscodeTarget&scopeName=hevc&scopeType=videoCodec&context=streaming&protocol=dash&type=upperBound&name=video.bitrate&value=80000)+add-limitation(scope=videoTranscodeTarget&scopeName=hevc&scopeType=videoCodec&context=streaming&type=match&name=video.colorTrc&protocol=dash&list=bt709|bt470m|bt470bg|smpte170m|smpte240m|bt2020-10|smpte2084&isRequired=false)+add-limitation(scope=videoCodec&scopeName=hevc&type=notMatch&name=video.DOVIProfile&value=5)+add-transcode-target(type=subtitleProfile&protocol=http&context=all&subtitleCodec=srt&container=srt)+add-transcode-target-settings(type=videoProfile&context=streaming&protocol=dash&IncludeMapInEmptyVTT=true)
Mar 06, 2023 18:02:33.920 [9872] DEBUG - [Req#c3/Transcode] TranscodeUniversalRequest: using augmented profile Generic
Mar 06, 2023 18:02:33.920 [9872] DEBUG - [Req#c3/Transcode] Downloading document http://127.0.0.1:32400/library/metadata/20261?includeBandwidths=1&offset=-1&X-Plex-Incomplete-Segments=1&X-Plex-Session-Identifier=wolv9y774vkf1ozyv6s6cpbi
Mar 06, 2023 18:02:33.923 [9872] DEBUG - [Req#c3/Transcode/Req#c4] We're going to try to auto-select an audio stream for account 1.
Mar 06, 2023 18:02:33.923 [9872] DEBUG - [Req#c3/Transcode/Req#c4] Selecting best audio stream for part ID 22332 (autoselect: 0 language: ro)
Mar 06, 2023 18:02:33.923 [9872] DEBUG - [Req#c3/Transcode/Req#c4] We're going to try to auto-select a subtitle.
Mar 06, 2023 18:02:33.923 [9872] DEBUG - [Req#c3/Transcode/Req#c4] Selected a foreign audio track: en
Mar 06, 2023 18:02:33.923 [9872] DEBUG - [Req#c3/Transcode/Req#c4] Subtitles: Found a candidate subtitle language [ro] for a foreign film
Mar 06, 2023 18:02:33.923 [9872] DEBUG - [Req#c3/Transcode/Req#c4] Audio Stream: 27703, Subtitle Stream: 27725
Mar 06, 2023 18:02:33.927 [9872] DEBUG - [Req#c3/Transcode] Codecs: testing aac_mf (encoder)
Mar 06, 2023 18:02:33.938 [9872] INFO - [Req#c3/Transcode] [FFMPEG] - MFT name: 'Microsoft AAC Audio Encoder MFT'
Mar 06, 2023 18:02:33.947 [9872] DEBUG - [Req#c3/Transcode] Codecs: testing eac3_mf (decoder)
Mar 06, 2023 18:02:33.995 [9872] INFO - [Req#c3/Transcode] [FFMPEG] - MFT name: 'Microsoft Dolby Digital Plus Decoder MFT'
Mar 06, 2023 18:02:33.998 [9872] DEBUG - [Req#c3/Transcode] MDE: Selected protocol dash; container: mp4
Mar 06, 2023 18:02:33.998 [9872] DEBUG - [Req#c3/Transcode] MDE: analyzing media item 20922
Mar 06, 2023 18:02:33.998 [9872] DEBUG - [Req#c3/Transcode] MDE: transcoding_total_28_subtitles (2023): Direct Play is disabled
Mar 06, 2023 18:02:33.998 [9872] DEBUG - [Req#c3/Transcode] MDE: transcoding_total_28_subtitles (2023): media must be transcoded in order to use the dash protocol
Mar 06, 2023 18:02:33.998 [9872] DEBUG - [Req#c3/Transcode] MDE: transcoding_total_28_subtitles (2023): no direct play video profile exists for http/mkv/h264
Mar 06, 2023 18:02:33.998 [9872] DEBUG - [Req#c3/Transcode] MDE: transcoding_total_28_subtitles (2023): no direct play video profile exists for http/mkv/h264/eac3
Mar 06, 2023 18:02:33.998 [9872] DEBUG - [Req#c3/Transcode] MDE: transcoding_total_28_subtitles (2023): selected embedded subtitle stream is not the first embedded subtitle stream
Mar 06, 2023 18:02:33.998 [9872] DEBUG - [Req#c3/Transcode] Codecs: testing aac_mf (encoder)
Mar 06, 2023 18:02:33.999 [9872] INFO - [Req#c3/Transcode] [FFMPEG] - MFT name: 'Microsoft AAC Audio Encoder MFT'
Mar 06, 2023 18:02:34.000 [9872] DEBUG - [Req#c3/Transcode] MDE: Cannot direct stream audio stream due to codec eac3 when profile only allows aac
Mar 06, 2023 18:02:34.000 [9872] DEBUG - [Req#c3/Transcode] MDE: transcoding_total_28_subtitles (2023): selected media 0 / 20922
Mar 06, 2023 18:02:34.000 [9872] DEBUG - [Req#c3/Transcode] Streaming Resource: Added session 0AD6E298:wolv9y774vkf1ozyv6s6cpbi
Ther are no errors / issues here – except that you need manage your media a bit better
If I insert the removed subtitle (by remuxing again) and the subtitle count reaches 28 again, then the issue re-appears.
It’s unrelated to remuxing because the issue doesn’t happen at all when playing the MKV file on the TV directly. That means the TV has the capability to play the MKV file directly. So there is no real reason for Plex to force a Direct Stream.
This is clearly a bug with Plex and I would really appreciate it if my report was considered by a Plex developer.
There is a difference between streaming media and playing it from a USB stick connected to the TV.
The problem, as mentioned in the linked post above (here), has to do with the streaming protocol used between the Plex Media Server and Samsung TVs.
When Plex direct plays media, it sends the entire file, including all audio and subtitle tracks, to the client.
Samsung TVs have a limit of 30 tracks in a stream, not a media file.
If there are over 30 tracks, Plex must direct stream (aka remux) to get below the 30 track limit.
There is another problem with subtitles, also referenced in the earlier post. When direct streaming, if subtitles are enabled, Plex will transcode the video to burn in the subtitles. Plex must do this to keep the video, audio, and subtitles in sync with each other.
None of the above applies when playing from a USB stick. The Samsung video app reads the media direct from the stick. None of the streaming protocols, the source of the limitations, are in use.
EDIT: There are also bandwidth limits imposed by Samsung. H.264/AVC has a limit of 60 Mbps. H.265/HEVC has a limit of 80 Mbps (4K TVs) or 100 Mbps (8K TVs). If the bandwidth limit is exceeded, Plex Media Server will transcode the video.
The bandwidth limitations are mentioned on the Samsung Developer site: Video Specifications
Can’t say… I did once test on the LG b1 but it was a friend’s TV.
I own a Samsung 2020 model in my living room now and I can only tell you the specs of it, if you want. Cause right now I am reproducing it with this TV.
Let me know.
As FordGuy said – it’s a “number of tracks” problem.
Look at the media info … Exactly 30 tracks. You’re tripping the limit.
[chuck@lizum testfiles.2003]$ mediainfo transcoding_total_28_subtitles.mkv
General
Unique ID : 171498629972971703467699777969665622651 (0x81056F47C117C4059D74B2B9975C427B)
Complete name : transcoding_total_28_subtitles.mkv
Format : Matroska
Format version : Version 4
File size : 8.03 MiB
Duration : 8 s 808 ms
Overall bit rate mode : Variable
Overall bit rate : 7 647 kb/s
Writing application : Lavf59.17.100
Writing library : Lavf59.17.100
ErrorDetectionType : Per level 1
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L4
Format settings : CABAC / 4 Ref Frames
Format settings, CABAC : Yes
Format settings, Reference frames : 4 frames
Codec ID : V_MPEG4/ISO/AVC
Duration : 8 s 383 ms
Bit rate mode : Variable
Bit rate : 8 236 kb/s
Maximum bit rate : 12.4 Mb/s
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Frame rate mode : Variable
Frame rate : 8 706.430 FPS
Original frame rate : 23.976 (24000/1001) FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.000
Stream size : 2.92 GiB
Default : Yes
Forced : No
Color range : Limited
Color primaries : BT.709
Transfer characteristics : BT.709
Matrix coefficients : BT.709
Audio
ID : 2
Format : E-AC-3 JOC
Format/Info : Enhanced AC-3 with Joint Object Coding
Commercial name : Dolby Digital Plus with Dolby Atmos
Codec ID : A_EAC3
Duration : 8 s 268 ms
Bit rate mode : Constant
Bit rate : 768 kb/s
Channel(s) : 6 channels
Channel layout : L R C LFE Ls Rs
Sampling rate : 48.0 kHz
Frame rate : 31.250 FPS (1536 SPF)
Bit depth : 32 bits
Compression mode : Lossy
Delay relative to video : 12 ms
Stream size : 279 MiB
Title : English
Language : English
Service kind : Complete Main
Default : Yes
Forced : No
Complexity index : 16
Number of dynamic objects : 15
Bed channel count : 1 channel
Bed channel configuration : LFE
Text #1
ID : 3
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 641 ms
Bit rate : 32 b/s
Count of elements : 445
Stream size : 11.5 KiB (0%)
Language : English
Default : Yes
Forced : No
Text #2
ID : 4
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 808 ms
Bit rate : 39 b/s
Count of elements : 595
Stream size : 14.2 KiB (0%)
Language : English
Default : No
Forced : No
Text #3
ID : 5
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 48 b/s
Count of elements : 445
Stream size : 17.5 KiB (0%)
Language : Bulgarian
Default : No
Forced : No
Text #4
ID : 6
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 29 b/s
Count of elements : 445
Stream size : 10.5 KiB (0%)
Language : Czech
Default : No
Forced : No
Text #5
ID : 7
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 29 b/s
Count of elements : 440
Stream size : 10.6 KiB (0%)
Language : Danish
Default : No
Forced : No
Text #6
ID : 8
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 34 b/s
Count of elements : 394
Stream size : 11.9 KiB (0%)
Language : Spanish
Default : No
Forced : No
Text #7
ID : 9
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 29 b/s
Count of elements : 444
Stream size : 10.6 KiB (0%)
Language : Spanish
Default : No
Forced : No
Text #8
ID : 10
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 800 ms
Bit rate : 41 b/s
Count of elements : 603
Stream size : 15.1 KiB (0%)
Language : Spanish
Default : No
Forced : No
Text #9
ID : 11
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 32 b/s
Count of elements : 444
Stream size : 11.5 KiB (0%)
Language : Estonian
Default : No
Forced : No
Text #10
ID : 12
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 31 b/s
Count of elements : 440
Stream size : 11.2 KiB (0%)
Language : Finnish
Default : No
Forced : No
Text #11
ID : 13
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 51 b/s
Count of elements : 445
Stream size : 18.6 KiB (0%)
Language : Hebrew
Default : No
Forced : No
Text #12
ID : 14
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 28 b/s
Count of elements : 445
Stream size : 10.3 KiB (0%)
Language : Croatian
Default : No
Forced : No
Text #13
ID : 15
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 29 b/s
Count of elements : 444
Stream size : 10.7 KiB (0%)
Language : Hungarian
Default : No
Forced : No
Text #14
ID : 16
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 34 b/s
Count of elements : 444
Stream size : 12.6 KiB (0%)
Language : Icelandic
Default : No
Forced : No
Text #15
ID : 17
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 29 b/s
Count of elements : 444
Stream size : 10.8 KiB (0%)
Language : Lithuanian
Default : No
Forced : No
Text #16
ID : 18
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 31 b/s
Count of elements : 445
Stream size : 11.4 KiB (0%)
Language : Latvian
Default : No
Forced : No
Text #17
ID : 19
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 53 b/s
Count of elements : 445
Stream size : 19.1 KiB (0%)
Language : Macedonian
Default : No
Forced : No
Text #18
ID : 20
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 28 b/s
Count of elements : 427
Stream size : 10.2 KiB (0%)
Language : Dutch
Default : No
Forced : No
Text #19
ID : 21
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 141 ms
Bit rate : 28 b/s
Count of elements : 442
Stream size : 10.1 KiB (0%)
Language : Polish
Default : No
Forced : No
Text #20
ID : 22
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 30 b/s
Count of elements : 445
Stream size : 11.0 KiB (0%)
Language : Portuguese
Default : No
Forced : No
Text #21
ID : 23
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 27 b/s
Count of elements : 445
Stream size : 9.89 KiB (0%)
Language : Portuguese
Default : No
Forced : No
Text #22
ID : 24
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 32 b/s
Count of elements : 442
Stream size : 11.9 KiB (0%)
Language : Romanian
Default : No
Forced : No
Text #23
ID : 25
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 48 b/s
Count of elements : 446
Stream size : 17.7 KiB (0%)
Language : Russian
Default : No
Forced : No
Text #24
ID : 26
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 29 b/s
Count of elements : 445
Stream size : 10.7 KiB (0%)
Language : Slovak
Default : No
Forced : No
Text #25
ID : 27
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 28 b/s
Count of elements : 445
Stream size : 10.3 KiB (0%)
Language : Slovenian
Default : No
Forced : No
Text #26
ID : 28
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 29 b/s
Count of elements : 445
Stream size : 10.6 KiB (0%)
Language : Serbian
Default : No
Forced : No
Text #27
ID : 29
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 28 b/s
Count of elements : 440
Stream size : 10.2 KiB (0%)
Language : Swedish
Default : No
Forced : No
Text #28
ID : 30
Format : UTF-8
Codec ID : S_TEXT/UTF8
Codec ID/Info : UTF-8 Plain Text
Duration : 8 s 133 ms
Bit rate : 31 b/s
Count of elements : 445
Stream size : 11.4 KiB (0%)
Language : Turkish
Default : No
Forced : No
Menu
00:00:00.000 : :Intro
[chuck@lizum testfiles.2004]$
Bottom line – Manage your media and discard (remux out) those tracks you don’t need if you want DirectPlay. If you don’t mind the Remux (it takes VERY little CPU) then leave it be.
There is no PMS failure here.
As an alternative, you can place the SRT files externally. PMS will mux them in as it plays
And for you personally it truly makes sense that it works fine via USB (no 30 tracks limit there) but the limit just gets triggered over Plex?
Because for me it’s still a bit unclear.
I was under the impression that Direct Playing = same as USB playing