Why can't PLEX reliably handle more than 1 Live TV stream?

Server Version#: 1.29.0.6244 (I’ve tried them all)
Player Version#: All versions (Roku, HTPC, Android, Android TV)
Tuner Make/Model: IPTV via xTeVe

I’ve been trying to make PLEX Live TV work reliably for the past year now. I’ve tried everything . Different server versions, different player versions and OS, different hardware, VM, Bare metal, NAS, DAS, SATA, SSD, NVMe, GPU, everything.
While using a single stream, I can get the system to run reliably for a while. If I change the channel too many times, PLEX gives up and I have to restart the server. I’m not talking about changing the channel at a fast rate of speed, but moderate channel changes (15 or more) in the course of a day. I have set PMS to restart every night, and that helps keep the system working well throughout the week.
And that’s right about where the pleasantries stop.
Anytime more than one stream is used simultaneously, the system can’t handle more than a couple channel changes before Live TV becomes unresponsive.
Live TV usage starts to stack up in the Activity monitor, but I can’t tune to a channel
Screenshot from 2022-12-04 15-23-00

Watch TV in the living room while someone else is watching TV in the den? Nice try!
Wanna DVR a show while you watch another channel? I don’t think so.

With that being said, it only appears to affect Live TV. I can DVR 5 channels at once. No problem, as long as no one is actively watching Live TV.

Error log on my Android TV looks like this:

11-13 12:59:58.587  i: [MediaDecisionEngine] Unable to direct play; Direct Play was attempted but failed, fallen back to transcoding
11-13 12:59:58.588  i: Fetching [method:GET] https://192.168.1.82:32400/:/timeline?airingID=535&audioStreamID=1438&context=home%3Ahub.recent.channels&duration=1106805&guid=plex%3A%2F%2Fepisode%2F633b2b68ad135b391d305d37&key=%2Flivetv%2Fsessions%2F0436a615-7630-4ceb-8def-ce7ccc5051c0&playbackTime=1104035&playQueueItemID=5fc76de71c33bf002d6b1914-5fc70602678e02002ecd0041-1668360600000&ratingKey=559&state=buffering&time=0&token=...J_W3&X-Plex-Client-Identifier=e60f2c08643c7a70-com-plexapp-android&X-Plex-Token=...J_W3&X-Plex-Language=en-us
11-13 12:59:58.590  i: [video] User maximum h264 profile determined: 62
11-13 12:59:58.591  i: [video] Device recommended h264 profile determined: 51
11-13 12:59:58.592  i: [ASS][Renderer] Attempting to start renderer from setSurface.
11-13 12:59:58.594  w: [ASS][Renderer] Missing surface, can't start renderer yet.
11-13 12:59:58.595  i: [video] Segmented MKV not supported
11-13 12:59:58.598  i: [ExoPlayer][EventLogger] surfaceSize [eventTime=1109.04, mediaPos=0.00, window=0, period=0, 1920, 1080]
11-13 12:59:58.599  i: [ASS][Renderer] Attempting to start renderer from setSurface.
11-13 12:59:58.600  w: [ASS][Renderer] Renderer already running, restarting.
11-13 12:59:58.602  i: [ASS][Renderer] Renderer thread being stopped due to restart requested.
11-13 12:59:58.603  i: [ASS][Renderer] Renderer stopped successfully.
11-13 12:59:58.604  w: [ASS][Renderer] Attempted to start renderer without decoder instance.
11-13 12:59:58.655  i: Fetching [method:GET] https://192.168.1.82:32400/video/:/transcode/universal/decision?audioBoost=100&autoAdjustQuality=0&directPlay=0&directStream=1&directStreamAudio=1&fastSeek=1&hasMDE=1&location=lan&maxVideoBitrate=200000&mediaIndex=-1&path=%2Ftv.plex.providers.epg.cloud%3A25%2Fmetadata%2Fplex%253A%252F%252Fepisode%252F633b2b68ad135b391d305d37&protocol=*&session=e60f2c08643c7a70-com-plexapp-android&subtitleSize=100&videoBitrate=200000&videoQuality=100&videoResolution=3840x2160&X-Plex-Client-Identifier=e60f2c08643c7a70-com-plexapp-android&X-Plex-Client-Platform=Android&X-Plex-Client-Profile-Extra=add-limitation(scope%3DvideoCodec%26scopeName%3Dh264%26type%3DupperBound%26name%3Dvideo.level%26value%3D62)%2Badd-limitation(scope%3DvideoCodec%26scopeName%3D*%26type%3DupperBound%26name%3Dvideo.width%26value%3D3840%26replace%3Dtrue)%2Badd-limitation(scope%3DvideoCodec%26scopeName%3D*%26type%3DupperBound%26name%3Dvideo.height%26value%3D2160%26replace%3Dtrue)%2Badd-limitation(scope%3DvideoCodec%26scopeName%3Dhevc%26type%3DnotMatch%26name%3Dvideo.DOVIProfile%26value%3D5)%2Badd-limitation(scope%3DvideoAudioCodec%26scopeName%3Daac%26type%3DupperBound%26name%3Daudio.channels%26value%3D8%26replace%3Dtrue)%2Badd-transcode-target-audio-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26audioCodec%3Dmp3)%2Badd-transcode-target-audio-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26audioCodec%3Dac3)%2Badd-transcode-target-audio-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26audioCodec%3Deac3)%2Badd-transcode-target-audio-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26audioCodec%3Ddca)%2Badd-transcode-target-audio-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26audioCodec%3Dopus)%2Badd-limitation(scope%3DvideoCodec%26scopeName%3D*%26type%3DNotMatch%26name%3Dvideo.anamorphic%26value%3D999%26replace%3Dtrue)%2Badd-transcode-target(type%3DsubtitleProfile%26context%3Dstreaming%26protocol%3Dhttp%26container%3Dmkv%26subtitleCodec%3Dsrt)%2Bappend-transcode-target-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26videoCodec%3Dmpeg2video)%2Bappend-transcode-target-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26videoCodec%3Dhevc)%2Badd-limitation(scope%3DvideoCodec%26scopeName%3Dhevc%26type%3DMatch%26name%3Dvideo.profile%26list%3Dmain)&X-Plex-Device=X96Q_Max_Pro&X-Plex-Incomplete-Segments=1&X-Plex-Platform=Android&X-Plex-Platform-Version=10&X-Plex-Product=Plex%20for%20Android%20(TV)&X-Plex-Version=9.10.1.36024&X-Plex-Token=...J_W3&X-Plex-Language=en-us
11-13 12:59:58.672  e: Error fetching https://192.168.1.82:32400/video/:/transcode/universal/decision?audioBoost=100&autoAdjustQuality=0&directPlay=0&directStream=1&directStreamAudio=1&fastSeek=1&hasMDE=1&location=lan&maxVideoBitrate=200000&mediaIndex=-1&path=%2Ftv.plex.providers.epg.cloud%3A25%2Fmetadata%2Fplex%253A%252F%252Fepisode%252F633b2b68ad135b391d305d37&protocol=*&session=e60f2c08643c7a70-com-plexapp-android&subtitleSize=100&videoBitrate=200000&videoQuality=100&videoResolution=3840x2160&X-Plex-Client-Identifier=e60f2c08643c7a70-com-plexapp-android&X-Plex-Client-Platform=Android&X-Plex-Client-Profile-Extra=add-limitation(scope%3DvideoCodec%26scopeName%3Dh264%26type%3DupperBound%26name%3Dvideo.level%26value%3D62)%2Badd-limitation(scope%3DvideoCodec%26scopeName%3D*%26type%3DupperBound%26name%3Dvideo.width%26value%3D3840%26replace%3Dtrue)%2Badd-limitation(scope%3DvideoCodec%26scopeName%3D*%26type%3DupperBound%26name%3Dvideo.height%26value%3D2160%26replace%3Dtrue)%2Badd-limitation(scope%3DvideoCodec%26scopeName%3Dhevc%26type%3DnotMatch%26name%3Dvideo.DOVIProfile%26value%3D5)%2Badd-limitation(scope%3DvideoAudioCodec%26scopeName%3Daac%26type%3DupperBound%26name%3Daudio.channels%26value%3D8%26replace%3Dtrue)%2Badd-transcode-target-audio-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26audioCodec%3Dmp3)%2Badd-transcode-target-audio-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26audioCodec%3Dac3)%2Badd-transcode-target-audio-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26audioCodec%3Deac3)%2Badd-transcode-target-audio-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26audioCodec%3Ddca)%2Badd-transcode-target-audio-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26audioCodec%3Dopus)%2Badd-limitation(scope%3DvideoCodec%26scopeName%3D*%26type%3DNotMatch%26name%3Dvideo.anamorphic%26value%3D999%26replace%3Dtrue)%2Badd-transcode-target(type%3DsubtitleProfile%26context%3Dstreaming%26protocol%3Dhttp%26container%3Dmkv%26subtitleCodec%3Dsrt)%2Bappend-transcode-target-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26videoCodec%3Dmpeg2video)%2Bappend-transcode-target-codec(type%3DvideoProfile%26context%3Dstreaming%26protocol%3Dhls%26videoCodec%3Dhevc)%2Badd-limitation(scope%3DvideoCodec%26scopeName%3Dhevc%26type%3DMatch%26name%3Dvideo.profile%26list%3Dmain)&X-Plex-Device=X96Q_Max_Pro&X-Plex-Incomplete-Segments=1&X-Plex-Platform=Android&X-Plex-Platform-Version=10&X-Plex-Product=Plex%20for%20Android%20(TV)&X-Plex-Version=9.10.1.36024&X-Plex-Token=...tml>
11-13 12:59:58.674  e: [MediaDecisionEngine] Server failed to provide decision
11-13 12:59:58.675  i: [MediaDecisionEngine] Decision: CanPlay: true CanDirectPlay: false CanDirectStreamVideo: false CanDirectStreamAudio: false CanDirectPlaySubtitle: false CanTranscodeSubtitle: false CanDisplayVideo: true Transcode Reason: Direct Play was attempted but failed, fallen back to transcoding 
11-13 12:59:58.680  e: [ExoPlayer][EventLogger] playerFailed [eventTime=1109.13, mediaPos=0.00, window=0, period=0, errorCode=ERROR_CODE_IO_UNSPECIFIED
  com.google.android.exoplayer2.r: Source error
      at com.google.android.exoplayer2.w1.G(SourceFile:17)
      at com.google.android.exoplayer2.w1.handleMessage(SourceFile:279)
      at android.os.Handler.dispatchMessage(Handler.java:103)
      at android.os.Looper.loop(Looper.java:214)
      at android.os.HandlerThread.run(HandlerThread.java:67)
  Caused by: x3.i0$h: Unexpected NullPointerException: Attempt to invoke virtual method 'int com.plexapp.plex.net.r1.w0(java.lang.String)' on a null object reference
      at x3.i0$d.handleMessage(SourceFile:148)
      at android.os.Handler.dispatchMessage(Handler.java:107)
      ... 2 more
  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.plexapp.plex.net.r1.w0(java.lang.String)' on a null object reference
      at ce.u.b(SourceFile:19)
      at ce.v.c(SourceFile:9)
      at ce.v.onLoadCompleted(Unknown Source:2)
      at x3.i0$d.handleMessage(SourceFile:132)
      ... 3 more
]
11-13 12:59:58.682  e: [Player][ExoPlayer] Playback error detected
11-13 12:59:58.685  i: [Player][Timeline] Handling player error
11-13 12:59:58.686  i: [Player][Timeline] Playback stopped (error: true)
11-13 12:59:58.688  w: [Player][Timeline] player position was negative. Position time will be reported as 0.
11-13 12:59:58.690  e: An exception occurred: com.google.android.exoplayer2.r: Source error
11-13 12:59:58.691  e: Stacktrace: com.google.android.exoplayer2.r: Source error
	at com.google.android.exoplayer2.w1.G(SourceFile:17)
	at com.google.android.exoplayer2.w1.handleMessage(SourceFile:279)
	at android.os.Handler.dispatchMessage(Handler.java:103)
	at android.os.Looper.loop(Looper.java:214)
	at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: x3.i0$h: Unexpected NullPointerException: Attempt to invoke virtual method 'int com.plexapp.plex.net.r1.w0(java.lang.String)' on a null object reference
	at x3.i0$d.handleMessage(SourceFile:148)
	at android.os.Handler.dispatchMessage(Handler.java:107)
	... 2 more
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.plexapp.plex.net.r1.w0(java.lang.String)' on a null object reference
	at ce.u.b(SourceFile:19)
	at ce.v.c(SourceFile:9)
	at ce.v.onLoadCompleted(Unknown Source:2)
	at x3.i0$d.handleMessage(SourceFile:132)
	... 3 more

11-13 12:59:58.693  i: [ExoPlayer][EventLogger] state [eventTime=1109.14, mediaPos=0.00, window=0, period=0, IDLE]
11-13 12:59:58.702  i: Fetching [method:GET] https://192.168.1.82:32400/:/timeline?airingID=535&audioStreamID=1438&context=home%3Ahub.recent.channels&duration=1106805&guid=plex%3A%2F%2Fepisode%2F633b2b68ad135b391d305d37&key=%2Flivetv%2Fsessions%2F0436a615-7630-4ceb-8def-ce7ccc5051c0&playbackTime=1104035&playQueueItemID=5fc76de71c33bf002d6b1914-5fc70602678e02002ecd0041-1668360600000&ratingKey=559&state=stopped&time=0&token=...J_W3&X-Plex-Client-Identifier=e60f2c08643c7a70-com-plexapp-android&X-Plex-Token=...J_W3&X-Plex-Language=en-us
11-13 12:59:58.712  i: [Player][Timeline] Player error not known by server, reporting original player error (or a playback interrupted one)
11-13 12:59:58.713  i: [Player] Error reported: UnknownError (null)
11-13 12:59:58.714  i: [TranscodeSession] Stopping...
11-13 12:59:58.716  i: [TranscodeSession] Session already stopped.
11-13 12:59:58.717  i: [Player][Timeline] Playback stopped (error: false)
11-13 12:59:58.719  w: [Player][Timeline] player position was negative. Position time will be reported as 0.
11-13 12:59:58.730  i: Fetching [method:GET] https://192.168.1.82:32400/:/timeline?airingID=535&audioStreamID=1438&context=home%3Ahub.recent.channels&duration=1106805&guid=plex%3A%2F%2Fepisode%2F633b2b68ad135b391d305d37&key=%2Flivetv%2Fsessions%2F0436a615-7630-4ceb-8def-ce7ccc5051c0&playbackTime=1104035&playQueueItemID=5fc76de71c33bf002d6b1914-5fc70602678e02002ecd0041-1668360600000&ratingKey=559&state=stopped&time=0&token=...J_W3&X-Plex-Client-Identifier=e60f2c08643c7a70-com-plexapp-android&X-Plex-Token=...J_W3&X-Plex-Language=en-us
11-13 12:59:58.752  i: [Player][Error] Displaying player error...
11-13 12:59:58.754  i: [DialogBehaviour] Showing dialog.
11-13 13:00:00.575  i: [BandwidthDetectionBehaviour] Network buffering under-run detected.
11-13 13:00:00.578  i: [BandwidthQualityBehaviour] Original item bitrate is 0 kbps, maximum allowed bitrate is 0 kbps whilst our bandwidth is 1.4 Mbps.
11-13 13:00:00.583  i: [BandwidthDetectionBehaviour] Suggesting to switch to Play Original Quality.
11-13 13:00:00.595  w: [BandwidthDetectionBehaviour] Skipping quality change notification, as we are currently using 0 kbps and would request 0 kbps.
11-13 13:00:11.270  i: [Player] Engine being destroyed due to player deconstruction.
11-13 13:00:11.273  i: [EngineEventManager] onPlaybackStopped: Closed
11-13 13:00:11.278  i: [VideoAwakeBehaviour] Keep screen awake has been requested disabled for VideoAwakeBehaviour.
11-13 13:00:11.280  i: [TranscodeSession] Stopping...
11-13 13:00:11.282  i: [TranscodeSession] Session already stopped.
11-13 13:00:11.287  i: [SleepTimerBehaviour] Sleep timer behaviour changed.
11-13 13:00:11.291  i: [WiFiLockBehaviour] Releasing WiFi lock since playback was stopped.
11-13 13:00:11.293  i: [Player][Timeline] Playback stopped (error: false)
11-13 13:00:11.298  w: [Player][Timeline] player position was negative. Position time will be reported as 0.
11-13 13:00:11.305  i: [DisplayBehaviour] Cancelling stop playback runnable to prevent unexpected stop.
11-13 13:00:11.329  i: Fetching [method:DELETE] https://192.168.1.82:32400/media/grabbers/operations/5fc76de71c33bf002d6b1914-5fc70602678e02002ecd0041-e60f2c08643c7a70-com-plexapp-android?X-Plex-Token=...J_W3&X-Plex-Language=en-us
11-13 13:00:11.350  i: Fetching [method:GET] https://192.168.1.82:32400/:/timeline?airingID=535&audioStreamID=1438&context=home%3Ahub.recent.channels&duration=1106805&guid=plex%3A%2F%2Fepisode%2F633b2b68ad135b391d305d37&key=%2Flivetv%2Fsessions%2F0436a615-7630-4ceb-8def-ce7ccc5051c0&playbackTime=1104035&playQueueItemID=5fc76de71c33bf002d6b1914-5fc70602678e02002ecd0041-1668360600000&ratingKey=559&state=stopped&time=0&token=...J_W3&X-Plex-Client-Identifier=e60f2c08643c7a70-com-plexapp-android&X-Plex-Token=...J_W3&X-Plex-Language=en-us
11-13 13:00:11.390  e: Error fetching https://192.168.1.82:32400/media/grabbers/operations/5fc76de71c33bf002d6b1914-5fc70602678e02002ecd0041-e60f2c08643c7a70-com-plexapp-android?X-Plex-Token=...tml>
11-13 13:00:11.412  i: [BandwidthQualityBehaviour] Recording bandwidth for server as 1.4 Mbps.
11-13 13:00:11.419  i: [MediaSessionBehaviour] Updating state to STOPPED
11-13 13:00:11.437  i: [MemoryOptimisationBehaviour] Expanding memory cache.
11-13 13:00:11.439  i: [ExoPlayerEngine] Releasing media source due to engine destruction.
11-13 13:00:11.469  i: [VideoAwakeBehaviour] Keep screen awake has been requested disabled for VideoAwakeBehaviour.
11-13 13:00:11.477  i: [AudioFocusBehaviour] Behaviour being destroyed, giving up audio focus
11-13 13:00:11.481  i: [AudioFocusBehaviour] Given up focus.
11-13 13:00:11.541  i: [LiveAiringMediaItemsMonitor] Cancelling change detection
11-13 13:00:11.543  i: [DisplayBehaviour] Cancelling stop playback runnable to prevent unexpected stop.
11-13 13:00:11.544  i: [DisplayBehaviour] Reverting back to the original display mode.
11-13 13:00:11.546  i: [DisplayBehaviour] Mode is already set to our best mode of 1920x1080 @ 60.0000Hz (1).
11-13 13:00:11.569  i: [MediaSessionBehaviour] Releasing MediaSessionHelper
11-13 13:00:11.571  i: [MediaSessionHelper] Releasing media session with tag: video
11-13 13:00:11.644  i: [PlayerService] onDestroy
11-13 13:00:11.685  i: Resuming HomeActivity.
11-13 13:00:12.356  i: [ASS][Renderer] Surface has been destroyed, disconnecting.
11-13 13:00:12.672  i: [FFmpeg] [INFO] [FFmpegExtractor] Demuxer context has already been closed.
11-13 13:00:12.675  i: [FFmpeg] [INFO] [FFmpegExtractor] Source has been closed successfully.
11-13 13:00:12.678  i: [FFmpeg] [INFO] [FFmpegExtractor] Source has been terminated successfully.
11-13 13:00:16.208  i: [WebSocketApplicationBehaviour] Focus change detected. Focused: false

May or may not be related, but I’m seeing error messages in the pMS log pointing to an IP of my old xTeve instance. It’s currently not setup to use that DVR at all. How can I fix this?

Dec 04, 2022 21:20:43.613 [0x7f0808b5cb38] WARN - [HttpClient/HCl#1cc] HTTP error requesting GET http://192.168.1.84:34400/discover.json (7, Couldn't connect to server) (Failed to connect to 192.168.1.84 port 34400: Host is unreachable)
Dec 04, 2022 21:20:43.613 [0x7f07ff2b9b38] ERROR - DVR:Device: Error refreshing existing device device://tv.plex.grabbers.hdhomerun/2022-10-0FUW-DBLPFB, marking as dead.
Dec 04, 2022 21:20:43.613 [0x7f07ff2b9b38] DEBUG - DVR:Device: Testing grabber HDHomerun device device://tv.plex.grabbers.hdhomerun/2022-10-0FUW-DBLPFB:3 at http://192.168.1.84:34400
Dec 04, 2022 21:20:43.613 [0x7f07ff2b9b38] DEBUG - DVR:Device: Device device://tv.plex.grabbers.hdhomerun/2022-10-0FUW-DBLPFB:3 was already known, refreshing database info

I have resorted to using separate plex servers for Live TV and DVR. Although it’s quite annoying to change the Guide to my DVR playlist every time I want to record a program, it does appear to be working well.

Not much of a help here, but I have no issues with concurrent Live TV, channel switching and recording.

Also using IPTV via XTeve and mainly Android TV/Fire TV as clients.

Which OS are you running PMS on? I’m using Ubuntu Server 22.04

Asustor ADM 4.2 on an AS6604T
Plex runs native
XTeve in Docker

I just picked up a AS6604T for testing. Lets see how this goes…

Although I am a daily Plex user for LiveTV avoid the pain and don’t bother with Plex.
Android TiviMate works a dream(~$30 for a lifetime subscripion), or Jellyfin. Jellyfin, you can naively add IPTV or tuners and it just works, can even stream to other users.

xTeVe, is unsupported and just not reliable.

I have a lifetime subscription to TiviMate, and I don’t think it comes close to Plex (as far as recording goes). Recordings are only sorted by date recorded, so you can’t view recordings by show/series. You also can’t schedule a series recording, which is a deal breaker for me.
I have Jellyfin as well. The integrated TV features are excellent, and more reliable than any of my Plex setups, but the development of Jellyfin apps are in their infancy. The ROKU app is almost unusable. You have to severely modify the layout to make it look visually pleasing… and after all of your hard work, you find out that custom layouts don’t carry over to their apps.
As a proxy, I find that Xteve works perfectly fine. I can test xteve with vlc and have yet to see it fail.

Unbelievable! It works!
This led me to test other NAS solutions, and TrueNAS Core Plex plugin works as well. I’m shocked.
I’m goin to do some more tests to see why it doesn’t work when PMS is hosted on Linux or VM.
Thanks for the suggestion.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.