AndroidHDMI for Channels (ah4c): A virtual channel tuner using HDMI Encoder(s) + streaming stick(s)

@bnhf
So I saw the authorization screen screen last night but was recording thru encoder so I didn’t want to troubleshoot. This am I was able to partially replicate. The attached log represents my tunings on different tv's.

Tuned to Tuner 1 - no issues or authorization screen - correct channel
Tuned to Tuner 2 - no issues or authorization screen - correct channel

Tuned to Tuner 3 - received authorization screen- defaulted to other channel

Utilized Quick guide and got the all devices in use err (my bad)
Backed out to normal guide and selected encoder channel. No issues or authorization screen- played correct channel.

I did check the “get global” setting on Tuner 3 and it reported null. This was prior to any tuning. I did not check the other tuners.

The one thing I noticed in the logs is that it showed a 'broken pipe' whenever the authorization screen shows up. I’ve added a log snippet showing.


2025-10-04T13:02:40.250934286Z [EXECUTE] Running [./scripts/osprey/directv/prebmitune.sh 10.0.1.76:5555 273]

2025-10-04T13:02:45.394908926Z [EXECUTE] Stdout: 'already connected to 10.0.1.76:5555

2025-10-04T13:02:45.395402558Z Waking 10.0.1.76:5555

2025-10-04T13:02:45.395458082Z prebmitune.sh is exiting for 10.0.1.76:5555 with exit code 0

2025-10-04T13:02:45.395513474Z '

2025-10-04T13:02:45.395537386Z [EXECUTE] Stderr: '+ streamerIP=10.0.1.76:5555

2025-10-04T13:02:45.395615288Z + streamerNoPort=10.0.1.76

2025-10-04T13:02:45.395642184Z + adbTarget='adb -s 10.0.1.76:5555'

2025-10-04T13:02:45.395672914Z + mkdir -p 10.0.1.76

2025-10-04T13:02:45.395697752Z + trap finish EXIT

2025-10-04T13:02:45.395722579Z + main

2025-10-04T13:02:45.395751996Z + adbConnect

2025-10-04T13:02:45.395774919Z + adb connect 10.0.1.76:5555

2025-10-04T13:02:45.395803949Z + local -i adbMaxRetries=3

2025-10-04T13:02:45.395836183Z + local -i adbCounter=0

2025-10-04T13:02:45.395860416Z + true

2025-10-04T13:02:45.395883355Z + adb -s 10.0.1.76:5555 shell input keyevent KEYCODE_WAKEUP

2025-10-04T13:02:45.395914765Z + local adbEventSuccess=0

2025-10-04T13:02:45.395940303Z + [[ 0 -eq 0 ]]

2025-10-04T13:02:45.395965062Z + break

2025-10-04T13:02:45.396002519Z + adbWake

2025-10-04T13:02:45.396029327Z + adb -s 10.0.1.76:5555 shell input keyevent KEYCODE_WAKEUP

2025-10-04T13:02:45.396054859Z + sleep 2

2025-10-04T13:02:45.396083479Z + echo 'Waking 10.0.1.76:5555'

2025-10-04T13:02:45.396113460Z + touch 10.0.1.76/adbAppRunning

2025-10-04T13:02:45.396139365Z + finish

2025-10-04T13:02:45.396161942Z + echo 'prebmitune.sh is exiting for 10.0.1.76:5555 with exit code 0'

2025-10-04T13:02:45.396192644Z '

2025-10-04T13:02:45.396214576Z [EXECUTE] Finished running ./scripts/osprey/directv/prebmitune.sh in 5.143998516s

2025-10-04T13:02:45.396900012Z [EXECUTE] Running [./scripts/osprey/directv/bmitune.sh 273 10.0.1.76:5555]

2025-10-04T13:02:46.606129541Z [EXECUTE] Stdout: 'bmitune.sh is exiting for 10.0.1.76:5555 with exit code 0

2025-10-04T13:02:46.606583220Z '

2025-10-04T13:02:46.606617362Z [EXECUTE] Stderr: '+ channelID='"273"'

2025-10-04T13:02:46.606648708Z + specialID=273

2025-10-04T13:02:46.606677890Z + streamerIP=10.0.1.76:5555

2025-10-04T13:02:46.606716767Z + streamerNoPort=10.0.1.76

2025-10-04T13:02:46.606742198Z + adbTarget='adb -s 10.0.1.76:5555'

2025-10-04T13:02:46.606768913Z + m3uName=directv.m3u

2025-10-04T13:02:46.606796913Z + trap finish EXIT

2025-10-04T13:02:46.606820827Z + main

2025-10-04T13:02:46.606843727Z + matchEncoderURL

2025-10-04T13:02:46.606866541Z + case "$streamerIP" in

2025-10-04T13:02:46.606891196Z + encoderURL=http://10.0.1.34/live/stream0

2025-10-04T13:02:46.606920028Z + tuneChannel

2025-10-04T13:02:46.606943986Z + adb -s 10.0.1.76:5555 shell input text '"273"'

2025-10-04T13:02:46.606970921Z + finish

2025-10-04T13:02:46.607044348Z + echo 'bmitune.sh is exiting for 10.0.1.76:5555 with exit code 0'

2025-10-04T13:02:46.607074596Z '

2025-10-04T13:02:46.607095846Z [EXECUTE] Finished running ./scripts/osprey/directv/bmitune.sh in 1.211032978s

2025-10-04T13:15:51.119749133Z [STATS] CPU usage: 4.171971651667418%

2025-10-04T13:15:51.120840330Z [STATS] Alloc = 2 MiB

2025-10-04T13:15:51.120883193Z [STATS] TotalAlloc = 2016 MiB

2025-10-04T13:15:51.120914352Z [STATS] Sys = 14 MiB

2025-10-04T13:15:51.120941461Z [STATS] NumGC = 14824

2025-10-04T13:15:51.120972103Z [STATS] Total memory: 5777 MiB

2025-10-04T13:15:51.121007682Z [STATS] Memory used: 1066 MiB

2025-10-04T13:15:51.121037580Z [STATS] Memory used percent: 18.45263455454611%

2025-10-04T13:45:51.119207531Z [STATS] CPU usage: 2.7749057893635443%

2025-10-04T13:45:51.119784665Z [STATS] Alloc = 2 MiB

2025-10-04T13:45:51.119826721Z [STATS] TotalAlloc = 2021 MiB

2025-10-04T13:45:51.119857259Z [STATS] Sys = 14 MiB

2025-10-04T13:45:51.119885881Z [STATS] NumGC = 14839

2025-10-04T13:45:51.119911643Z [STATS] Total memory: 5777 MiB

2025-10-04T13:45:51.119939487Z [STATS] Memory used: 1113 MiB

2025-10-04T13:45:51.119967788Z [STATS] Memory used percent: 19.26091537532444%

2025-10-04T14:03:33.718326998Z Tuner 0 is active - skipping

2025-10-04T14:03:33.718905179Z Attempting network tune for device http://10.0.1.34/live/stream1 10.0.1.29:5555 236

2025-10-04T14:03:33.723446665Z [EXECUTE] Running [./scripts/osprey/directv/prebmitune.sh 10.0.1.29:5555 236]

2025-10-04T14:03:38.860912051Z [EXECUTE] Stdout: 'already connected to 10.0.1.29:5555

2025-10-04T14:03:38.861412024Z Waking 10.0.1.29:5555

2025-10-04T14:03:38.861459611Z prebmitune.sh is exiting for 10.0.1.29:5555 with exit code 0

2025-10-04T14:03:38.861498171Z '

2025-10-04T14:03:38.861522133Z [EXECUTE] Stderr: '+ streamerIP=10.0.1.29:5555

2025-10-04T14:03:38.861553026Z + streamerNoPort=10.0.1.29

2025-10-04T14:03:38.861577755Z + adbTarget='adb -s 10.0.1.29:5555'

2025-10-04T14:03:38.861605038Z + mkdir -p 10.0.1.29

2025-10-04T14:03:38.861631038Z + trap finish EXIT

2025-10-04T14:03:38.861659829Z + main

2025-10-04T14:03:38.861683274Z + adbConnect

2025-10-04T14:03:38.861705982Z + adb connect 10.0.1.29:5555

2025-10-04T14:03:38.861733821Z + local -i adbMaxRetries=3

2025-10-04T14:03:38.861763351Z + local -i adbCounter=0

2025-10-04T14:03:38.861788641Z + true

2025-10-04T14:03:38.861861389Z + adb -s 10.0.1.29:5555 shell input keyevent KEYCODE_WAKEUP

2025-10-04T14:03:38.861895530Z + local adbEventSuccess=0

2025-10-04T14:03:38.861952487Z + [[ 0 -eq 0 ]]

2025-10-04T14:03:38.861980173Z + break

2025-10-04T14:03:38.862074345Z + adbWake

2025-10-04T14:03:38.862097794Z + adb -s 10.0.1.29:5555 shell input keyevent KEYCODE_WAKEUP

2025-10-04T14:03:38.862131586Z + sleep 2

2025-10-04T14:03:38.862155902Z + echo 'Waking 10.0.1.29:5555'

2025-10-04T14:03:38.862180801Z + touch 10.0.1.29/adbAppRunning

2025-10-04T14:03:38.862212352Z + finish

2025-10-04T14:03:38.862234677Z + echo 'prebmitune.sh is exiting for 10.0.1.29:5555 with exit code 0'

2025-10-04T14:03:38.862260478Z '

2025-10-04T14:03:38.862310793Z [EXECUTE] Finished running ./scripts/osprey/directv/prebmitune.sh in 5.137527713s

2025-10-04T14:03:38.862345849Z [EXECUTE] Running [./scripts/osprey/directv/bmitune.sh 236 10.0.1.29:5555]

2025-10-04T14:03:42.597061672Z [EXECUTE] Stdout: 'bmitune.sh is exiting for 10.0.1.29:5555 with exit code 0

2025-10-04T14:03:42.597495533Z '

2025-10-04T14:03:42.597531166Z [EXECUTE] Stderr: '+ channelID='"236"'

2025-10-04T14:03:42.597568378Z + specialID=236

2025-10-04T14:03:42.597594581Z + streamerIP=10.0.1.29:5555

2025-10-04T14:03:42.597622040Z + streamerNoPort=10.0.1.29

2025-10-04T14:03:42.597649340Z + adbTarget='adb -s 10.0.1.29:5555'

2025-10-04T14:03:42.597676522Z + m3uName=directv.m3u

2025-10-04T14:03:42.597702076Z + trap finish EXIT

2025-10-04T14:03:42.597726180Z + main

2025-10-04T14:03:42.597748698Z + matchEncoderURL

2025-10-04T14:03:42.597772004Z + case "$streamerIP" in

2025-10-04T14:03:42.597840133Z + encoderURL=http://10.0.1.34/live/stream1

2025-10-04T14:03:42.597872927Z + tuneChannel

2025-10-04T14:03:42.597896866Z + adb -s 10.0.1.29:5555 shell input text '"236"'

2025-10-04T14:03:42.597923242Z + finish

2025-10-04T14:03:42.597945254Z + echo 'bmitune.sh is exiting for 10.0.1.29:5555 with exit code 0'

2025-10-04T14:03:42.597971965Z '

2025-10-04T14:03:42.597999675Z [EXECUTE] Finished running ./scripts/osprey/directv/bmitune.sh in 3.735593774s

2025-10-04T14:07:33.656881861Z Tuner 0 is active - skipping

2025-10-04T14:07:33.657421341Z Tuner 1 is active - skipping

2025-10-04T14:07:33.657457876Z Attempting network tune for device http://10.0.1.34/live/stream2 10.0.1.77:5555 237

2025-10-04T14:07:33.663822490Z [EXECUTE] Running [./scripts/osprey/directv/prebmitune.sh 10.0.1.77:5555 237]

2025-10-04T14:07:38.532122924Z [EXECUTE] Stdout: 'already connected to 10.0.1.77:5555

2025-10-04T14:07:38.532716565Z Waking 10.0.1.77:5555

2025-10-04T14:07:38.532774015Z prebmitune.sh is exiting for 10.0.1.77:5555 with exit code 0

2025-10-04T14:07:38.532812999Z '

2025-10-04T14:07:38.532837361Z [EXECUTE] Stderr: '+ streamerIP=10.0.1.77:5555

2025-10-04T14:07:38.532872648Z + streamerNoPort=10.0.1.77

2025-10-04T14:07:38.532899602Z + adbTarget='adb -s 10.0.1.77:5555'

2025-10-04T14:07:38.532932919Z + mkdir -p 10.0.1.77

2025-10-04T14:07:38.532959419Z + trap finish EXIT

2025-10-04T14:07:38.532996203Z + main

2025-10-04T14:07:38.533024486Z + adbConnect

2025-10-04T14:07:38.533047677Z + adb connect 10.0.1.77:5555

2025-10-04T14:07:38.533071764Z + local -i adbMaxRetries=3

2025-10-04T14:07:38.533099436Z + local -i adbCounter=0

2025-10-04T14:07:38.533128274Z + true

2025-10-04T14:07:38.533152150Z + adb -s 10.0.1.77:5555 shell input keyevent KEYCODE_WAKEUP

2025-10-04T14:07:38.533180833Z + local adbEventSuccess=0

2025-10-04T14:07:38.533209237Z + [[ 0 -eq 0 ]]

2025-10-04T14:07:38.533235003Z + break

2025-10-04T14:07:38.533258484Z + adbWake

2025-10-04T14:07:38.533284872Z + adb -s 10.0.1.77:5555 shell input keyevent KEYCODE_WAKEUP

2025-10-04T14:07:38.533310460Z + sleep 2

2025-10-04T14:07:38.533334576Z + echo 'Waking 10.0.1.77:5555'

2025-10-04T14:07:38.533359628Z + touch 10.0.1.77/adbAppRunning

2025-10-04T14:07:38.533388693Z + finish

2025-10-04T14:07:38.533410974Z + echo 'prebmitune.sh is exiting for 10.0.1.77:5555 with exit code 0'

2025-10-04T14:07:38.533437724Z '

2025-10-04T14:07:38.533509276Z [EXECUTE] Finished running ./scripts/osprey/directv/prebmitune.sh in 4.868417403s

2025-10-04T14:07:38.533550153Z [EXECUTE] Running [./scripts/osprey/directv/bmitune.sh 237 10.0.1.77:5555]

2025-10-04T14:07:39.485952180Z [EXECUTE] Stdout: 'bmitune.sh is exiting for 10.0.1.77:5555 with exit code 0

2025-10-04T14:07:39.486112108Z '

2025-10-04T14:07:39.486233710Z [EXECUTE] Stderr: '+ channelID='"237"'

2025-10-04T14:07:39.486275317Z + specialID=237

2025-10-04T14:07:39.486307091Z + streamerIP=10.0.1.77:5555

2025-10-04T14:07:39.486332210Z + streamerNoPort=10.0.1.77

2025-10-04T14:07:39.486355791Z + adbTarget='adb -s 10.0.1.77:5555'

2025-10-04T14:07:39.486380583Z + m3uName=directv.m3u

2025-10-04T14:07:39.486405854Z + trap finish EXIT

2025-10-04T14:07:39.486429132Z + main

2025-10-04T14:07:39.486453523Z + matchEncoderURL

2025-10-04T14:07:39.486546139Z + case "$streamerIP" in

2025-10-04T14:07:39.486572718Z + encoderURL=http://10.0.1.34/live/stream2

2025-10-04T14:07:39.486609394Z + tuneChannel

2025-10-04T14:07:39.486633095Z + adb -s 10.0.1.77:5555 shell input text '"237"'

2025-10-04T14:07:39.486658492Z + finish

2025-10-04T14:07:39.486680306Z + echo 'bmitune.sh is exiting for 10.0.1.77:5555 with exit code 0'

2025-10-04T14:07:39.486706403Z '

2025-10-04T14:07:39.486728303Z [EXECUTE] Finished running ./scripts/osprey/directv/bmitune.sh in 953.666436ms

2025-10-04T14:08:27.237425900Z Tuner 0 is active - skipping

2025-10-04T14:08:27.237943801Z Tuner 1 is active - skipping

2025-10-04T14:08:27.237999797Z Tuner 2 is active - skipping

2025-10-04T14:08:27.299392917Z [ERR] Failed to tune device(s) not available

2025-10-04T14:08:27.299560498Z [GIN-debug] Request: 172.21.0.1 GET /play/tuner/241, latency: 61.92383ms, status: 500

2025-10-04T14:08:27.415832083Z [IO] io.Copy: write tcp 172.21.0.2:7654->172.21.0.1:37740: write: broken pipe

2025-10-04T14:08:27.416032228Z [IOINFO] Successfully copied 17506748 bytes

2025-10-04T14:08:27.416079854Z [IOINFO] Transfer speed: 2.8650540015226014 Mbits/second

2025-10-04T14:08:27.416111593Z Performing Close() for 10.0.1.77:5555

2025-10-04T14:08:27.416149150Z [EXECUTE] Running [./scripts/osprey/directv/stopbmitune.sh 10.0.1.77:5555 237]

2025-10-04T14:08:29.434824647Z [EXECUTE] Stdout: 'Sleep initiated for 10.0.1.77:5555

2025-10-04T14:08:29.435274894Z 10.0.1.77/stream_stopped written with epoch stop time

2025-10-04T14:08:29.435314989Z '

2025-10-04T14:08:29.435345565Z [EXECUTE] Stderr: '+ streamerIP=10.0.1.77:5555

2025-10-04T14:08:29.435382331Z + streamerNoPort=10.0.1.77

2025-10-04T14:08:29.435407195Z + adbTarget='adb -s 10.0.1.77:5555'

2025-10-04T14:08:29.435433787Z + main

2025-10-04T14:08:29.435460801Z + adbSleep

2025-10-04T14:08:29.435484829Z + sleep='input keyevent KEYCODE_SLEEP'

2025-10-04T14:08:29.435510171Z + adb -s 10.0.1.77:5555 shell input keyevent KEYCODE_SLEEP

2025-10-04T14:08:29.435540653Z + echo 'Sleep initiated for 10.0.1.77:5555'

2025-10-04T14:08:29.435566607Z + date +%s

2025-10-04T14:08:29.435590331Z + echo '10.0.1.77/stream_stopped written with epoch stop time'

2025-10-04T14:08:29.435623066Z '

2025-10-04T14:08:29.435644248Z [EXECUTE] Finished running ./scripts/osprey/directv/stopbmitune.sh in 2.018782327s

2025-10-04T14:08:29.435699094Z [GIN-debug] Request: 172.21.0.1 GET /play/tuner/237, latency: 55.778326061s, status: 200

2025-10-04T14:09:21.771221553Z Tuner 0 is active - skipping

2025-10-04T14:09:21.771782990Z Tuner 1 is active - skipping

2025-10-04T14:09:21.771822917Z Attempting network tune for device http://10.0.1.34/live/stream2 10.0.1.77:5555 241

2025-10-04T14:09:21.776659483Z [EXECUTE] Running [./scripts/osprey/directv/prebmitune.sh 10.0.1.77:5555 241]

2025-10-04T14:09:26.022464180Z [EXECUTE] Stdout: 'already connected to 10.0.1.77:5555

2025-10-04T14:09:26.022919229Z Waking 10.0.1.77:5555

2025-10-04T14:09:26.022962376Z prebmitune.sh is exiting for 10.0.1.77:5555 with exit code 0

2025-10-04T14:09:26.023055994Z '

2025-10-04T14:09:26.023090559Z [EXECUTE] Stderr: '+ streamerIP=10.0.1.77:5555

2025-10-04T14:09:26.023120232Z + streamerNoPort=10.0.1.77

2025-10-04T14:09:26.023146205Z + adbTarget='adb -s 10.0.1.77:5555'

2025-10-04T14:09:26.023245483Z + mkdir -p 10.0.1.77

2025-10-04T14:09:26.023273465Z + trap finish EXIT

2025-10-04T14:09:26.023306818Z + main

2025-10-04T14:09:26.023333750Z + adbConnect

2025-10-04T14:09:26.023357603Z + adb connect 10.0.1.77:5555

2025-10-04T14:09:26.023391363Z + local -i adbMaxRetries=3

2025-10-04T14:09:26.023420956Z + local -i adbCounter=0

2025-10-04T14:09:26.023445055Z + true

2025-10-04T14:09:26.023484032Z + adb -s 10.0.1.77:5555 shell input keyevent KEYCODE_WAKEUP

2025-10-04T14:09:26.023513693Z + local adbEventSuccess=0

2025-10-04T14:09:26.023552193Z + [[ 0 -eq 0 ]]

2025-10-04T14:09:26.023575891Z + break

2025-10-04T14:09:26.023606576Z + adbWake

2025-10-04T14:09:26.023632170Z + adb -s 10.0.1.77:5555 shell input keyevent KEYCODE_WAKEUP

2025-10-04T14:09:26.023661718Z + sleep 2

2025-10-04T14:09:26.023695559Z + echo 'Waking 10.0.1.77:5555'

2025-10-04T14:09:26.023721209Z + touch 10.0.1.77/adbAppRunning

2025-10-04T14:09:26.023745781Z + finish

2025-10-04T14:09:26.023778414Z + echo 'prebmitune.sh is exiting for 10.0.1.77:5555 with exit code 0'

2025-10-04T14:09:26.023804926Z '

2025-10-04T14:09:26.023857235Z [EXECUTE] Finished running ./scripts/osprey/directv/prebmitune.sh in 4.245833607s

2025-10-04T14:09:26.023892214Z [EXECUTE] Running [./scripts/osprey/directv/bmitune.sh 241 10.0.1.77:5555]

2025-10-04T14:09:27.185565797Z [EXECUTE] Stdout: 'bmitune.sh is exiting for 10.0.1.77:5555 with exit code 0

2025-10-04T14:09:27.186176833Z '

2025-10-04T14:09:27.186309746Z [EXECUTE] Stderr: '+ channelID='"241"'

2025-10-04T14:09:27.186394619Z + specialID=241

2025-10-04T14:09:27.186423681Z + streamerIP=10.0.1.77:5555

2025-10-04T14:09:27.186449661Z + streamerNoPort=10.0.1.77

2025-10-04T14:09:27.186476016Z + adbTarget='adb -s 10.0.1.77:5555'

2025-10-04T14:09:27.186504425Z + m3uName=directv.m3u

2025-10-04T14:09:27.186531139Z + trap finish EXIT

2025-10-04T14:09:27.186555463Z + main

2025-10-04T14:09:27.186578999Z + matchEncoderURL

2025-10-04T14:09:27.186602583Z + case "$streamerIP" in

2025-10-04T14:09:27.186627341Z + encoderURL=http://10.0.1.34/live/stream2

2025-10-04T14:09:27.186657051Z + tuneChannel

2025-10-04T14:09:27.186680715Z + adb -s 10.0.1.77:5555 shell input text '"241"'

2025-10-04T14:09:27.186707831Z + finish

2025-10-04T14:09:27.186729923Z + echo 'bmitune.sh is exiting for 10.0.1.77:5555 with exit code 0'

2025-10-04T14:09:27.186760067Z '

2025-10-04T14:09:27.186825669Z [EXECUTE] Finished running ./scripts/osprey/directv/bmitune.sh in 1.163709792s

2025-10-04T14:15:51.119446105Z [STATS] CPU usage: 4.313158683734284%

The 2nd snippet:

2025-10-03T11:58:05.624939094Z [IOINFO] Transfer speed: 3.3638440323427097 Mbits/second
2025-10-03T11:58:05.624891913Z [IOINFO] Successfully copied 39891492 bytes
2025-10-03T11:58:05.624060277Z [IO] io.Copy: write tcp 172.21.0.2:7654->172.21.0.1:43956: write: broken pipe
2025-10-03T11:56:32.333344218Z [EXECUTE] Finished running ./scripts/osprey/directv/bmitune.sh in 1.499111078s
2025-10-03T11:56:32.333322951Z '
2025-10-03T11:56:32.333295858Z + echo 'bmitune.sh is exiting for 10.0.1.76:5555 with exit code 0'
2025-10-03T11:56:32.333273991Z + finish
2025-10-03T11:56:32.333247900Z + adb -s 10.0.1.76:5555 shell input text '"355"'
2025-10-03T11:56:32.333224700Z + tuneChannel
2025-10-03T11:56:32.333144398Z + matchEncoderURL
2025-10-03T11:56:32.333170163Z + case "$streamerIP" in
2025-10-03T11:56:32.333194900Z + encoderURL=http://10.0.1.34/live/stream0
2025-10-03T11:56:32.333119421Z + main
2025-10-03T11:56:32.333094418Z + trap finish EXIT
2025-10-03T11:56:32.333068724Z + m3uName=directv.m3u
2025-10-03T11:56:32.333017034Z + streamerNoPort=10.0.1.76
2025-10-03T11:56:32.333041870Z + adbTarget='adb -s 10.0.1.76:5555'
2025-10-03T11:56:32.332948455Z + specialID=355
2025-10-03T11:56:32.332805703Z '
2025-10-03T11:56:32.332977991Z + streamerIP=10.0.1.76:5555
2025-10-03T11:56:32.332871524Z [EXECUTE] Stderr: '+ channelID='"355"'
2025-10-03T11:56:32.252229319Z [EXECUTE] Stdout: 'bmitune.sh is exiting for 10.0.1.76:5555 with exit code 0
2025-10-03T11:56:30.754355811Z [EXECUTE] Finished running ./scripts/osprey/directv/prebmitune.sh in 4.83790541s
2025-10-03T11:56:30.754395112Z [EXECUTE] Running [./scripts/osprey/directv/bmitune.sh 355 10.0.1.76:5555]
2025-10-03T11:56:30.754081463Z + break
2025-10-03T11:56:30.754171551Z + sleep 2
2025-10-03T11:56:30.754107886Z + adbWake
2025-10-03T11:56:30.754132801Z + adb -s 10.0.1.76:5555 shell input keyevent KEYCODE_WAKEUP
2025-10-03T11:56:30.754196936Z + echo 'Waking 10.0.1.76:5555'
2025-10-03T11:56:30.754229505Z + touch 10.0.1.76/adbAppRunning
2025-10-03T11:56:30.754262134Z + finish
2025-10-03T11:56:30.754291671Z + echo 'prebmitune.sh is exiting for 10.0.1.76:5555 with exit code 0'
2025-10-03T11:56:30.754321459Z '
2025-10-03T11:56:30.754026160Z + [[ 0 -eq 0 ]]
2025-10-03T11:56:30.753996366Z + local adbEventSuccess=0
2025-10-03T11:56:30.753941678Z + adb -s 10.0.1.76:5555 shell input keyevent KEYCODE_WAKEUP
2025-10-03T11:56:30.753568672Z [EXECUTE] Stderr: '+ streamerIP=10.0.1.76:5555
2025-10-03T11:56:30.753608002Z + streamerNoPort=10.0.1.76
2025-10-03T11:56:30.753634552Z + adbTarget='adb -s 10.0.1.76:5555'
2025-10-03T11:56:30.753668343Z + mkdir -p 10.0.1.76
2025-10-03T11:56:30.753698760Z + trap finish EXIT
2025-10-03T11:56:30.753758374Z + main
2025-10-03T11:56:30.753793350Z + adbConnect
2025-10-03T11:56:30.753825885Z + adb connect 10.0.1.76:5555
2025-10-03T11:56:30.753850708Z + local -i adbMaxRetries=3
2025-10-03T11:56:30.753917946Z + true
2025-10-03T11:56:30.753892011Z + local -i adbCounter=0
2025-10-03T11:56:25.910212729Z Attempting network tune for device http://10.0.1.34/live/stream0 10.0.1.76:5555 355 
2025-10-03T11:56:30.752735061Z [EXECUTE] Stdout: 'already connected to 10.0.1.76:5555
2025-10-03T11:56:25.914815681Z [EXECUTE] Running [./scripts/osprey/directv/prebmitune.sh 10.0.1.76:5555 355]
2025-10-03T11:56:30.753449775Z Waking 10.0.1.76:5555
2025-10-03T11:56:30.753494028Z prebmitune.sh is exiting for 10.0.1.76:5555 with exit code 0
2025-10-03T11:56:30.753544591Z '~~~

The broken pipe message is fairly standard, and isn't indicative of a problem to my knowledge.

What I think is more interesting, is that there isn't a single failure to connect via ADB in the log, which is what would trigger an actual ah4c reauth.

I still think the most likely thing is something else is trying to connect via ADB. If you're seeing a reauth message that you can basically just dismiss and carry on with ah4c, how can this be an actual reauth needed by ah4c?

I remember this coming up at some point in the ADBTuner thread, where it turned out that person had installed an ADB-driven remote control program on their phone -- and that turned out to be the culprit.

How do you know that auth prompt hadn't been sitting there for hours or days? Given this is the last tuner in line, it probably doesn't get used as often.

I'm pretty sure the null response tells us that adb key expiration isn't implemented on the Osprey in this version of the OS.

When there's a reauth pop-up on the screen this is going to screw up your tuning (especially when not using deeplinks), and normal tuning will only resume when the pop-up is dismissed -- which can only be done by an authorized device.

That could be but the Osprey powers down (might just be sleep) when not in use. And that wouldn’t explain why Tuner 1 gets it which is used daily. Last night Tuner 1 was recording and Tuner 2 got it. Backed out and reselected channel and it worked.

I’ve started watching the LinkPi web interface. I’ve been hoping to see the screen authorization prompt but I think it knows when I watching.

It’s easy enough to check tuners and see if it comes up from the iPad. I’ll also do a restart on the stack.

1 Like

If there's an issue with ah4c, I definitely want to fix it, but it's hard to imagine where that issue might lie.

Can you confirm for me that you're not actually re-authorizing anything -- but are just seeing the pop-ups? And if so, how often is this happening?

Also, go ahead and post all 3 scripts you're currently using, along with the M3U...

EDIT: Any chance you're using the OliveTin Action that checks the status of ADB devices connected via ah4c? If so, what frequency are you using?

Do not have Olive Tin but I learned your tip from above (ip:7655)

I’m not sure if it’s an ah4c issue or not. For background, the stack has been up running for 20+ days. It has been very sporadic. Last night and today issues were the first on a back to back day and on different tuners. I should probably the stack or at least restart and see if that makes a difference. This encoder has only had these 3 Osprey's.

I need to get you a log that only has a 'clean' issue. I have not reauthorized at any time.

To make sure you fully grasp, I’ll describe what I see:
Normal:
When I select a channel, the encoder sends the 'signal screen'. I then see a switch to DTV which is hazy. The requested channel number pops up on the lower and then it tunes. This is about 10-11 secs usually.

Abnormal:
When I select a channel, the encoder sends the 'signal screen'. When it switches to DTV, the authorization screen pops up (for about 15 secs)..The requested channel number does not pop up and it tunes to the last active channel. I can then back out to the guide then reselect the channel and it will be as normal.

I’m going to try and let it do it again so I can get a better log for you.

It's clear to me why you'd see the tuning behavior you're experiencing when there's an authorization pop-up on the screen when you start tuning. The behavior you're describing is exactly what I'd expect in that scenario. With a pop-up like this on the screen any ADB commands emulating a remote control (like sending numbers to change the channel) will be ignored.

Let me turn this around though, and ask if you understand what I'm saying? Specifically, if your Osprey is generating an authorization pop-up, that means the device creating that pop-up is not authorized and cannot send any ADB commands. Yet, from your description clearly ah4c is authorized, and that authorization has not expired (expiration is probably not even supported based on your previous posts).

As I requested above, I'd like you to post the exact 3 scripts you're using (prebmitune.sh, bmitune.sh and stopbmitune.sh) -- along with the M3U you're using. Maybe we're dealing with a timing issue, where you're starting to send keycodes to change the channel before the Osprey is totally awake, and this sometimes generates an auth pop-up?

I think you hit it on the head regarding a timing issue. That's why when I back out and reselect to does as expected.
For me to post those files, I would need to stop the stack so I gain access. If I’m stopping the stack, I would want to update since you’ve made changes for Ospreys. So I’m going to post my environmental variables because one may need to be changed (streamer app?).

After it’s running, I want to change the encoder url from ip/live/stream0 to ip:port/stream0. I saw an earlier post that mine is just a redirect.

TAG=latest
DOMAIN=local
ADBS_PORT=5037
HOST_PORT=7654
WSCR_PORT=7655
IPADDRESS=10.0.1.65:7654
NUMBER_TUNERS=3
TUNER1_IP=10.0.1.76:5555
ENCODER1_URL=http://10.0.1.34/live/stream0
TUNER2_IP=10.0.1.29:5555
ENCODER2_URL=http://10.0.1.34/live/stream1
TUNER3_IP=10.0.1.77:5555
ENCODER3_URL=http://10.0.1.34/live/stream2
TUNER4_IP=
ENCODER4_URL=
TUNER5_IP=
ENCODER5_URL=
STREAMER_APP=scripts/osprey/directv
CHANNELSIP=10.0.1.65
ALERT_SMTP_SERVER=
ALERT_AUTH_SERVER=
ALERT_EMAIL_FROM=
ALERT_EMAIL_PASS=
ALERT_EMAIL_TO=
UPDATE_SCRIPTS=true
UPDATE_M3US=false
TZ=US/CENTRAL
SPEED_MODE=false
KEEP_WATCHING=4h
HOST_DIR=/volume1/data

The scripts and M3Us can be found under /volume1/data/ah4c on your host computer. No need to stop the stack.

Yes, you'll want to change your encoder URLs so they are not redirects.

The correct STREAMER_APP value for you is scripts/osprey/dtvosprey, but do post the current scripts you're using under scripts/osprey/directv, in case they contain any modifications from stock.

Here's the 3 scripts before any update attempt. Due to permissions, I have to copy then I can open- also had to fire up computer as ipad doesnt like to copy.

I'm really wondering if it's not the redirect that's causing this. I just had an issue on a Windows 11 update that stopped allowing access to my Synology using its common name - had to switch to ip only even though they both pointed to the same network address (off topic).

stopbmitune

#!/bin/bash
#stopbmitune.sh for osprey/directv

#Debug on if uncommented
set -x

streamerIP="$1"
streamerNoPort="${streamerIP%%:*}"
adbTarget="adb -s $streamerIP"

#Device sleep
adbSleep() {
  sleep="input keyevent KEYCODE_SLEEP"

  $adbTarget shell $sleep
  echo "Sleep initiated for $streamerIP"
  date +%s > $streamerNoPort/stream_stopped
  echo "$streamerNoPort/stream_stopped written with epoch stop time"
}

main() {
  adbSleep
}

main

prebmitune:

#!/bin/bash
#prebmitune.sh for osprey/directv

#Debug on if uncommented
set -x

streamerIP="$1"
streamerNoPort="${streamerIP%%:*}"
adbTarget="adb -s $streamerIP"

mkdir -p $streamerNoPort

#Trap end of script run
finish() {
  echo "prebmitune.sh is exiting for $streamerIP with exit code $?"
}

trap finish EXIT

adbConnect() {
  adb connect $streamerIP

  local -i adbMaxRetries=3
  local -i adbCounter=0

  while true; do
    $adbTarget shell input keyevent KEYCODE_WAKEUP
    local adbEventSuccess=$?

    if [[ $adbEventSuccess -eq 0 ]]; then
      break
    fi

    if (($adbCounter > $adbMaxRetries)); then
      touch $streamerNoPort/adbCommunicationFail
      echo "Communication with $streamerIP failed after $adbMaxRetries retries"
      exit 2
    fi
    

    ((adbCounter++))
  done
}

adbWake() {

    $adbTarget shell input keyevent KEYCODE_WAKEUP; sleep 2;
    echo "Waking $streamerIP"
    touch $streamerNoPort/adbAppRunning

}

main() {
  adbConnect
  adbWake
}

main

bmitune:

#!/bin/bash
#bmitune.sh for osprey/directv
#2024.09.18

#Debug on if uncommented
set -x

#Global
channelID=\""$1\""
specialID="$1"
streamerIP="$2"
streamerNoPort="${streamerIP%%:*}"
adbTarget="adb -s $streamerIP"
m3uName="${STREAMER_APP#*/*/}.m3u"


#Trap end of script run
finish() {
  echo "bmitune.sh is exiting for $streamerIP with exit code $?"
}

trap finish EXIT

#Set encoderURL based on the value of streamerIP
matchEncoderURL() {

  case "$streamerIP" in
    "$TUNER1_IP")
        encoderURL=$ENCODER1_URL
        ;;
    "$TUNER2_IP")
        encoderURL=$ENCODER2_URL
        ;;
    "$TUNER3_IP")
        encoderURL=$ENCODER3_URL
        ;;
    "$TUNER4_IP")
        encoderURL=$ENCODER4_URL
        ;;
    "$TUNER5_IP")
        encoderURL=$ENCODER5_URL
        ;;
    "$TUNER6_IP")
        encoderURL=$ENCODER6_URL
        ;;
    "$TUNER7_IP")
        encoderURL=$ENCODER7_URL
        ;;
    "$TUNER8_IP")
        encoderURL=$ENCODER8_URL
        ;;
    "$TUNER9_IP")
        encoderURL=$ENCODER9_URL
        ;;
    *)
        exit 1
        ;;
  esac
}

#Tuning is based on channel name values from $m3uName.
tuneChannel() {
  
  $adbTarget shell input text $channelID; 
}


main() {
  matchEncoderURL
  tuneChannel
}

main

Current M3u;

#EXTM3U

#EXTINF:-1 channel-id="3" tvc-guide-stationid="35036",ABC-KATC
http://{{ .IPADDRESS }}/play/tuner/3

#EXTINF:-1 channel-id="10" tvc-guide-stationid="20467",CBS-KLFY
http://{{ .IPADDRESS }}/play/tuner/10

#EXTINF:-1 channel-id="254" channel-number="254",AMC
http://{{ .IPADDRESS }}/play/tuner/254

#EXTINF:-1 channel-id="265" channel-number="265",A&E
http://{{ .IPADDRESS }}/play/tuner/265

#EXTINF:-1 channel-id="273" channel-number="273" tvc-guide-stationid="68796" tvg-group="" tvg-logo="",POP HD
http://{{ .IPADDRESS }}/play/tuner/273

#EXTINF:-1 channel-id="282" channel-number="282",Animal Planet
http://{{ .IPADDRESS }}/play/tuner/282

#EXTINF:-1 channel-id="361" channel-number="361",AccuWeather
http://{{ .IPADDRESS }}/play/tuner/361

#EXTINF:-1 channel-id="362" channel-number="362" tvc-guide-stationid="58812",The Weather Channel HD
http://{{ .IPADDRESS }}/play/tuner/362

#EXTINF:-1 channel-id="340" channel-number="340",AXS TV
http://{{ .IPADDRESS }}/play/tuner/340

#EXTINF:-1 channel-id="293" channel-number="293",BabyFirst HD
http://{{ .IPADDRESS }}/play/tuner/293

#EXTINF:-1 channel-id="264" channel-number="264",BBC America
http://{{ .IPADDRESS }}/play/tuner/264

#EXTINF:-1 channel-id="329" channel-number="329",BET
http://{{ .IPADDRESS }}/play/tuner/329

#EXTINF:-1 channel-id="353" channel-number="353",Bloomberg TV
http://{{ .IPADDRESS }}/play/tuner/353

#EXTINF:-1 channel-id="298" channel-number="298",Boomerang
http://{{ .IPADDRESS }}/play/tuner/298

#EXTINF:-1 channel-id="237" channel-number="237",Bravo
http://{{ .IPADDRESS }}/play/tuner/237

#EXTINF:-1 channel-id="296" channel-number="296",Cartoon Network East
http://{{ .IPADDRESS }}/play/tuner/296

#EXTINF:-1 channel-id="341" channel-number="341",CleoTV
http://{{ .IPADDRESS }}/play/tuner/341

#EXTINF:-1 channel-id="327" channel-number="327",CMT
http://{{ .IPADDRESS }}/play/tuner/327

#EXTINF:-1 channel-id="355" channel-number="355",CNBC
http://{{ .IPADDRESS }}/play/tuner/355

#EXTINF:-1 channel-id="202" channel-number="202",CNN
http://{{ .IPADDRESS }}/play/tuner/202

#EXTINF:-1 channel-id="419" channel-number="419",CNN En Español
http://{{ .IPADDRESS }}/play/tuner/419

#EXTINF:-1 channel-id="358" channel-number="358",CNNi
http://{{ .IPADDRESS }}/play/tuner/358

#EXTINF:-1 channel-id="249" channel-number="249",Comedy Central
http://{{ .IPADDRESS }}/play/tuner/249

#EXTINF:-1 channel-id="350" channel-number="350",C-SPAN
http://{{ .IPADDRESS }}/play/tuner/350

#EXTINF:-1 channel-id="351" channel-number="351",C-SPAN2
http://{{ .IPADDRESS }}/play/tuner/351

#EXTINF:-1 channel-id="369" channel-number="369",Daystar
http://{{ .IPADDRESS }}/play/tuner/369

#EXTINF:-1 channel-id="278" channel-number="278",Discovery
http://{{ .IPADDRESS }}/play/tuner/278

#EXTINF:-1 channel-id="290" channel-number="290",Disney Channel
http://{{ .IPADDRESS }}/play/tuner/290

#EXTINF:-1 channel-id="289" channel-number="289",Disney Junior
http://{{ .IPADDRESS }}/play/tuner/289

#EXTINF:-1 channel-id="292" channel-number="292",Disney XD
http://{{ .IPADDRESS }}/play/tuner/292

#EXTINF:-1 channel-id="236" channel-number="236",E!
http://{{ .IPADDRESS }}/play/tuner/236

#EXTINF:-1 channel-id="267" channel-number="267",EarthxTV
http://{{ .IPADDRESS }}/play/tuner/267

#EXTINF:-1 channel-id="206" channel-number="206",ESPN
http://{{ .IPADDRESS }}/play/tuner/206

#EXTINF:-1 channel-id="209" channel-number="209",ESPN2
http://{{ .IPADDRESS }}/play/tuner/209

#EXTINF:-1 channel-id="314" channel-number="314",Family Movie Classics (FMC)
http://{{ .IPADDRESS }}/play/tuner/314

#EXTINF:-1 channel-id="231" channel-number="231",Food Network
http://{{ .IPADDRESS }}/play/tuner/231

#EXTINF:-1 channel-id="359" channel-number="359",FOX Business Network
http://{{ .IPADDRESS }}/play/tuner/359

#EXTINF:-1 channel-id="360" channel-number="360",FOX News Channel
http://{{ .IPADDRESS }}/play/tuner/360

#EXTINF:-1 channel-id="219" channel-number="219",FOX Sports 1
http://{{ .IPADDRESS }}/play/tuner/219

#EXTINF:-1 channel-id="363" channel-number="363",FOX Weather
http://{{ .IPADDRESS }}/play/tuner/363

#EXTINF:-1 channel-id="311" channel-number="311",Freeform
http://{{ .IPADDRESS }}/play/tuner/311

#EXTINF:-1 channel-id="248" channel-number="248",FX
http://{{ .IPADDRESS }}/play/tuner/248

#EXTINF:-1 channel-id="259" channel-number="259",FXX
http://{{ .IPADDRESS }}/play/tuner/259

#EXTINF:-1 channel-id="404" channel-number="404",Galavisión
http://{{ .IPADDRESS }}/play/tuner/404

#EXTINF:-1 channel-id="312" channel-number="312",Hallmark Channel
http://{{ .IPADDRESS }}/play/tuner/312

#EXTINF:-1 channel-id="565" channel-number="565",Hallmark Movies & Mysteries
http://{{ .IPADDRESS }}/play/tuner/565

#EXTINF:-1 channel-id="229" channel-number="229",HGTV
http://{{ .IPADDRESS }}/play/tuner/229

#EXTINF:-1 channel-id="204" channel-number="204",HLN
http://{{ .IPADDRESS }}/play/tuner/204

#EXTINF:-1 channel-id="240" channel-number="240",HSN
http://{{ .IPADDRESS }}/play/tuner/240

#EXTINF:-1 channel-id="333" channel-number="333",IFC
http://{{ .IPADDRESS }}/play/tuner/333

#EXTINF:-1 channel-id="285" channel-number="285",Investigation Discovery
http://{{ .IPADDRESS }}/play/tuner/285

#EXTINF:-1 channel-id="305" channel-number="305",ION
http://{{ .IPADDRESS }}/play/tuner/305

#EXTINF:-1 channel-id="252" channel-number="252",Lifetime
http://{{ .IPADDRESS }}/play/tuner/252

#EXTINF:-1 channel-id="281" channel-number="281",MotorTrend
http://{{ .IPADDRESS }}/play/tuner/281

#EXTINF:-1 channel-id="356" channel-number="356",MSNBC
http://{{ .IPADDRESS }}/play/tuner/356

#EXTINF:-1 channel-id="331" channel-number="331",MTV
http://{{ .IPADDRESS }}/play/tuner/331

#EXTINF:-1 channel-id="332" channel-number="332",MTV2
http://{{ .IPADDRESS }}/play/tuner/332

#EXTINF:-1 channel-id="276" channel-number="276",National Geographic Channel
http://{{ .IPADDRESS }}/play/tuner/276

#EXTINF:-1 channel-id="349" channel-number="349",Newsmax
http://{{ .IPADDRESS }}/play/tuner/349

#EXTINF:-1 channel-id="299" channel-number="299",Nickelodeon
http://{{ .IPADDRESS }}/play/tuner/299

#EXTINF:-1 channel-id="274" channel-number="274",Ovation
http://{{ .IPADDRESS }}/play/tuner/274

#EXTINF:-1 channel-id="241" channel-number="241",Paramount Network
http://{{ .IPADDRESS }}/play/tuner/241

#EXTINF:-1 channel-id="288" channel-number="288",PBS Kids
http://{{ .IPADDRESS }}/play/tuner/288

#EXTINF:-1 channel-id="275" channel-number="275",QVC
http://{{ .IPADDRESS }}/play/tuner/275

#EXTINF:-1 channel-id="315" channel-number="315",QVC2
http://{{ .IPADDRESS }}/play/tuner/315

#EXTINF:-1 channel-id="318" channel-number="318",QVC3
http://{{ .IPADDRESS }}/play/tuner/318

#EXTINF:-1 channel-id="238" channel-number="238",Reelz
http://{{ .IPADDRESS }}/play/tuner/238

#EXTINF:-1 channel-id="384" channel-number="384",Revolt
http://{{ .IPADDRESS }}/play/tuner/384

#EXTINF:-1 channel-id="345" channel-number="345",RFD-TV
http://{{ .IPADDRESS }}/play/tuner/345

#EXTINF:-1 channel-id="320" channel-number="320",Scientology Network
http://{{ .IPADDRESS }}/play/tuner/320

#EXTINF:-1 channel-id="226" channel-number="226",Shop LC
http://{{ .IPADDRESS }}/play/tuner/226

#EXTINF:-1 channel-id="239" channel-number="239",SundanceTV
http://{{ .IPADDRESS }}/play/tuner/239

#EXTINF:-1 channel-id="244" channel-number="244",Syfy
http://{{ .IPADDRESS }}/play/tuner/244

#EXTINF:-1 channel-id="247" channel-number="247",TBS
http://{{ .IPADDRESS }}/play/tuner/247

#EXTINF:-1 channel-id="256" channel-number="256",TCM
http://{{ .IPADDRESS }}/play/tuner/256

#EXTINF:-1 channel-id="303" channel-number="303",TeenNick
http://{{ .IPADDRESS }}/play/tuner/303

#EXTINF:-1 channel-id="347" channel-number="347",The First
http://{{ .IPADDRESS }}/play/tuner/347

#EXTINF:-1 channel-id="269" channel-number="269",The HISTORY Channel
http://{{ .IPADDRESS }}/play/tuner/269

#EXTINF:-1 channel-id="342" channel-number="342",TheGrio
http://{{ .IPADDRESS }}/play/tuner/342

#EXTINF:-1 channel-id="280" channel-number="280",TLC
http://{{ .IPADDRESS }}/play/tuner/280

#EXTINF:-1 channel-id="245" channel-number="245",TNT
http://{{ .IPADDRESS }}/play/tuner/245

#EXTINF:-1 channel-id="246" channel-number="246",truTV
http://{{ .IPADDRESS }}/play/tuner/246

#EXTINF:-1 channel-id="304" channel-number="304",TV Land
http://{{ .IPADDRESS }}/play/tuner/304

#EXTINF:-1 channel-id="242" channel-number="242",USA Network
http://{{ .IPADDRESS }}/play/tuner/242

#EXTINF:-1 channel-id="335" channel-number="335",VH1
http://{{ .IPADDRESS }}/play/tuner/335

#EXTINF:-1 channel-id="271" channel-number="271",VICE
http://{{ .IPADDRESS }}/play/tuner/271

#EXTINF:-1 channel-id="260" channel-number="260",WE tv
http://{{ .IPADDRESS }}/play/tuner/260

#EXTINF:-1 channel-id="674" channel-number="674" tvc-guide-stationid="77744",Space City Home Network
http://{{ .IPADDRESS }}/play/tuner/674

Maybe. It's certainly worth changing that first before we do anything else.

If that doesn't work, I think we'll try adding a test for whether or not your Osprey's display is on before sending any additional commands.

So I changed all 3 encoder URL’s from the redirect to ip:8090/stream0 ; stream1; stream2

Restarted the container. Tested Tuner1 and it's fine. I'm sure the others will also tune.

I’ll watch it a couple of days and check a few other things. Then probably update to latest version.

It's really been steady as I've been recording the Astros every day thru the encoder.

On your other post regarding overriding the Adb authorization, should I do that or just wait for now. I’ve never had to reauthorize.

There shouldn't be any need to do that -- wait for now.

Thought I would post the portainer log from restart after changing the Encoder URL’s from redirect to actual port. Nothing unusual.

2025-10-04T22:47:05.866771737Z 127.0.0.1	localhost
2025-10-04T22:47:05.867617219Z ::1	localhost ip6-localhost ip6-loopback
2025-10-04T22:47:05.867747366Z fe00::0	ip6-localnet
2025-10-04T22:47:05.867840915Z ff00::0	ip6-mcastprefix
2025-10-04T22:47:05.867936672Z ff02::1	ip6-allnodes
2025-10-04T22:47:05.868156295Z ff02::2	ip6-allrouters
2025-10-04T22:47:05.868194021Z 172.21.0.2	ah4c
2025-10-04T22:47:06.204557984Z * daemon not running; starting now at tcp:5037
2025-10-04T22:47:06.228431245Z * daemon started successfully
2025-10-04T22:47:06.228624858Z List of devices attached
2025-10-04T22:47:06.229112448Z 
2025-10-04T22:47:06.283833431Z connected to 10.0.1.76:5555
2025-10-04T22:47:06.314552639Z connected to 10.0.1.29:5555
2025-10-04T22:47:06.342552019Z connected to 10.0.1.77:5555
2025-10-04T22:47:06.361836968Z No existing ./scripts/firetv/directv/prebmitune.sh found or UPDATE_SCRIPTS set to true
2025-10-04T22:47:06.363709082Z No existing ./scripts/osprey/directv/prebmitune.sh found or UPDATE_SCRIPTS set to true
2025-10-04T22:47:06.370103490Z No existing ./scripts/firetv/directv/bmitune.sh found or UPDATE_SCRIPTS set to true
2025-10-04T22:47:06.403220134Z No existing ./scripts/osprey/directv/bmitune.sh found or UPDATE_SCRIPTS set to true
2025-10-04T22:47:06.405278098Z No existing ./scripts/firetv/directv/stopbmitune.sh found or UPDATE_SCRIPTS set to true
2025-10-04T22:47:06.407125115Z No existing ./scripts/osprey/directv/stopbmitune.sh found or UPDATE_SCRIPTS set to true
2025-10-04T22:47:06.413660113Z Existing directv.m3u found, and will be preserved
2025-10-04T22:47:06.413942580Z Existing dtvdeeplinks.m3u found, and will be preserved
2025-10-04T22:47:06.414139804Z Existing dtvosprey.m3u found, and will be preserved
2025-10-04T22:47:06.414304094Z Existing dtvstream.m3u found, and will be preserved
2025-10-04T22:47:06.414463541Z Existing dtvstreamdeeplinks.m3u found, and will be preserved
2025-10-04T22:47:06.414633699Z Existing foo-fighters.m3u found, and will be preserved
2025-10-04T22:47:06.414792210Z Existing fubo.m3u found, and will be preserved
2025-10-04T22:47:06.414952410Z Existing hulu.m3u found, and will be preserved
2025-10-04T22:47:06.415134133Z Existing livetv.m3u found, and will be preserved
2025-10-04T22:47:06.415294639Z Existing nbc.m3u found, and will be preserved
2025-10-04T22:47:06.415446230Z Existing npo.m3u found, and will be preserved
2025-10-04T22:47:06.415605894Z Existing pbs-seatac.m3u found, and will be preserved
2025-10-04T22:47:06.415759570Z Existing pbs-worcester.m3u found, and will be preserved
2025-10-04T22:47:06.415928081Z Existing silicondust.m3u found, and will be preserved
2025-10-04T22:47:06.416107981Z Existing sling.m3u found, and will be preserved
2025-10-04T22:47:06.416271251Z Existing spectrum.m3u found, and will be preserved
2025-10-04T22:47:06.416422201Z Existing xfinity.m3u found, and will be preserved
2025-10-04T22:47:06.416582948Z Existing youtubetv_shield.m3u found, and will be preserved
2025-10-04T22:47:06.416761883Z Existing youtubetv.m3u found, and will be preserved
2025-10-04T22:47:06.535462091Z [START] ah4c is starting
2025-10-04T22:47:06.536150559Z [ENV] Not loading env
2025-10-04T22:47:06.536305002Z [ENV] IPADDRESS                  10.0.1.65:7654
2025-10-04T22:47:06.536420332Z [ENV] ALERT_SMTP_SERVER          
2025-10-04T22:47:06.536579181Z [ENV] ALERT_AUTH_SERVER          
2025-10-04T22:47:06.536706369Z [ENV] ALERT_EMAIL_FROM           
2025-10-04T22:47:06.536831995Z [ENV] ALERT_EMAIL_PASS           
2025-10-04T22:47:06.537014466Z [ENV] ALERT_EMAIL_TO             
2025-10-04T22:47:06.537137907Z [ENV] ALERT_WEBHOOK_URL          
2025-10-04T22:47:06.537259861Z [ENV] ALLOW_DEBUG_VIDEO_PREVIEW  
2025-10-04T22:47:06.537405084Z [ENV] Creating tuner             1
2025-10-04T22:47:06.537529599Z [ENV] ENCODER1_URL               http://10.0.1.34:8090/stream0
2025-10-04T22:47:06.537649526Z [ENV] TUNER1_IP                  10.0.1.76:5555
2025-10-04T22:47:06.537775675Z [ENV] CMD1                       
2025-10-04T22:47:06.537884634Z [ENV] TEECMD1                    
2025-10-04T22:47:06.538013828Z [ENV] PRE SCRIPT                 ./scripts/osprey/directv/prebmitune.sh
2025-10-04T22:47:06.538135017Z [ENV] START SCRIPT               ./scripts/osprey/directv/bmitune.sh
2025-10-04T22:47:06.538257007Z [ENV] STOP SCRIPT                ./scripts/osprey/directv/stopbmitune.sh
2025-10-04T22:47:06.538379810Z [ENV] REBOOT SCRIPT              ./scripts/osprey/directv/reboot.sh
2025-10-04T22:47:06.538508923Z [ENV] Creating tuner             2
2025-10-04T22:47:06.538615316Z [ENV] ENCODER2_URL               http://10.0.1.34:8090/stream1
2025-10-04T22:47:06.538738436Z [ENV] TUNER2_IP                  10.0.1.29:5555
2025-10-04T22:47:06.538841865Z [ENV] CMD2                       
2025-10-04T22:47:06.538943844Z [ENV] TEECMD2                    
2025-10-04T22:47:06.539072261Z [ENV] PRE SCRIPT                 ./scripts/osprey/directv/prebmitune.sh
2025-10-04T22:47:06.539191903Z [ENV] START SCRIPT               ./scripts/osprey/directv/bmitune.sh
2025-10-04T22:47:06.539296647Z [ENV] STOP SCRIPT                ./scripts/osprey/directv/stopbmitune.sh
2025-10-04T22:47:06.539415611Z [ENV] REBOOT SCRIPT              ./scripts/osprey/directv/reboot.sh
2025-10-04T22:47:06.539538635Z [ENV] Creating tuner             3
2025-10-04T22:47:06.539658985Z [ENV] ENCODER3_URL               http://10.0.1.34:8090/stream2
2025-10-04T22:47:06.539774905Z [ENV] TUNER3_IP                  10.0.1.77:5555
2025-10-04T22:47:06.539877668Z [ENV] CMD3                       
2025-10-04T22:47:06.540010827Z [ENV] TEECMD3                    
2025-10-04T22:47:06.540111161Z [ENV] PRE SCRIPT                 ./scripts/osprey/directv/prebmitune.sh
2025-10-04T22:47:06.540222511Z [ENV] START SCRIPT               ./scripts/osprey/directv/bmitune.sh
2025-10-04T22:47:06.540327303Z [ENV] STOP SCRIPT                ./scripts/osprey/directv/stopbmitune.sh
2025-10-04T22:47:06.540450884Z [ENV] REBOOT SCRIPT              ./scripts/osprey/directv/reboot.sh
2025-10-04T22:47:06.540575945Z [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
2025-10-04T22:47:06.540633840Z  - using env:	export GIN_MODE=release
2025-10-04T22:47:06.540668475Z  - using code:	gin.SetMode(gin.ReleaseMode)
2025-10-04T22:47:06.540704788Z 
2025-10-04T22:47:06.540821649Z [GIN-debug] GET    /favicon.ico              --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2025-10-04T22:47:06.540953749Z [GIN-debug] HEAD   /favicon.ico              --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2025-10-04T22:47:06.547625711Z [GIN-debug] Loaded HTML Templates (11): 
2025-10-04T22:47:06.547773058Z 	- editm3u.html
2025-10-04T22:47:06.547811089Z 	- index.html
2025-10-04T22:47:06.547843755Z 	- logs.html
2025-10-04T22:47:06.547869486Z 	- status.html
2025-10-04T22:47:06.548781521Z 	- status_and_logs.html
2025-10-04T22:47:06.548822648Z 	- 
2025-10-04T22:47:06.548854918Z 	- config.html
2025-10-04T22:47:06.548891188Z 	- routes.html
2025-10-04T22:47:06.548923680Z 	- stream.html
2025-10-04T22:47:06.548949562Z 	- edit.html
2025-10-04T22:47:06.548974444Z 	- m3us.html
2025-10-04T22:47:06.549012042Z 
2025-10-04T22:47:06.549199843Z [GIN-debug] GET    /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2025-10-04T22:47:06.549353551Z [GIN-debug] HEAD   /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2025-10-04T22:47:06.549456111Z [GIN-debug] GET    /                         --> main.run.func1 (2 handlers)
2025-10-04T22:47:06.549578107Z [GIN-debug] GET    /routes                   --> main.run.func2 (2 handlers)
2025-10-04T22:47:06.549677656Z [GIN-debug] GET    /play/tuner:tuner/:channel --> main.run.func3 (2 handlers)
2025-10-04T22:47:06.549799913Z [GIN-debug] GET    /m3u/:channel             --> main.run.func4 (2 handlers)
2025-10-04T22:47:06.549891598Z [GIN-debug] GET    /env                      --> main.run.func5 (2 handlers)
2025-10-04T22:47:06.551194181Z [GIN-debug] GET    /logs/text                --> main.run.func6 (2 handlers)
2025-10-04T22:47:06.551311061Z [GIN-debug] GET    /logs                     --> main.run.func7 (2 handlers)
2025-10-04T22:47:06.551417227Z [GIN-debug] GET    /status/andlogs           --> main.run.func8 (2 handlers)
2025-10-04T22:47:06.551548631Z [GIN-debug] GET    /logs/json                --> main.run.func9 (2 handlers)
2025-10-04T22:47:06.551661616Z [GIN-debug] GET    /video                    --> main.run.func10 (2 handlers)
2025-10-04T22:47:06.551779618Z [GIN-debug] GET    /status                   --> main.statusPageHandler (2 handlers)
2025-10-04T22:47:06.551878829Z [GIN-debug] GET    /api/status               --> main.apiStatusHandler (2 handlers)
2025-10-04T22:47:06.551979499Z [GIN-debug] GET    /stream                   --> main.run.func11 (2 handlers)
2025-10-04T22:47:06.552097682Z [GIN-debug] GET    /test/webhook             --> main.run.func12 (2 handlers)
2025-10-04T22:47:06.552196409Z [GIN-debug] GET    /test/email               --> main.run.func13 (2 handlers)
2025-10-04T22:47:06.552296928Z [GIN-debug] GET    /status/channelsactivity  --> main.run.func14 (2 handlers)
2025-10-04T22:47:06.552404724Z [GIN-debug] GET    /edit                     --> main.run.func15 (2 handlers)
2025-10-04T22:47:06.552653269Z [GIN-debug] POST   /save                     --> main.run.func16 (2 handlers)
2025-10-04T22:47:06.552688855Z [GIN-debug] POST   /m3usave/:file            --> main.run.func17 (2 handlers)
2025-10-04T22:47:06.552738681Z [GIN-debug] GET    /m3us                     --> main.run.func18 (2 handlers)
2025-10-04T22:47:06.552767518Z [GIN-debug] GET    /editm3u/:file            --> main.run.func19 (2 handlers)
2025-10-04T22:47:06.552804244Z [GIN-debug] GET    /config                   --> main.run.func20 (2 handlers)
2025-10-04T22:47:06.552839101Z [GIN-debug] POST   /configsave               --> main.run.func21 (2 handlers)
2025-10-04T22:47:06.552882572Z [START] ah4c is ready
2025-10-04T22:47:06.553171774Z [GIN-debug] Listening and serving HTTP on :7654
2025-10-04T22:47:07.846370530Z 
2025-10-04T22:47:07.846845107Z > [email protected] start
2025-10-04T22:47:07.846897117Z > node ./index.js
2025-10-04T22:47:07.846929600Z 
2025-10-04T22:47:08.955315973Z Listening on:
2025-10-04T22:47:08.955537219Z 	http://ah4c:8000 http://localhost:8000
2025-10-04T22:47:08.956347879Z 	http://127.0.0.1:8000 http://172.21.0.2:8000
2025-10-04T22:48:05.990522820Z Attempting network tune for device http://10.0.1.34:8090/stream0 10.0.1.76:5555 265 
2025-10-04T22:48:05.993076094Z [EXECUTE] Running [./scripts/osprey/directv/prebmitune.sh 10.0.1.76:5555 265]
2025-10-04T22:48:10.306552082Z [EXECUTE] Stdout: 'already connected to 10.0.1.76:5555
2025-10-04T22:48:10.307031228Z Waking 10.0.1.76:5555
2025-10-04T22:48:10.307081554Z prebmitune.sh is exiting for 10.0.1.76:5555 with exit code 0
2025-10-04T22:48:10.307125245Z '
2025-10-04T22:48:10.307158354Z [EXECUTE] Stderr: '+ streamerIP=10.0.1.76:5555
2025-10-04T22:48:10.307188559Z + streamerNoPort=10.0.1.76
2025-10-04T22:48:10.307215073Z + adbTarget='adb -s 10.0.1.76:5555'
2025-10-04T22:48:10.307250556Z + mkdir -p 10.0.1.76
2025-10-04T22:48:10.307277033Z + trap finish EXIT
2025-10-04T22:48:10.307309581Z + main
2025-10-04T22:48:10.307334124Z + adbConnect
2025-10-04T22:48:10.307358529Z + adb connect 10.0.1.76:5555
2025-10-04T22:48:10.307389962Z + local -i adbMaxRetries=3
2025-10-04T22:48:10.307419172Z + local -i adbCounter=0
2025-10-04T22:48:10.307451464Z + true
2025-10-04T22:48:10.307476633Z + adb -s 10.0.1.76:5555 shell input keyevent KEYCODE_WAKEUP
2025-10-04T22:48:10.307505471Z + local adbEventSuccess=0
2025-10-04T22:48:10.307537801Z + [[ 0 -eq 0 ]]
2025-10-04T22:48:10.307561514Z + break
2025-10-04T22:48:10.307584827Z + adbWake
2025-10-04T22:48:10.307616724Z + adb -s 10.0.1.76:5555 shell input keyevent KEYCODE_WAKEUP
2025-10-04T22:48:10.307645871Z + sleep 2
2025-10-04T22:48:10.307676722Z + echo 'Waking 10.0.1.76:5555'
2025-10-04T22:48:10.307703144Z + touch 10.0.1.76/adbAppRunning
2025-10-04T22:48:10.307728618Z + finish
2025-10-04T22:48:10.307789699Z + echo 'prebmitune.sh is exiting for 10.0.1.76:5555 with exit code 0'
2025-10-04T22:48:10.307863812Z '
2025-10-04T22:48:10.307891854Z [EXECUTE] Finished running ./scripts/osprey/directv/prebmitune.sh in 4.310734437s
2025-10-04T22:48:10.307961148Z [EXECUTE] Running [./scripts/osprey/directv/bmitune.sh 265 10.0.1.76:5555]
2025-10-04T22:48:11.429908645Z [EXECUTE] Stdout: 'bmitune.sh is exiting for 10.0.1.76:5555 with exit code 0
2025-10-04T22:48:11.430324588Z '
2025-10-04T22:48:11.430364112Z [EXECUTE] Stderr: '+ channelID='"265"'
2025-10-04T22:48:11.430400985Z + specialID=265
2025-10-04T22:48:11.430427575Z + streamerIP=10.0.1.76:5555
2025-10-04T22:48:11.430453127Z + streamerNoPort=10.0.1.76
2025-10-04T22:48:11.430477764Z + adbTarget='adb -s 10.0.1.76:5555'
2025-10-04T22:48:11.430503583Z + m3uName=directv.m3u
2025-10-04T22:48:11.430530795Z + trap finish EXIT
2025-10-04T22:48:11.430556239Z + main
2025-10-04T22:48:11.430578647Z + matchEncoderURL
2025-10-04T22:48:11.430600997Z + case "$streamerIP" in
2025-10-04T22:48:11.430625402Z + encoderURL=http://10.0.1.34:8090/stream0
2025-10-04T22:48:11.430653789Z + tuneChannel
2025-10-04T22:48:11.430676844Z + adb -s 10.0.1.76:5555 shell input text '"265"'
2025-10-04T22:48:11.430703598Z + finish
2025-10-04T22:48:11.430725116Z + echo 'bmitune.sh is exiting for 10.0.1.76:5555 with exit code 0'
2025-10-04T22:48:11.430752228Z '
2025-10-04T22:48:11.430773411Z [EXECUTE] Finished running ./scripts/osprey/directv/bmitune.sh in 1.126096668s
2025-10-04T22:48:27.286295495Z [IO] io.Copy: write tcp 172.21.0.2:7654->172.21.0.1:38032: write: broken pipe
2025-10-04T22:48:27.286738152Z [IOINFO] Successfully copied 6764992 bytes
2025-10-04T22:48:27.286781156Z [IOINFO] Transfer speed: 3.1868883198267 Mbits/second
2025-10-04T22:48:27.286810967Z Performing Close() for 10.0.1.76:5555
2025-10-04T22:48:27.286841244Z [EXECUTE] Running [./scripts/osprey/directv/stopbmitune.sh 10.0.1.76:5555 265]
2025-10-04T22:48:28.471602894Z [EXECUTE] Stdout: 'Sleep initiated for 10.0.1.76:5555
2025-10-04T22:48:28.472096818Z 10.0.1.76/stream_stopped written with epoch stop time
2025-10-04T22:48:28.472145634Z '
2025-10-04T22:48:28.472171117Z [EXECUTE] Stderr: '+ streamerIP=10.0.1.76:5555
2025-10-04T22:48:28.472200589Z + streamerNoPort=10.0.1.76
2025-10-04T22:48:28.472226545Z + adbTarget='adb -s 10.0.1.76:5555'
2025-10-04T22:48:28.472253525Z + main
2025-10-04T22:48:28.472277371Z + adbSleep
2025-10-04T22:48:28.472303584Z + sleep='input keyevent KEYCODE_SLEEP'
2025-10-04T22:48:28.472329481Z + adb -s 10.0.1.76:5555 shell input keyevent KEYCODE_SLEEP
2025-10-04T22:48:28.472357973Z + echo 'Sleep initiated for 10.0.1.76:5555'
2025-10-04T22:48:28.472383897Z + date +%s
2025-10-04T22:48:28.472407598Z + echo '10.0.1.76/stream_stopped written with epoch stop time'
2025-10-04T22:48:28.472433772Z '
2025-10-04T22:48:28.472455092Z [EXECUTE] Finished running ./scripts/osprey/directv/stopbmitune.sh in 1.185611096s
2025-10-04T22:48:28.472488937Z [GIN-debug] Request: 172.21.0.1 GET /play/tuner/265, latency: 22.481128075s, status: 200
2025-10-04T23:17:06.698031520Z [STATS] CPU usage: 54.566520086654826%
2025-10-04T23:17:06.698513014Z [STATS] Alloc = 2 MiB
2025-10-04T23:17:06.698551542Z [STATS] TotalAlloc = 4 MiB
2025-10-04T23:17:06.698581587Z [STATS] Sys = 14 MiB
2025-10-04T23:17:06.698608474Z [STATS] NumGC = 15
2025-10-04T23:17:06.698633428Z [STATS] Total memory: 5777 MiB
2025-10-04T23:17:06.698661274Z [STATS] Memory used: 2086 MiB
2025-10-04T23:17:06.698688010Z [STATS] Memory used percent: 36.102939485789484%
2025-10-04T23:47:06.553976039Z [STATS] CPU usage: 54.470730366703755%
2025-10-04T23:47:06.554521882Z [STATS] Alloc = 2 MiB
2025-10-04T23:47:06.554574112Z [STATS] TotalAlloc = 4 MiB
2025-10-04T23:47:06.554609102Z [STATS] Sys = 14 MiB
2025-10-04T23:47:06.554635439Z [STATS] NumGC = 30
2025-10-04T23:47:06.554667291Z [STATS] Total memory: 5777 MiB
2025-10-04T23:47:06.554701624Z [STATS] Memory used: 2145 MiB
2025-10-04T23:47:06.554728878Z [STATS] Memory used percent: 37.1261396881302%
2025-10-05T00:17:06.652133243Z [STATS] CPU usage: 56.34816150268427%
2025-10-05T00:17:06.700297291Z [STATS] Alloc = 2 MiB
2025-10-05T00:17:06.700358297Z [STATS] TotalAlloc = 4 MiB
2025-10-05T00:17:06.700389860Z [STATS] Sys = 14 MiB
2025-10-05T00:17:06.700417247Z [STATS] NumGC = 44
2025-10-05T00:17:06.700443062Z [STATS] Total memory: 5777 MiB
2025-10-05T00:17:06.700476161Z [STATS] Memory used: 2224 MiB
2025-10-05T00:17:06.700504404Z [STATS] Memory used percent: 38.49356256263973%

I'm not sure how to find the ah4c:appletv build. Can you point me to this with a link. I have some Apple TVs and Magewell card and want to get started finally down this path. I'm only using CC4C currently and so perhaps I need to read this entire thread. Is there a specific guide for PyATV anywhere? Thanks

image: bnhf/ah4c:appletv

No specific guide that I am aware of...
What service are you using??? DirectTV, YoutubeTV, HuluLive???

This is the thread I would read to start...Not all that long....
https://community.getchannels.com/t/using-an-hdmi-encoder-with-ah4c-appletv-capturing-from-an-appletv-running-the-cox-contour-app/43962

Thank you for your reply. I've read through the thread you provided and also skimmed some of this thread as well to try and figure out a general outline of what I need to do to stand this up. It's not all clear to me yet. I'm using Spectrum & HD Homerun and have Channels DVR installed on Linux desktop. I have CC4C running on a separate Windows desktop. I'm not using docker at all for anything and am a total newbie there, which is part of my problem. Since I'll only be running this single docker for now, should I be installing docker, docker compose, or portainer? I've heard all of these mentioned at various times here.

So I think the following are the steps. Much appreciated if anyone could help course correct, or provide any advice here for a newbie in this area (especially docker and spinning it up).

  • install docker, docker compose, or portainer
  • install image: bnhf/ah4c:appletv from hub.docker.com (I'm not sure how to do this)
  • set up at least 1 Apple TV tuner to begin with
  • I plan to install the Magewell card in the Linux desktop and have already worked on a env file for that, using info I’ve gathered in various threads here. However, I'm more interested in just getting the ah4c:appletv setup first. So, can I just connect the ATV HDMI output to a spare monitor to make sure it is working before setting up the encoder?
  • need to configure ports and environment within the container (how to do it)
  • add Spectrum channels to m3u - where do you do this? I've created plenty of m3u playlists for CC4C.

I very much appreciate everyone's work on all of this, especially @bnhf with the development of this fork, and to @chasut for posting about use of Home Assistant with ATV back at the end of 2023 which I believe lead to the development of PyATV. I wanted to get started back at that time, but just haven’t had the time. It’s awesome there has been so much development since then. Hope I can give back in some way in the future.

EDIT: the link I needed is here: https://hub.docker.com/r/bnhf/ah4c
Now I see instructions for installation. I'll stumble through and report back here if questions. Still not clear on docker vs portainer.

So it looks like you have a good start, I would highly recommend using portainer. .

What I found extremely useful as a total newbie with docker, was to leverage chatgpt and have it walk you through the various steps..

In my case I used OliveTin for channels as a great learning experience, before proceeding with my more customized script for my apple tv based tuner project. Well worth establishing the basics first. But that was my choice.

Im on a mac system, so I first installed docker desktop. Linux might be different to get docker going. Then I installed portainer on top of that. With Portainer installed, you can easily build different “stacks”, one that I recommend first is olivetin for channels. Once you get olivetin working, it has a utility that will talk from portainer directly to the channels server. This is a fantastic first continuity check to prove that you can reliably talk from a docker container to the channels server on your system.

Once you have this baseline working, then you can start building your apple tv tuner stack..well worth a little extra prep before delving right in the appletv tuner implementation.

1 Like

I'd recommend installing Docker using the convenience script, and then install OliveTin-for-Channels EZ-Start. This install allow you to install Portainer (a WebUI for Docker), and the full version of OliveTin-for-Channels:

Then once you have the full version of OliveTin-for-Channels installed, you can install just about any Channels-related Docker project using Project One-Click (including ah4c).

BTW, if you don't already have a lot of time invested in using a Linux desktop OS, using a Linux server OS is really a better approach. I prefer Debian myself, although Ubuntu (based on Debian) is popular.

Desktop OS's are locked down in ways that just become obstacles; when what you're really trying to do is setup a server. Kind of a right tool for the job scenario...

1 Like

Speaking of your script(s), have you posted it/them somewhere? I don't believe I've added it to ah4c -- which I would like to do...