Hi Neighbor 
Thanks for the reference. It’s good (sort of) to know that this problem is not unique to my system. Like one commenter, I’d like to see a Plex engineer on the thread asking questions or providing information. But, having been on the engineering side of the conversation, I understand why Plex doesn’t expose their engineers to us. I also understand why they’re unlikely to devote engineering resources to unsupported configurations. 
My system is similar to yours. I know it’s not starved for CPU, memory or disk space or I/O, just like yours.
I’ve never seen the “Device not found” error or any other error for the locast2plex device in the DVR setup screen. As far as I can tell, the locast2plex interface for configuration works exactly like the one for h. On the other hand I may have found a smoking gun. I’m not enough of a Python guy to know if this is normal or not.
In the middle of two of the shows last night, one of the locast2plex main.py processes (it apparently forks and runs as two processes) threw two exceptions in a row. They were either caused by or lead to a broken pipe (see below). But the exception did not kill either of the main.py processes. Both have been running since I started them on September 20 and have survived many Python exceptions. I note that the exceptions I observed immediately follow the Exiting normally, received signal 15
that you have also observed.
Oct 06 00:07:46 shankscloud locast2plex[20984]: [366B blob data]
Oct 06 00:07:46 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:07:46] "GET /lineup_status.json HTTP/1.0" 200 -
Oct 06 00:07:46 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:07:46] "GET /discover.json HTTP/1.0" 200 -
Oct 06 00:07:46 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:07:46] "GET /lineup_status.json HTTP/1.0" 200 -
Oct 06 00:07:50 shankscloud locast2plex[20984]: [hls,applehttp @ 0x562dbda30900] Opening 'https://sea.locastnet.org/proxy/sea/kiro_src266994704.ts' for reading
Oct 06 00:07:50 shankscloud locast2plex[20984]: [hls,applehttp @ 0x55a2483e9900] Opening 'https://sea.locastnet.org/proxy/sea/king_src266994686.ts' for reading
Oct 06 00:07:50 shankscloud locast2plex[20984]: [290B blob data]
Oct 06 00:07:50 shankscloud locast2plex[20984]: video:258094kB audio:47907kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 10.669032%
Oct 06 00:07:50 shankscloud locast2plex[20984]: Exiting normally, received signal 15.
Oct 06 00:07:50 shankscloud locast2plex[20984]: Traceback (most recent call last):
Oct 06 00:07:50 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/SocketServer.py", line 293, in _handle_request_noblock
Oct 06 00:07:50 shankscloud locast2plex[20984]: self.process_request(request, client_address)
Oct 06 00:07:50 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/SocketServer.py", line 321, in process_request
Oct 06 00:07:50 shankscloud locast2plex[20984]: self.finish_request(request, client_address)
Oct 06 00:07:50 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
Oct 06 00:07:50 shankscloud locast2plex[20984]: self.RequestHandlerClass(request, client_address, self)
Oct 06 00:07:50 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/SocketServer.py", line 657, in __init__
Oct 06 00:07:50 shankscloud locast2plex[20984]: self.finish()
Oct 06 00:07:50 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/SocketServer.py", line 716, in finish
Oct 06 00:07:50 shankscloud locast2plex[20984]: self.wfile.close()
Oct 06 00:07:50 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/socket.py", line 283, in close
Oct 06 00:07:50 shankscloud locast2plex[20984]: self.flush()
Oct 06 00:07:50 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/socket.py", line 307, in flush
Oct 06 00:07:50 shankscloud locast2plex[20984]: self._sock.sendall(view[write_offset:write_offset+buffer_size])
Oct 06 00:07:50 shankscloud locast2plex[20984]: error: [Errno 32] Broken pipe
Oct 06 00:07:51 shankscloud locast2plex[20984]: [290B blob data]
Oct 06 00:07:51 shankscloud locast2plex[20984]: video:280236kB audio:46545kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 10.523701%
Oct 06 00:07:51 shankscloud locast2plex[20984]: Exiting normally, received signal 15.
Oct 06 00:07:51 shankscloud locast2plex[20984]: Traceback (most recent call last):
Oct 06 00:07:51 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/SocketServer.py", line 293, in _handle_request_noblock
Oct 06 00:07:51 shankscloud locast2plex[20984]: self.process_request(request, client_address)
Oct 06 00:07:51 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/SocketServer.py", line 321, in process_request
Oct 06 00:07:51 shankscloud locast2plex[20984]: self.finish_request(request, client_address)
Oct 06 00:07:51 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
Oct 06 00:07:51 shankscloud locast2plex[20984]: self.RequestHandlerClass(request, client_address, self)
Oct 06 00:07:51 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/SocketServer.py", line 657, in __init__
Oct 06 00:07:51 shankscloud locast2plex[20984]: self.finish()
Oct 06 00:07:51 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/SocketServer.py", line 716, in finish
Oct 06 00:07:51 shankscloud locast2plex[20984]: self.wfile.close()
Oct 06 00:07:51 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/socket.py", line 283, in close
Oct 06 00:07:51 shankscloud locast2plex[20984]: self.flush()
Oct 06 00:07:51 shankscloud locast2plex[20984]: File "/usr/lib/python2.7/socket.py", line 307, in flush
Oct 06 00:07:51 shankscloud locast2plex[20984]: self._sock.sendall(view[write_offset:write_offset+buffer_size])
Oct 06 00:07:51 shankscloud locast2plex[20984]: error: [Errno 32] Broken pipe
Oct 06 00:08:06 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:08:06] "GET /discover.json HTTP/1.0" 200 -
Oct 06 00:08:06 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:08:06] "GET /lineup_status.json HTTP/1.0" 200 -
Oct 06 00:08:11 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:08:11] "GET /device.xml HTTP/1.1" 200 -
Oct 06 00:08:12 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:08:12] "GET /lineup.json HTTP/1.0" 200 -
Oct 06 00:08:12 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:08:12] "GET /discover.json HTTP/1.0" 200 -
Oct 06 00:08:12 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:08:12] "GET /lineup_status.json HTTP/1.0" 200 -
Oct 06 00:08:12 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:08:12] "GET /discover.json HTTP/1.0" 200 -
Oct 06 00:08:12 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:08:12] "GET /lineup.json HTTP/1.0" 200 -
Oct 06 00:08:12 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:08:12] "GET /lineup_status.json HTTP/1.0" 200 -
Oct 06 00:08:13 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:08:13] "GET /watch/1572389491672 HTTP/1.1" 200 -
Oct 06 00:08:13 shankscloud locast2plex[20984]: 127.0.0.1 - - [06/Oct/2020 00:08:13] "GET /watch/1572389491219 HTTP/1.1" 200 -
The only error I see that might be associated with the third show is
Oct 06 03:08:18 shankscloud locast2plex[20984]: [hls,applehttp @ 0x55fba9dc6900] Failed to reload playlist 0
But the system was already in a possibly unstable state due to the prior errors. And as I said up thread, the recording completed properly once I killed its hung Plex Transcoder process. So I’m going to ignore that error for now.
Moving forward, I’m turning off the “Convert Video While Recording” feature (see below). I want to see if that improves things. Previously it was set to “Transcode.” Plex says Transcode can improve compatibility (With what? How? and Why? Plex help and documentation truly sucks), but they also say it’s a Beta feature. Maybe turning it off will improve stability.
Now I’m off to dig in the Plex logs to see if I can find any smoking guns over there. I’ll also be reporting the exceptions I see in the locast2plex github project.
I also have to wonder if limiting an instance of locast2plex to a single tuner would work around this problem. I’ve only seen it when two programs are recording at the same time. Maybe I should spawn multiple locast2plex units (I’m using systemd to launch it), each on their own port and advertising a single tuner. Something to think about.