HDMI for Channels

Thanks for letting me know. Probably something to do with adding arm64 support -- which is something I'd like to do, but is proving somewhat troublesome. It's also increasing the build time about 10 fold.

Reverting to the :appletv tag should sort you out for the time being. I'll give this another shot tomorrow most likely.

Logs can be accessed via the Portainer "Quick Actions" log button, or via the ah4c webpage.

@bnhf
Thank you for all the work
I went back and forth to :test.appletv and it came right back up everytime.
I was having problems getting chrome browser to let me copy the log from the webpage.
I will try the portainer log to copy next time.

Stay with that for now if you would please, as I'm focused a few other improvements atm. I'll circle back to adding pyatv to the primary image soon.

2 Likes

OK, so I built a new amd64-only bnhf/ah4c:test2.appletv with the required packages for pyatv support. This uses the same Dockerfile as the previous test.appletv build, but includes the spectrum.m3u file, and the atv/spectrum scripts submitted by @ChannelSam, along with some tweaks to the startup script.

I'm not able to test this as I'm in AZ for the next month+, and don't have access to my full lab setup. So, @ChannelSam, if you could give this a try and post the Portainer log from start through at least one channel tune, I'd appreciate it. I'd like to see this whether there are issues or not.

An open issue with using AppleTVs as the streaming device is how to handle the pairing process. I'm interested in coming up with a better approach than having to exec into the container to do it -- which is inelegant at best. Unfortunately it's interactive on the pyatv side, rather than AppleTV side -- so I'm looking for ideas for a better solution.

@bnhf

bnhf/ah4c:test2.appletv

Portainer Test Logs:

2024-03-19T21:19:59.757346821Z 127.0.0.1	localhost
2024-03-19T21:19:59.773273515Z ::1	localhost ip6-localhost ip6-loopback
2024-03-19T21:19:59.773311204Z fe00::0	ip6-localnet
2024-03-19T21:19:59.773324067Z ff00::0	ip6-mcastprefix
2024-03-19T21:19:59.773336204Z ff02::1	ip6-allnodes
2024-03-19T21:19:59.773347204Z ff02::2	ip6-allrouters
2024-03-19T21:19:59.773357965Z 172.26.0.2	ah4c-test
2024-03-19T21:20:00.753150178Z Traceback (most recent call last):
2024-03-19T21:20:00.753223443Z   File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T21:20:00.753242543Z     from pyatv.scripts.atvremote import main
2024-03-19T21:20:00.753258619Z   File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T21:20:00.753281269Z     from pyatv.protocols import PROTOCOLS
2024-03-19T21:20:00.753295868Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T21:20:00.753374392Z     from pyatv.protocols import airplay as airplay_proto
2024-03-19T21:20:00.753414780Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T21:20:00.753493987Z     from pyatv.protocols import mrp
2024-03-19T21:20:00.753502794Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T21:20:00.753584344Z     from pyatv.protocols.mrp import messages, protobuf
2024-03-19T21:20:00.753593219Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T21:20:00.753674564Z     from pyatv.protocols.mrp import protobuf
2024-03-19T21:20:00.753683227Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T21:20:00.753802414Z     from . import AudioFadeMessage_pb2
2024-03-19T21:20:00.753837033Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T21:20:00.753883112Z     from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T21:20:00.753894419Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T21:20:00.753955541Z     from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T21:20:00.753973532Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T21:20:00.754045333Z     from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T21:20:00.754057114Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T21:20:00.754153990Z     pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T21:20:00.754162535Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T21:20:01.804469209Z Traceback (most recent call last):
2024-03-19T21:20:01.804538545Z   File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T21:20:01.804567447Z     from pyatv.scripts.atvremote import main
2024-03-19T21:20:01.804581099Z   File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T21:20:01.804706173Z     from pyatv.protocols import PROTOCOLS
2024-03-19T21:20:01.804728360Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T21:20:01.804844884Z     from pyatv.protocols import airplay as airplay_proto
2024-03-19T21:20:01.804873100Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T21:20:01.804981161Z     from pyatv.protocols import mrp
2024-03-19T21:20:01.805004726Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T21:20:01.805101589Z     from pyatv.protocols.mrp import messages, protobuf
2024-03-19T21:20:01.805127696Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T21:20:01.805185764Z     from pyatv.protocols.mrp import protobuf
2024-03-19T21:20:01.805225818Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T21:20:01.805268747Z     from . import AudioFadeMessage_pb2
2024-03-19T21:20:01.805278006Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T21:20:01.805372839Z     from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T21:20:01.805382928Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T21:20:01.805470355Z     from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T21:20:01.805480212Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T21:20:01.805572944Z     from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T21:20:01.805582850Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T21:20:01.805695425Z     pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T21:20:01.805705140Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T21:20:01.935629033Z * daemon not running; starting now at tcp:5037
2024-03-19T21:20:02.157270658Z List of devices attached
2024-03-19T21:20:02.157397176Z * daemon started successfully
2024-03-19T21:20:02.157936219Z 
2024-03-19T21:20:02.177406644Z failed to connect to '192.168.1.54:5555': Connection refused
2024-03-19T21:20:02.198234155Z failed to connect to '192.168.1.55:5555': Connection refused
2024-03-19T21:20:02.266104548Z No existing ./scripts/firetv/directv/prebmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T21:20:02.270587981Z No existing ./scripts/atv/spectrum/prebmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T21:20:02.274849055Z No existing ./scripts/firetv/directv/bmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T21:20:02.278660761Z No existing ./scripts/atv/spectrum/bmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T21:20:02.282600793Z No existing ./scripts/firetv/directv/stopbmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T21:20:02.287318662Z No existing ./scripts/atv/spectrum/stopbmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T21:20:02.294333603Z No existing directv.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.297099857Z No existing dtvosprey.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.299753624Z No existing dtvstream.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.302472262Z No existing foo-fighters.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.305122724Z No existing fubo.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.307613997Z No existing hulu.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.310555168Z No existing livetv.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.312849443Z No existing npo.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.315646444Z No existing silicondust.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.318278165Z No existing sling.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.321197875Z No existing spectrum.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.323938028Z No existing youtubetv_shield.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.326638790Z No existing youtubetv.m3u found or UPDATE_M3US set to true
2024-03-19T21:20:02.353552959Z [START] ah4c is starting
2024-03-19T21:20:02.353905515Z [ENV] Not loading env
2024-03-19T21:20:02.353947946Z [ENV] IPADDRESS                  192.168.1.101:7654
2024-03-19T21:20:02.353963675Z [ENV] ALERT_SMTP_SERVER          
2024-03-19T21:20:02.353977522Z [ENV] ALERT_AUTH_SERVER          
2024-03-19T21:20:02.354061120Z [ENV] ALERT_EMAIL_FROM           
2024-03-19T21:20:02.354097640Z [ENV] ALERT_EMAIL_PASS           
2024-03-19T21:20:02.354136606Z [ENV] ALERT_EMAIL_TO             
2024-03-19T21:20:02.354151125Z [ENV] ALERT_WEBHOOK_URL          
2024-03-19T21:20:02.354199889Z [ENV] ALLOW_DEBUG_VIDEO_PREVIEW  
2024-03-19T21:20:02.354237682Z [ENV] Creating tuner             1
2024-03-19T21:20:02.354251292Z [ENV] ENCODER1_URL               http://192.168.1.41/live/stream3
2024-03-19T21:20:02.354269895Z [ENV] TUNER1_IP                  192.168.1.54
2024-03-19T21:20:02.354354350Z [ENV] CMD1                       
2024-03-19T21:20:02.354369658Z [ENV] TEECMD1                    
2024-03-19T21:20:02.354404367Z [ENV] PRE SCRIPT                 ./scripts/atv/spectrum/prebmitune.sh
2024-03-19T21:20:02.354418737Z [ENV] START SCRIPT               ./scripts/atv/spectrum/bmitune.sh
2024-03-19T21:20:02.354436021Z [ENV] STOP SCRIPT                ./scripts/atv/spectrum/stopbmitune.sh
2024-03-19T21:20:02.354450807Z [ENV] REBOOT SCRIPT              ./scripts/atv/spectrum/reboot.sh
2024-03-19T21:20:02.354463558Z [ENV] Creating tuner             2
2024-03-19T21:20:02.354532988Z [ENV] ENCODER2_URL               http://192.168.1.41/live/stream4
2024-03-19T21:20:02.354548148Z [ENV] TUNER2_IP                  192.168.1.55
2024-03-19T21:20:02.354561643Z [ENV] CMD2                       
2024-03-19T21:20:02.354574590Z [ENV] TEECMD2                    
2024-03-19T21:20:02.354587332Z [ENV] PRE SCRIPT                 ./scripts/atv/spectrum/prebmitune.sh
2024-03-19T21:20:02.354603460Z [ENV] START SCRIPT               ./scripts/atv/spectrum/bmitune.sh
2024-03-19T21:20:02.354616685Z [ENV] STOP SCRIPT                ./scripts/atv/spectrum/stopbmitune.sh
2024-03-19T21:20:02.354629956Z [ENV] REBOOT SCRIPT              ./scripts/atv/spectrum/reboot.sh
2024-03-19T21:20:02.354665872Z [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
2024-03-19T21:20:02.354688650Z  - using env:	export GIN_MODE=release
2024-03-19T21:20:02.354704282Z  - using code:	gin.SetMode(gin.ReleaseMode)
2024-03-19T21:20:02.354718372Z 
2024-03-19T21:20:02.354731202Z [GIN-debug] GET    /favicon.ico              --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2024-03-19T21:20:02.354750427Z [GIN-debug] HEAD   /favicon.ico              --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2024-03-19T21:20:02.357414490Z [GIN-debug] Loaded HTML Templates (11): 
2024-03-19T21:20:02.357462123Z 	- 
2024-03-19T21:20:02.357476857Z 	- edit.html
2024-03-19T21:20:02.357490016Z 	- index.html
2024-03-19T21:20:02.357502009Z 	- logs.html
2024-03-19T21:20:02.357514021Z 	- m3us.html
2024-03-19T21:20:02.357526886Z 	- routes.html
2024-03-19T21:20:02.357539472Z 	- stream.html
2024-03-19T21:20:02.357583999Z 	- config.html
2024-03-19T21:20:02.357598583Z 	- editm3u.html
2024-03-19T21:20:02.357611340Z 	- status.html
2024-03-19T21:20:02.357624857Z 	- status_and_logs.html
2024-03-19T21:20:02.357638153Z 
2024-03-19T21:20:02.357651403Z [GIN-debug] GET    /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2024-03-19T21:20:02.357728946Z [GIN-debug] HEAD   /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2024-03-19T21:20:02.357774124Z [GIN-debug] GET    /                         --> main.run.func1 (2 handlers)
2024-03-19T21:20:02.357789809Z [GIN-debug] GET    /routes                   --> main.run.func2 (2 handlers)
2024-03-19T21:20:02.357882308Z [GIN-debug] GET    /play/tuner:tuner/:channel --> main.run.func3 (2 handlers)
2024-03-19T21:20:02.357904187Z [GIN-debug] GET    /m3u/:channel             --> main.run.func4 (2 handlers)
2024-03-19T21:20:02.357924642Z [GIN-debug] GET    /env                      --> main.run.func5 (2 handlers)
2024-03-19T21:20:02.357938745Z [GIN-debug] GET    /logs/text                --> main.run.func6 (2 handlers)
2024-03-19T21:20:02.357952204Z [GIN-debug] GET    /logs                     --> main.run.func7 (2 handlers)
2024-03-19T21:20:02.358077898Z [GIN-debug] GET    /status/andlogs           --> main.run.func8 (2 handlers)
2024-03-19T21:20:02.358097936Z [GIN-debug] GET    /logs/json                --> main.run.func9 (2 handlers)
2024-03-19T21:20:02.358111636Z [GIN-debug] GET    /video                    --> main.run.func10 (2 handlers)
2024-03-19T21:20:02.358125234Z [GIN-debug] GET    /status                   --> main.statusPageHandler (2 handlers)
2024-03-19T21:20:02.358138437Z [GIN-debug] GET    /api/status               --> main.apiStatusHandler (2 handlers)
2024-03-19T21:20:02.358151437Z [GIN-debug] GET    /stream                   --> main.run.func11 (2 handlers)
2024-03-19T21:20:02.358164424Z [GIN-debug] GET    /test/webhook             --> main.run.func12 (2 handlers)
2024-03-19T21:20:02.358176526Z [GIN-debug] GET    /test/email               --> main.run.func13 (2 handlers)
2024-03-19T21:20:02.358188441Z [GIN-debug] GET    /status/channelsactivity  --> main.run.func14 (2 handlers)
2024-03-19T21:20:02.358200366Z [GIN-debug] GET    /edit                     --> main.run.func15 (2 handlers)
2024-03-19T21:20:02.358212763Z [GIN-debug] POST   /save                     --> main.run.func16 (2 handlers)
2024-03-19T21:20:02.358224640Z [GIN-debug] POST   /m3usave/:file            --> main.run.func17 (2 handlers)
2024-03-19T21:20:02.358236660Z [GIN-debug] GET    /m3us                     --> main.run.func18 (2 handlers)
2024-03-19T21:20:02.358248827Z [GIN-debug] GET    /editm3u/:file            --> main.run.func19 (2 handlers)
2024-03-19T21:20:02.358261871Z [GIN-debug] GET    /config                   --> main.run.func20 (2 handlers)
2024-03-19T21:20:02.358332679Z [GIN-debug] POST   /configsave               --> main.run.func21 (2 handlers)
2024-03-19T21:20:02.358354306Z [START] ah4c is ready
2024-03-19T21:20:02.358367296Z [GIN-debug] Listening and serving HTTP on :7654
2024-03-19T21:20:03.070452609Z 
2024-03-19T21:20:03.070530577Z > [email protected] start
2024-03-19T21:20:03.070546680Z > node ./index.js
2024-03-19T21:20:03.070565035Z 
2024-03-19T21:20:03.910737899Z Listening on:
2024-03-19T21:20:03.910805363Z 	http://ah4c-test:8000 http://localhost:8000
2024-03-19T21:20:03.911081575Z 	http://127.0.0.1:8000 http://172.26.0.2:8000
2024-03-19T21:30:01.144855892Z [GIN-debug] Loaded HTML Templates (14): 
2024-03-19T21:30:01.144922098Z 	- fubo.m3u
2024-03-19T21:30:01.144938901Z 	- spectrum.m3u
2024-03-19T21:30:01.144951655Z 	- youtubetv_shield.m3u
2024-03-19T21:30:01.144965790Z 	- dtvstream.m3u
2024-03-19T21:30:01.144979794Z 	- foo-fighters.m3u
2024-03-19T21:30:01.144993484Z 	- youtubetv.m3u
2024-03-19T21:30:01.145007132Z 	- hulu.m3u
2024-03-19T21:30:01.145019720Z 	- silicondust.m3u
2024-03-19T21:30:01.145031141Z 	- npo.m3u
2024-03-19T21:30:01.145041887Z 	- sling.m3u
2024-03-19T21:30:01.145052412Z 	- 
2024-03-19T21:30:01.145063986Z 	- directv.m3u
2024-03-19T21:30:01.145074965Z 	- dtvosprey.m3u
2024-03-19T21:30:01.145085838Z 	- livetv.m3u
2024-03-19T21:30:01.145096483Z 
2024-03-19T21:30:01.165198202Z [GIN-debug] Loaded HTML Templates (11): 
2024-03-19T21:30:01.165260862Z 	- 
2024-03-19T21:30:01.165276193Z 	- config.html
2024-03-19T21:30:01.165289656Z 	- edit.html
2024-03-19T21:30:01.165302186Z 	- editm3u.html
2024-03-19T21:30:01.165314376Z 	- index.html
2024-03-19T21:30:01.165326384Z 	- logs.html
2024-03-19T21:30:01.165338644Z 	- routes.html
2024-03-19T21:30:01.165351431Z 	- status_and_logs.html
2024-03-19T21:30:01.165363678Z 	- m3us.html
2024-03-19T21:30:01.165375636Z 	- status.html
2024-03-19T21:30:01.165387840Z 	- stream.html
2024-03-19T21:30:01.165399697Z 
2024-03-19T21:30:01.165412391Z [GIN-debug] Request: 192.168.1.20 GET /m3u/spectrum.m3u, latency: 35.042611ms, status: 200
2024-03-19T21:30:33.560074424Z [GIN-debug] Loaded HTML Templates (14): 
2024-03-19T21:30:33.560143051Z 	- foo-fighters.m3u
2024-03-19T21:30:33.560187669Z 	- hulu.m3u
2024-03-19T21:30:33.560200456Z 	- silicondust.m3u
2024-03-19T21:30:33.560212579Z 	- dtvosprey.m3u
2024-03-19T21:30:33.560224096Z 	- youtubetv_shield.m3u
2024-03-19T21:30:33.560235118Z 	- youtubetv.m3u
2024-03-19T21:30:33.560245988Z 	- 
2024-03-19T21:30:33.560257187Z 	- directv.m3u
2024-03-19T21:30:33.560268405Z 	- dtvstream.m3u
2024-03-19T21:30:33.560279239Z 	- fubo.m3u
2024-03-19T21:30:33.560289864Z 	- npo.m3u
2024-03-19T21:30:33.560300458Z 	- sling.m3u
2024-03-19T21:30:33.560311302Z 	- livetv.m3u
2024-03-19T21:30:33.560321909Z 	- spectrum.m3u
2024-03-19T21:30:33.560332633Z 
2024-03-19T21:30:33.580042008Z [GIN-debug] Loaded HTML Templates (11): 
2024-03-19T21:30:33.580101648Z 	- 
2024-03-19T21:30:33.580117397Z 	- editm3u.html
2024-03-19T21:30:33.580131161Z 	- index.html
2024-03-19T21:30:33.580144017Z 	- m3us.html
2024-03-19T21:30:33.580156993Z 	- status.html
2024-03-19T21:30:33.580170079Z 	- stream.html
2024-03-19T21:30:33.580182938Z 	- config.html
2024-03-19T21:30:33.580195497Z 	- edit.html
2024-03-19T21:30:33.580207341Z 	- logs.html
2024-03-19T21:30:33.580218398Z 	- routes.html
2024-03-19T21:30:33.580229363Z 	- status_and_logs.html
2024-03-19T21:30:33.580240190Z 
2024-03-19T21:30:33.580251599Z [GIN-debug] Request: 192.168.1.20 GET /m3u/spectrum.m3u, latency: 34.855337ms, status: 200
2024-03-19T21:30:34.040613308Z [GIN-debug] Loaded HTML Templates (14): 
2024-03-19T21:30:34.040670330Z 	- dtvosprey.m3u
2024-03-19T21:30:34.040685641Z 	- fubo.m3u
2024-03-19T21:30:34.040699268Z 	- hulu.m3u
2024-03-19T21:30:34.040713433Z 	- npo.m3u
2024-03-19T21:30:34.040725887Z 	- directv.m3u
2024-03-19T21:30:34.040739085Z 	- livetv.m3u
2024-03-19T21:30:34.040752489Z 	- spectrum.m3u
2024-03-19T21:30:34.040764517Z 	- youtubetv.m3u
2024-03-19T21:30:34.040775603Z 	- youtubetv_shield.m3u
2024-03-19T21:30:34.040786608Z 	- 
2024-03-19T21:30:34.040797921Z 	- dtvstream.m3u
2024-03-19T21:30:34.040809155Z 	- foo-fighters.m3u
2024-03-19T21:30:34.040820132Z 	- silicondust.m3u
2024-03-19T21:30:34.040831021Z 	- sling.m3u
2024-03-19T21:30:34.040842052Z 
2024-03-19T21:30:34.060046878Z [GIN-debug] Loaded HTML Templates (11): 
2024-03-19T21:30:34.060124044Z 	- config.html
2024-03-19T21:30:34.060140722Z 	- routes.html
2024-03-19T21:30:34.060155226Z 	- stream.html
2024-03-19T21:30:34.060169289Z 	- m3us.html
2024-03-19T21:30:34.060182495Z 	- status.html
2024-03-19T21:30:34.060196091Z 	- status_and_logs.html
2024-03-19T21:30:34.060209365Z 	- 
2024-03-19T21:30:34.060222152Z 	- edit.html
2024-03-19T21:30:34.060234862Z 	- editm3u.html
2024-03-19T21:30:34.060248137Z 	- index.html
2024-03-19T21:30:34.060260303Z 	- logs.html
2024-03-19T21:30:34.060271297Z 
2024-03-19T21:30:34.060282916Z [GIN-debug] Request: 192.168.1.20 GET /m3u/spectrum.m3u, latency: 33.52423ms, status: 200
2024-03-19T21:37:01.876596267Z Attempting network tune for device http://192.168.1.41/live/stream3 192.168.1.54 58515 
2024-03-19T21:37:01.881427738Z [EXECUTE] Running [./scripts/atv/spectrum/prebmitune.sh 192.168.1.54 58515]
2024-03-19T21:37:01.884628971Z [EXECUTE] Stdout: ''
2024-03-19T21:37:01.884682060Z [EXECUTE] Stderr: ''
2024-03-19T21:37:01.884698021Z [EXECUTE] Finished running ./scripts/atv/spectrum/prebmitune.sh in 3.345953ms
2024-03-19T21:37:01.884816579Z [EXECUTE] Running [./scripts/atv/spectrum/bmitune.sh 58515 192.168.1.54]
2024-03-19T21:37:02.957237477Z [EXECUTE] Stdout: ''
2024-03-19T21:37:02.957302325Z [EXECUTE] Stderr: 'Traceback (most recent call last):
2024-03-19T21:37:02.957318489Z   File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T21:37:02.957332710Z     from pyatv.scripts.atvremote import main
2024-03-19T21:37:02.957344747Z   File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T21:37:02.957359003Z     from pyatv.protocols import PROTOCOLS
2024-03-19T21:37:02.957373227Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T21:37:02.957386661Z     from pyatv.protocols import airplay as airplay_proto
2024-03-19T21:37:02.957398574Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T21:37:02.957410810Z     from pyatv.protocols import mrp
2024-03-19T21:37:02.957422128Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T21:37:02.957433925Z     from pyatv.protocols.mrp import messages, protobuf
2024-03-19T21:37:02.957445221Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T21:37:02.957457169Z     from pyatv.protocols.mrp import protobuf
2024-03-19T21:37:02.957468109Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T21:37:02.957511509Z     from . import AudioFadeMessage_pb2
2024-03-19T21:37:02.957523909Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T21:37:02.957535785Z     from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T21:37:02.957547522Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T21:37:02.957559324Z     from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T21:37:02.957570553Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T21:37:02.957582267Z     from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T21:37:02.957593765Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T21:37:02.957605541Z     pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T21:37:02.957619007Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T21:37:02.957630136Z '
2024-03-19T21:37:02.957640859Z [EXECUTE] Finished running ./scripts/atv/spectrum/bmitune.sh in 1.072485252s
2024-03-19T21:37:02.957651801Z [ERR] Failed to run start script: exit status 1
2024-03-19T21:37:43.148124909Z [IO] io.Copy: write tcp 172.26.0.2:7654->192.168.1.20:52648: write: broken pipe
2024-03-19T21:37:43.148199494Z [IOINFO] Successfully copied 41757432 bytes
2024-03-19T21:37:43.148215859Z [IOINFO] Transfer speed: 8.095791042050317 Mbits/second
2024-03-19T21:37:43.148230487Z Performing Close() for 192.168.1.54
2024-03-19T21:37:43.148250458Z [EXECUTE] Running [./scripts/atv/spectrum/stopbmitune.sh 192.168.1.54 58515]
2024-03-19T21:37:44.260601753Z [EXECUTE] Stdout: ''
2024-03-19T21:37:44.260658823Z [EXECUTE] Stderr: 'Traceback (most recent call last):
2024-03-19T21:37:44.260673340Z   File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T21:37:44.260686366Z     from pyatv.scripts.atvremote import main
2024-03-19T21:37:44.260697994Z   File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T21:37:44.260710105Z     from pyatv.protocols import PROTOCOLS
2024-03-19T21:37:44.260721331Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T21:37:44.260737390Z     from pyatv.protocols import airplay as airplay_proto
2024-03-19T21:37:44.260751371Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T21:37:44.260763868Z     from pyatv.protocols import mrp
2024-03-19T21:37:44.260825323Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T21:37:44.260839688Z     from pyatv.protocols.mrp import messages, protobuf
2024-03-19T21:37:44.260850795Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T21:37:44.260862531Z     from pyatv.protocols.mrp import protobuf
2024-03-19T21:37:44.260873523Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T21:37:44.260887755Z     from . import AudioFadeMessage_pb2
2024-03-19T21:37:44.260900660Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T21:37:44.260913947Z     from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T21:37:44.260926852Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T21:37:44.260939580Z     from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T21:37:44.260952496Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T21:37:44.260966228Z     from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T21:37:44.260980450Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T21:37:44.260994950Z     pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T21:37:44.261009126Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T21:37:44.261020535Z '
2024-03-19T21:37:44.261031101Z [EXECUTE] Finished running ./scripts/atv/spectrum/stopbmitune.sh in 1.112457258s
2024-03-19T21:37:44.261043863Z [ERR] Failed to run stop script: exit status 1
2024-03-19T21:37:44.261056568Z [EXECUTE] Running [./scripts/atv/spectrum/reboot.sh 192.168.1.54 58515]
2024-03-19T21:37:44.261216432Z [EXECUTE] Stdout: ''
2024-03-19T21:37:44.261244243Z [EXECUTE] Stderr: ''
2024-03-19T21:37:44.261250719Z [EXECUTE] Finished running ./scripts/atv/spectrum/reboot.sh in 596.897µs
2024-03-19T21:37:44.261409405Z [GIN-debug] Request: 192.168.1.20 GET /play/tuner/58515, latency: 42.384878512s, status: 200

Doesn't look like pyatv stuff is loading/installing right...
What I did...

  1. Created new docker using new image and pointing to new directory
  2. After container was running I consoled in and copied .pyatv.conf to /adb directory
  3. Reloaded m3u in channels and redowloaded guide data
  4. Attempted to tune to a national channel

After this didn't work I also tried to manually use the console and run the pyatv install commands but basically says everything is already good... then tried to run atvremote commands and I got the same errors we see in the logs.

If you want to test this using a different data directory than your working setup (which I understand), you're going to want to copy the .pyatv.conf file to the directory location on your docker host you're binding to /root/.android before you start the container.

For example, if your volume setup looks like this, you'd place the .conf file in /data/ah4c/adb on the docker host:

      - ${HOST_DIR}/ah4c/scripts:/opt/scripts # pre/stop/bmitune.sh scripts will be stored in this bound host directory under streamer/app
      - ${HOST_DIR}/ah4c/m3u:/opt/m3u # m3u files will be stored here and hosted at http://<hostname or ip>:7654/m3u for use in Channels DVR - Custom Channels settings
      - ${HOST_DIR}/ah4c/adb:/root/.android # Persistent data directory for adb keys

in this example HOST_DIR=/data

If you're exec'ing into the container, which I'd prefer you not do for this testing, you'd place that file in /root/.android

Did everything again...deleted directories, recreated directories and made sure I added the .pyatv.conf to the /adb directory before starting the stack...all as root...

Still getting the same results with pyatv errors.

Started Docker...Reload m3u in Channels and tried to tune then stop channel. Channels beleives it is tuned but the ATV never tunes...just stays on home screen

Docker Log

2024-03-19T23:06:11.622761321Z 127.0.0.1	localhost
2024-03-19T23:06:11.622821901Z ::1	localhost ip6-localhost ip6-loopback
2024-03-19T23:06:11.622828859Z fe00::0	ip6-localnet
2024-03-19T23:06:11.622835385Z ff00::0	ip6-mcastprefix
2024-03-19T23:06:11.622841833Z ff02::1	ip6-allnodes
2024-03-19T23:06:11.622848049Z ff02::2	ip6-allrouters
2024-03-19T23:06:11.622853850Z 172.30.0.2	ah4c-test
2024-03-19T23:06:12.824549590Z Traceback (most recent call last):
2024-03-19T23:06:12.824605923Z   File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T23:06:12.824694430Z     from pyatv.scripts.atvremote import main
2024-03-19T23:06:12.824718936Z   File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T23:06:12.824801904Z     from pyatv.protocols import PROTOCOLS
2024-03-19T23:06:12.824813205Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T23:06:12.824926108Z     from pyatv.protocols import airplay as airplay_proto
2024-03-19T23:06:12.824934703Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T23:06:12.825032160Z     from pyatv.protocols import mrp
2024-03-19T23:06:12.825040417Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T23:06:12.825145766Z     from pyatv.protocols.mrp import messages, protobuf
2024-03-19T23:06:12.825153981Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T23:06:12.825250545Z     from pyatv.protocols.mrp import protobuf
2024-03-19T23:06:12.825259418Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T23:06:12.825342323Z     from . import AudioFadeMessage_pb2
2024-03-19T23:06:12.825350317Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T23:06:12.825438309Z     from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T23:06:12.825446516Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T23:06:12.825528922Z     from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T23:06:12.825536457Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T23:06:12.825613928Z     from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T23:06:12.825625065Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T23:06:12.825728541Z     pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T23:06:12.825739697Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T23:06:13.989948048Z Traceback (most recent call last):
2024-03-19T23:06:13.989991969Z   File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T23:06:13.990075185Z     from pyatv.scripts.atvremote import main
2024-03-19T23:06:13.990097722Z   File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T23:06:13.990331664Z     from pyatv.protocols import PROTOCOLS
2024-03-19T23:06:13.990349088Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T23:06:13.990516695Z     from pyatv.protocols import airplay as airplay_proto
2024-03-19T23:06:13.990533638Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T23:06:13.990672612Z     from pyatv.protocols import mrp
2024-03-19T23:06:13.990688080Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T23:06:13.990834240Z     from pyatv.protocols.mrp import messages, protobuf
2024-03-19T23:06:13.990849490Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T23:06:13.990976056Z     from pyatv.protocols.mrp import protobuf
2024-03-19T23:06:13.990992657Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T23:06:13.991120764Z     from . import AudioFadeMessage_pb2
2024-03-19T23:06:13.991144020Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T23:06:13.991269816Z     from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T23:06:13.991285379Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T23:06:13.991410509Z     from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T23:06:13.991425709Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T23:06:13.991549938Z     from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T23:06:13.991565320Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T23:06:13.991711828Z     pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T23:06:13.991743150Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T23:06:14.213498668Z * daemon not running; starting now at tcp:5037
2024-03-19T23:06:14.474034269Z List of devices attached
2024-03-19T23:06:14.474022886Z * daemon started successfully
2024-03-19T23:06:14.474421474Z 
2024-03-19T23:06:14.488126930Z failed to connect to '192.168.1.54:5555': Connection refused
2024-03-19T23:06:14.504717668Z failed to connect to '192.168.1.55:5555': Connection refused
2024-03-19T23:06:14.529713869Z No existing ./scripts/firetv/directv/prebmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T23:06:14.532749512Z No existing ./scripts/atv/spectrum/prebmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T23:06:14.536185279Z No existing ./scripts/firetv/directv/bmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T23:06:14.539255761Z No existing ./scripts/atv/spectrum/bmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T23:06:14.542286342Z No existing ./scripts/firetv/directv/stopbmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T23:06:14.545344492Z No existing ./scripts/atv/spectrum/stopbmitune.sh found or UPDATE_SCRIPTS set to true
2024-03-19T23:06:14.550150042Z No existing directv.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.552163609Z No existing dtvosprey.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.554195781Z No existing dtvstream.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.556013034Z No existing foo-fighters.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.557876082Z No existing fubo.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.559683277Z No existing hulu.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.561787866Z No existing livetv.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.563740194Z No existing npo.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.569386250Z No existing silicondust.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.571190268Z No existing sling.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.573188070Z No existing spectrum.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.574829162Z No existing youtubetv_shield.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.576433678Z No existing youtubetv.m3u found or UPDATE_M3US set to true
2024-03-19T23:06:14.593657495Z [START] ah4c is starting
2024-03-19T23:06:14.600640176Z [ENV] Not loading env
2024-03-19T23:06:14.600764809Z [ENV] IPADDRESS                  192.168.1.101:7654
2024-03-19T23:06:14.600853889Z [ENV] ALERT_SMTP_SERVER          
2024-03-19T23:06:14.600932618Z [ENV] ALERT_AUTH_SERVER          
2024-03-19T23:06:14.601020974Z [ENV] ALERT_EMAIL_FROM           
2024-03-19T23:06:14.601098186Z [ENV] ALERT_EMAIL_PASS           
2024-03-19T23:06:14.601199027Z [ENV] ALERT_EMAIL_TO             
2024-03-19T23:06:14.601287114Z [ENV] ALERT_WEBHOOK_URL          
2024-03-19T23:06:14.601367434Z [ENV] ALLOW_DEBUG_VIDEO_PREVIEW  
2024-03-19T23:06:14.601461549Z [ENV] Creating tuner             1
2024-03-19T23:06:14.601558471Z [ENV] ENCODER1_URL               http://192.168.1.41/live/stream3
2024-03-19T23:06:14.601645305Z [ENV] TUNER1_IP                  192.168.1.54
2024-03-19T23:06:14.601721923Z [ENV] CMD1                       
2024-03-19T23:06:14.601805405Z [ENV] TEECMD1                    
2024-03-19T23:06:14.601897515Z [ENV] PRE SCRIPT                 ./scripts/atv/spectrum/prebmitune.sh
2024-03-19T23:06:14.601974675Z [ENV] START SCRIPT               ./scripts/atv/spectrum/bmitune.sh
2024-03-19T23:06:14.602059985Z [ENV] STOP SCRIPT                ./scripts/atv/spectrum/stopbmitune.sh
2024-03-19T23:06:14.602147142Z [ENV] REBOOT SCRIPT              ./scripts/atv/spectrum/reboot.sh
2024-03-19T23:06:14.602229233Z [ENV] Creating tuner             2
2024-03-19T23:06:14.602317773Z [ENV] ENCODER2_URL               http://192.168.1.41/live/stream4
2024-03-19T23:06:14.602395112Z [ENV] TUNER2_IP                  192.168.1.55
2024-03-19T23:06:14.602483510Z [ENV] CMD2                       
2024-03-19T23:06:14.602559086Z [ENV] TEECMD2                    
2024-03-19T23:06:14.602646283Z [ENV] PRE SCRIPT                 ./scripts/atv/spectrum/prebmitune.sh
2024-03-19T23:06:14.602734386Z [ENV] START SCRIPT               ./scripts/atv/spectrum/bmitune.sh
2024-03-19T23:06:14.602811832Z [ENV] STOP SCRIPT                ./scripts/atv/spectrum/stopbmitune.sh
2024-03-19T23:06:14.602903571Z [ENV] REBOOT SCRIPT              ./scripts/atv/spectrum/reboot.sh
2024-03-19T23:06:14.602991129Z [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
2024-03-19T23:06:14.602999862Z  - using env:	export GIN_MODE=release
2024-03-19T23:06:14.603007039Z  - using code:	gin.SetMode(gin.ReleaseMode)
2024-03-19T23:06:14.603013498Z 
2024-03-19T23:06:14.603095328Z [GIN-debug] GET    /favicon.ico              --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2024-03-19T23:06:14.603179491Z [GIN-debug] HEAD   /favicon.ico              --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2024-03-19T23:06:14.604747754Z [GIN-debug] Loaded HTML Templates (11): 
2024-03-19T23:06:14.604780955Z 	- edit.html
2024-03-19T23:06:14.604789234Z 	- index.html
2024-03-19T23:06:14.604795978Z 	- logs.html
2024-03-19T23:06:14.604802088Z 	- status.html
2024-03-19T23:06:14.604807789Z 	- status_and_logs.html
2024-03-19T23:06:14.604813478Z 	- 
2024-03-19T23:06:14.604819283Z 	- config.html
2024-03-19T23:06:14.604842976Z 	- editm3u.html
2024-03-19T23:06:14.604849732Z 	- m3us.html
2024-03-19T23:06:14.604856231Z 	- routes.html
2024-03-19T23:06:14.604862580Z 	- stream.html
2024-03-19T23:06:14.604868409Z 
2024-03-19T23:06:14.605000928Z [GIN-debug] GET    /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2024-03-19T23:06:14.605100711Z [GIN-debug] HEAD   /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2024-03-19T23:06:14.605184928Z [GIN-debug] GET    /                         --> main.run.func1 (2 handlers)
2024-03-19T23:06:14.605257800Z [GIN-debug] GET    /routes                   --> main.run.func2 (2 handlers)
2024-03-19T23:06:14.605342429Z [GIN-debug] GET    /play/tuner:tuner/:channel --> main.run.func3 (2 handlers)
2024-03-19T23:06:14.605427773Z [GIN-debug] GET    /m3u/:channel             --> main.run.func4 (2 handlers)
2024-03-19T23:06:14.605501802Z [GIN-debug] GET    /env                      --> main.run.func5 (2 handlers)
2024-03-19T23:06:14.605584485Z [GIN-debug] GET    /logs/text                --> main.run.func6 (2 handlers)
2024-03-19T23:06:14.605667906Z [GIN-debug] GET    /logs                     --> main.run.func7 (2 handlers)
2024-03-19T23:06:14.605741482Z [GIN-debug] GET    /status/andlogs           --> main.run.func8 (2 handlers)
2024-03-19T23:06:14.605825310Z [GIN-debug] GET    /logs/json                --> main.run.func9 (2 handlers)
2024-03-19T23:06:14.605908323Z [GIN-debug] GET    /video                    --> main.run.func10 (2 handlers)
2024-03-19T23:06:14.605980736Z [GIN-debug] GET    /status                   --> main.statusPageHandler (2 handlers)
2024-03-19T23:06:14.606062339Z [GIN-debug] GET    /api/status               --> main.apiStatusHandler (2 handlers)
2024-03-19T23:06:14.606144393Z [GIN-debug] GET    /stream                   --> main.run.func11 (2 handlers)
2024-03-19T23:06:14.606228116Z [GIN-debug] GET    /test/webhook             --> main.run.func12 (2 handlers)
2024-03-19T23:06:14.606299978Z [GIN-debug] GET    /test/email               --> main.run.func13 (2 handlers)
2024-03-19T23:06:14.606384136Z [GIN-debug] GET    /status/channelsactivity  --> main.run.func14 (2 handlers)
2024-03-19T23:06:14.606467615Z [GIN-debug] GET    /edit                     --> main.run.func15 (2 handlers)
2024-03-19T23:06:14.606541421Z [GIN-debug] POST   /save                     --> main.run.func16 (2 handlers)
2024-03-19T23:06:14.606655016Z [GIN-debug] POST   /m3usave/:file            --> main.run.func17 (2 handlers)
2024-03-19T23:06:14.606738835Z [GIN-debug] GET    /m3us                     --> main.run.func18 (2 handlers)
2024-03-19T23:06:14.606821690Z [GIN-debug] GET    /editm3u/:file            --> main.run.func19 (2 handlers)
2024-03-19T23:06:14.606906914Z [GIN-debug] GET    /config                   --> main.run.func20 (2 handlers)
2024-03-19T23:06:14.606994455Z [GIN-debug] POST   /configsave               --> main.run.func21 (2 handlers)
2024-03-19T23:06:14.607120446Z [START] ah4c is ready
2024-03-19T23:06:14.607243865Z [GIN-debug] Listening and serving HTTP on :7654
2024-03-19T23:06:15.416970575Z 
2024-03-19T23:06:15.417010767Z > [email protected] start
2024-03-19T23:06:15.417018284Z > node ./index.js
2024-03-19T23:06:15.417024877Z 
2024-03-19T23:06:16.236960673Z Listening on:
2024-03-19T23:06:16.237001723Z 	http://ah4c-test:8000 http://localhost:8000
2024-03-19T23:06:16.237504691Z 	http://127.0.0.1:8000 http://172.30.0.2:8000
2024-03-19T23:08:16.259268047Z [GIN-debug] Loaded HTML Templates (11): 
2024-03-19T23:08:16.259315574Z 	- logs.html
2024-03-19T23:08:16.259324204Z 	- stream.html
2024-03-19T23:08:16.259331602Z 	- config.html
2024-03-19T23:08:16.259338940Z 	- editm3u.html
2024-03-19T23:08:16.259346268Z 	- index.html
2024-03-19T23:08:16.259353567Z 	- m3us.html
2024-03-19T23:08:16.259360696Z 	- routes.html
2024-03-19T23:08:16.259367504Z 	- status.html
2024-03-19T23:08:16.259374325Z 	- status_and_logs.html
2024-03-19T23:08:16.259381374Z 	- 
2024-03-19T23:08:16.259388093Z 	- edit.html
2024-03-19T23:08:16.259395155Z 
2024-03-19T23:08:16.260270267Z [GIN-debug] Request: 192.168.1.184 GET /, latency: 2.326472ms, status: 200
2024-03-19T23:08:16.405027673Z [GIN-debug] Request: 192.168.1.184 GET /static/logos/androidhdmi-for-channels.jpeg, latency: 597.418µs, status: 200
2024-03-19T23:08:20.312304376Z [GIN-debug] Request: 192.168.1.184 GET /logs, latency: 1.513729ms, status: 200
2024-03-19T23:08:46.304952058Z [GIN-debug] Request: 192.168.1.184 GET /status, latency: 3.408438ms, status: 200
2024-03-19T23:10:01.813379367Z [GIN-debug] Loaded HTML Templates (14): 
2024-03-19T23:10:01.813431417Z 	- sling.m3u
2024-03-19T23:10:01.813439362Z 	- youtubetv_shield.m3u
2024-03-19T23:10:01.813445548Z 	- directv.m3u
2024-03-19T23:10:01.813451562Z 	- foo-fighters.m3u
2024-03-19T23:10:01.813457596Z 	- fubo.m3u
2024-03-19T23:10:01.813463376Z 	- hulu.m3u
2024-03-19T23:10:01.813469400Z 	- npo.m3u
2024-03-19T23:10:01.813475797Z 	- dtvosprey.m3u
2024-03-19T23:10:01.813481856Z 	- livetv.m3u
2024-03-19T23:10:01.813497230Z 	- silicondust.m3u
2024-03-19T23:10:01.813504198Z 	- youtubetv.m3u
2024-03-19T23:10:01.813510112Z 	- spectrum.m3u
2024-03-19T23:10:01.813535408Z 	- 
2024-03-19T23:10:01.813542095Z 	- dtvstream.m3u
2024-03-19T23:10:01.813548111Z 
2024-03-19T23:10:01.828261549Z [GIN-debug] Loaded HTML Templates (11): 
2024-03-19T23:10:01.828305963Z 	- config.html
2024-03-19T23:10:01.828313422Z 	- editm3u.html
2024-03-19T23:10:01.828320082Z 	- m3us.html
2024-03-19T23:10:01.828326026Z 	- routes.html
2024-03-19T23:10:01.828331693Z 	- status.html
2024-03-19T23:10:01.828337446Z 	- stream.html
2024-03-19T23:10:01.828343493Z 	- 
2024-03-19T23:10:01.828349251Z 	- edit.html
2024-03-19T23:10:01.828355179Z 	- index.html
2024-03-19T23:10:01.828361011Z 	- logs.html
2024-03-19T23:10:01.828367217Z 	- status_and_logs.html
2024-03-19T23:10:01.828373472Z 
2024-03-19T23:10:01.828379639Z [GIN-debug] Request: 192.168.1.20 GET /m3u/spectrum.m3u, latency: 29.259862ms, status: 200
2024-03-19T23:10:54.605275331Z Attempting network tune for device http://192.168.1.41/live/stream3 192.168.1.54 42642 
2024-03-19T23:10:54.609967743Z [EXECUTE] Running [./scripts/atv/spectrum/prebmitune.sh 192.168.1.54 42642]
2024-03-19T23:10:54.612656947Z [EXECUTE] Stdout: ''
2024-03-19T23:10:54.612691429Z [EXECUTE] Stderr: ''
2024-03-19T23:10:54.612702040Z [EXECUTE] Finished running ./scripts/atv/spectrum/prebmitune.sh in 2.971883ms
2024-03-19T23:10:54.613165503Z [EXECUTE] Running [./scripts/atv/spectrum/bmitune.sh 42642 192.168.1.54]
2024-03-19T23:10:55.833197995Z [EXECUTE] Stdout: ''
2024-03-19T23:10:55.833225587Z [EXECUTE] Stderr: 'Traceback (most recent call last):
2024-03-19T23:10:55.833232276Z   File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T23:10:55.833239003Z     from pyatv.scripts.atvremote import main
2024-03-19T23:10:55.833245360Z   File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T23:10:55.833252183Z     from pyatv.protocols import PROTOCOLS
2024-03-19T23:10:55.833258668Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T23:10:55.833265178Z     from pyatv.protocols import airplay as airplay_proto
2024-03-19T23:10:55.833271121Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T23:10:55.833277284Z     from pyatv.protocols import mrp
2024-03-19T23:10:55.833282879Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T23:10:55.833289437Z     from pyatv.protocols.mrp import messages, protobuf
2024-03-19T23:10:55.833294946Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T23:10:55.833316395Z     from pyatv.protocols.mrp import protobuf
2024-03-19T23:10:55.833322996Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T23:10:55.833329124Z     from . import AudioFadeMessage_pb2
2024-03-19T23:10:55.833335222Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T23:10:55.833341596Z     from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T23:10:55.833347670Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T23:10:55.833354177Z     from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T23:10:55.833360485Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T23:10:55.833366640Z     from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T23:10:55.833372631Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T23:10:55.833378465Z     pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T23:10:55.833385520Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T23:10:55.833391302Z '
2024-03-19T23:10:55.833397212Z [EXECUTE] Finished running ./scripts/atv/spectrum/bmitune.sh in 1.220192091s
2024-03-19T23:10:55.833402785Z [ERR] Failed to run start script: exit status 1
2024-03-19T23:11:19.702946225Z [GIN-debug] Request: 192.168.1.184 GET /logs, latency: 1.331001ms, status: 200
2024-03-19T23:11:42.793459852Z [IO] io.Copy: write tcp 172.30.0.2:7654->192.168.1.20:52694: write: broken pipe
2024-03-19T23:11:42.794279474Z [IOINFO] Successfully copied 3793472 bytes
2024-03-19T23:11:42.794312113Z [IOINFO] Transfer speed: 0.6298689608048648 Mbits/second
2024-03-19T23:11:42.794319500Z Performing Close() for 192.168.1.54
2024-03-19T23:11:42.794325933Z [EXECUTE] Running [./scripts/atv/spectrum/stopbmitune.sh 192.168.1.54 42642]
2024-03-19T23:11:43.985720187Z [EXECUTE] Stdout: ''
2024-03-19T23:11:43.985750712Z [EXECUTE] Stderr: 'Traceback (most recent call last):
2024-03-19T23:11:43.985758447Z   File "/usr/bin/atvremote", line 5, in <module>
2024-03-19T23:11:43.985765616Z     from pyatv.scripts.atvremote import main
2024-03-19T23:11:43.985771821Z   File "/usr/lib/python3.9/site-packages/pyatv/__init__.py", line 26, in <module>
2024-03-19T23:11:43.985778572Z     from pyatv.protocols import PROTOCOLS
2024-03-19T23:11:43.985808071Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/__init__.py", line 10, in <module>
2024-03-19T23:11:43.985815195Z     from pyatv.protocols import airplay as airplay_proto
2024-03-19T23:11:43.985821328Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/airplay/__init__.py", line 28, in <module>
2024-03-19T23:11:43.985827723Z     from pyatv.protocols import mrp
2024-03-19T23:11:43.985833383Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/__init__.py", line 60, in <module>
2024-03-19T23:11:43.985839503Z     from pyatv.protocols.mrp import messages, protobuf
2024-03-19T23:11:43.985845337Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/messages.py", line 9, in <module>
2024-03-19T23:11:43.985851760Z     from pyatv.protocols.mrp import protobuf
2024-03-19T23:11:43.985857993Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/__init__.py", line 9, in <module>
2024-03-19T23:11:43.985864749Z     from . import AudioFadeMessage_pb2
2024-03-19T23:11:43.985870643Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.py", line 15, in <module>
2024-03-19T23:11:43.985876858Z     from pyatv.protocols.mrp.protobuf import PlayerPath_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_PlayerPath__pb2
2024-03-19T23:11:43.985882744Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.py", line 14, in <module>
2024-03-19T23:11:43.985889037Z     from pyatv.protocols.mrp.protobuf import Origin_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_Origin__pb2
2024-03-19T23:11:43.985895262Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/Origin_pb2.py", line 14, in <module>
2024-03-19T23:11:43.985901673Z     from pyatv.protocols.mrp.protobuf import DeviceInfoMessage_pb2 as pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_DeviceInfoMessage__pb2
2024-03-19T23:11:43.985908507Z   File "/usr/lib/python3.9/site-packages/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py", line 24, in <module>
2024-03-19T23:11:43.985914918Z     pyatv_dot_protocols_dot_mrp_dot_protobuf_dot_ProtocolMessage__pb2.ProtocolMessage.RegisterExtension(deviceInfoMessage)
2024-03-19T23:11:43.985922055Z AttributeError: type object 'ProtocolMessage' has no attribute 'RegisterExtension'
2024-03-19T23:11:43.985928268Z '
2024-03-19T23:11:43.985933701Z [EXECUTE] Finished running ./scripts/atv/spectrum/stopbmitune.sh in 1.191492205s
2024-03-19T23:11:43.985939383Z [ERR] Failed to run stop script: exit status 1
2024-03-19T23:11:43.985944923Z [EXECUTE] Running [./scripts/atv/spectrum/reboot.sh 192.168.1.54 42642]
2024-03-19T23:11:43.986039240Z [EXECUTE] Stdout: ''
2024-03-19T23:11:43.986094750Z [EXECUTE] Stderr: ''
2024-03-19T23:11:43.986106666Z [EXECUTE] Finished running ./scripts/atv/spectrum/reboot.sh in 654.271µs
2024-03-19T23:11:43.986272052Z [GIN-debug] Request: 192.168.1.20 GET /play/tuner/42642, latency: 49.381308099s, status: 200

In the interest of confirming this isn't a setup issue on your end, would you please setup the same thing using the known working container bnhf/ah4c:test.appletv? In other words the same parallel test setup, but with the working container.

We can see in the log that pyatv is installed and trying to run, but the error handling seems to non-existent with this library, and it throws off these Python traceback messages instead of something more concise and meaningful.

ONLY Changed image to bnhf/ah4c:test.appletv in this test docker...everything else the same....and restarted....Works just like it should and tuned channel and stopped channel like it should

Docker Logs

2024-03-19T23:58:41.481944054Z 127.0.0.1	localhost
2024-03-19T23:58:41.482010446Z ::1	localhost ip6-localhost ip6-loopback
2024-03-19T23:58:41.482019042Z fe00::0	ip6-localnet
2024-03-19T23:58:41.482026277Z ff00::0	ip6-mcastprefix
2024-03-19T23:58:41.482033549Z ff02::1	ip6-allnodes
2024-03-19T23:58:41.482040657Z ff02::2	ip6-allrouters
2024-03-19T23:58:41.482047534Z 172.30.0.2	ah4c-test
2024-03-19T23:58:44.221956128Z Scan Results
2024-03-19T23:58:44.221988104Z ========================================
2024-03-19T23:58:44.221996174Z        Name: Entertainment Room
2024-03-19T23:58:44.222003266Z    Model/SW: Apple TV 4, tvOS 17.4
2024-03-19T23:58:44.222010624Z     Address: 192.168.1.54
2024-03-19T23:58:44.222017160Z         MAC: 08:66:98:DB:39:90
2024-03-19T23:58:44.222023740Z  Deep Sleep: False
2024-03-19T23:58:44.222029941Z Identifiers:
2024-03-19T23:58:44.222036480Z  - 371532D4-923E-4726-9D78-8B54E882E58C
2024-03-19T23:58:44.222042730Z  - 08:66:98:DB:39:90
2024-03-19T23:58:44.222048417Z  - 086698DB3990
2024-03-19T23:58:44.222054020Z Services:
2024-03-19T23:58:44.222059479Z  - Protocol: Companion, Port: 49153, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
2024-03-19T23:58:44.222065843Z  - Protocol: AirPlay, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
2024-03-19T23:58:44.222071722Z  - Protocol: RAOP, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
2024-03-19T23:58:44.222077593Z 
2024-03-19T23:58:45.841585297Z Scan Results
2024-03-19T23:58:45.841626096Z ========================================
2024-03-19T23:58:45.841633693Z        Name: Home Theater
2024-03-19T23:58:45.841640790Z    Model/SW: Apple TV 4, tvOS 17.4
2024-03-19T23:58:45.841646993Z     Address: 192.168.1.55
2024-03-19T23:58:45.841653925Z         MAC: D0:03:4B:1F:2C:09
2024-03-19T23:58:45.841662500Z  Deep Sleep: False
2024-03-19T23:58:45.841668838Z Identifiers:
2024-03-19T23:58:45.841675750Z  - 4C852F58-5C9D-4A8F-AAA3-86FAE2A32B65
2024-03-19T23:58:45.841682350Z  - D0:03:4B:1F:2C:09
2024-03-19T23:58:45.841688784Z  - D0034B1F2C09
2024-03-19T23:58:45.841695079Z Services:
2024-03-19T23:58:45.841701277Z  - Protocol: Companion, Port: 49153, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
2024-03-19T23:58:45.841707263Z  - Protocol: AirPlay, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
2024-03-19T23:58:45.841713345Z  - Protocol: RAOP, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
2024-03-19T23:58:45.841747071Z 
2024-03-19T23:58:46.050589384Z Existing ./scripts/firetv/directv/prebmitune.sh found, and will be preserved
2024-03-19T23:58:46.050924669Z Existing ./scripts/firetv/directv/bmitune.sh found, and will be preserved
2024-03-19T23:58:46.051188129Z Existing ./scripts/firetv/directv/stopbmitune.sh found, and will be preserved
2024-03-19T23:58:46.053703757Z Existing directv.m3u found, and will be preserved
2024-03-19T23:58:46.053905712Z Existing dtvosprey.m3u found, and will be preserved
2024-03-19T23:58:46.054079297Z Existing dtvstream.m3u found, and will be preserved
2024-03-19T23:58:46.054232075Z Existing foo-fighters.m3u found, and will be preserved
2024-03-19T23:58:46.054391682Z Existing fubo.m3u found, and will be preserved
2024-03-19T23:58:46.054542432Z Existing hulu.m3u found, and will be preserved
2024-03-19T23:58:46.054703203Z Existing livetv.m3u found, and will be preserved
2024-03-19T23:58:46.054852704Z Existing npo.m3u found, and will be preserved
2024-03-19T23:58:46.055014214Z Existing silicondust.m3u found, and will be preserved
2024-03-19T23:58:46.055126720Z Existing sling.m3u found, and will be preserved
2024-03-19T23:58:46.055228450Z Existing spectrum.m3u found, and will be preserved
2024-03-19T23:58:46.055323180Z Existing youtubetv_shield.m3u found, and will be preserved
2024-03-19T23:58:46.055486983Z Existing youtubetv.m3u found, and will be preserved
2024-03-19T23:58:46.709985346Z [START] ah4c is starting
2024-03-19T23:58:46.787263969Z [ENV] Not loading env
2024-03-19T23:58:46.787293096Z [ENV] IPADDRESS                  192.168.1.101:7654
2024-03-19T23:58:46.787300437Z [ENV] ALERT_SMTP_SERVER          
2024-03-19T23:58:46.787306578Z [ENV] ALERT_AUTH_SERVER          
2024-03-19T23:58:46.787312845Z [ENV] ALERT_EMAIL_FROM           
2024-03-19T23:58:46.787333661Z [ENV] ALERT_EMAIL_PASS           
2024-03-19T23:58:46.787340976Z [ENV] ALERT_EMAIL_TO             
2024-03-19T23:58:46.787347424Z [ENV] ALERT_WEBHOOK_URL          
2024-03-19T23:58:46.787353837Z [ENV] ALLOW_DEBUG_VIDEO_PREVIEW  
2024-03-19T23:58:46.787360221Z [ENV] Creating tuner             1
2024-03-19T23:58:46.787367069Z [ENV] ENCODER1_URL               http://192.168.1.41/live/stream3
2024-03-19T23:58:46.787379191Z [ENV] TUNER1_IP                  192.168.1.54
2024-03-19T23:58:46.787385916Z [ENV] CMD1                       
2024-03-19T23:58:46.787392193Z [ENV] TEECMD1                    
2024-03-19T23:58:46.787398435Z [ENV] PRE SCRIPT                 ./scripts/atv/spectrum/prebmitune.sh
2024-03-19T23:58:46.787411239Z [ENV] START SCRIPT               ./scripts/atv/spectrum/bmitune.sh
2024-03-19T23:58:46.787418121Z [ENV] STOP SCRIPT                ./scripts/atv/spectrum/stopbmitune.sh
2024-03-19T23:58:46.787464161Z [ENV] REBOOT SCRIPT              ./scripts/atv/spectrum/reboot.sh
2024-03-19T23:58:46.787471294Z [ENV] Creating tuner             2
2024-03-19T23:58:46.787477472Z [ENV] ENCODER2_URL               http://192.168.1.41/live/stream4
2024-03-19T23:58:46.787483475Z [ENV] TUNER2_IP                  192.168.1.55
2024-03-19T23:58:46.787489942Z [ENV] CMD2                       
2024-03-19T23:58:46.787502327Z [ENV] TEECMD2                    
2024-03-19T23:58:46.787509340Z [ENV] PRE SCRIPT                 ./scripts/atv/spectrum/prebmitune.sh
2024-03-19T23:58:46.787632100Z [ENV] START SCRIPT               ./scripts/atv/spectrum/bmitune.sh
2024-03-19T23:58:46.787640575Z [ENV] STOP SCRIPT                ./scripts/atv/spectrum/stopbmitune.sh
2024-03-19T23:58:46.787647038Z [ENV] REBOOT SCRIPT              ./scripts/atv/spectrum/reboot.sh
2024-03-19T23:58:46.787653334Z [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
2024-03-19T23:58:46.787660357Z  - using env:	export GIN_MODE=release
2024-03-19T23:58:46.787666609Z  - using code:	gin.SetMode(gin.ReleaseMode)
2024-03-19T23:58:46.787672659Z 
2024-03-19T23:58:46.787678546Z [GIN-debug] GET    /favicon.ico              --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2024-03-19T23:58:46.787684963Z [GIN-debug] HEAD   /favicon.ico              --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
2024-03-19T23:58:46.816280186Z [GIN-debug] Loaded HTML Templates (11): 
2024-03-19T23:58:46.816315366Z 	- logs.html
2024-03-19T23:58:46.816322655Z 	- routes.html
2024-03-19T23:58:46.816328878Z 	- status_and_logs.html
2024-03-19T23:58:46.816335351Z 	- stream.html
2024-03-19T23:58:46.816341687Z 	- 
2024-03-19T23:58:46.816348172Z 	- index.html
2024-03-19T23:58:46.816355037Z 	- editm3u.html
2024-03-19T23:58:46.816360921Z 	- m3us.html
2024-03-19T23:58:46.816366967Z 	- status.html
2024-03-19T23:58:46.816372961Z 	- config.html
2024-03-19T23:58:46.816378567Z 	- edit.html
2024-03-19T23:58:46.816384681Z 
2024-03-19T23:58:46.816391035Z [GIN-debug] GET    /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2024-03-19T23:58:46.816397574Z [GIN-debug] HEAD   /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
2024-03-19T23:58:46.816404499Z [GIN-debug] GET    /                         --> main.run.func1 (2 handlers)
2024-03-19T23:58:46.816410517Z [GIN-debug] GET    /routes                   --> main.run.func2 (2 handlers)
2024-03-19T23:58:46.816416699Z [GIN-debug] GET    /play/tuner:tuner/:channel --> main.run.func3 (2 handlers)
2024-03-19T23:58:46.816445382Z [GIN-debug] GET    /m3u/:channel             --> main.run.func4 (2 handlers)
2024-03-19T23:58:46.816452058Z [GIN-debug] GET    /env                      --> main.run.func5 (2 handlers)
2024-03-19T23:58:46.816458268Z [GIN-debug] GET    /logs/text                --> main.run.func6 (2 handlers)
2024-03-19T23:58:46.816464302Z [GIN-debug] GET    /logs                     --> main.run.func7 (2 handlers)
2024-03-19T23:58:46.816470303Z [GIN-debug] GET    /status/andlogs           --> main.run.func8 (2 handlers)
2024-03-19T23:58:46.816476404Z [GIN-debug] GET    /logs/json                --> main.run.func9 (2 handlers)
2024-03-19T23:58:46.816482592Z [GIN-debug] GET    /video                    --> main.run.func10 (2 handlers)
2024-03-19T23:58:46.816488997Z [GIN-debug] GET    /status                   --> main.statusPageHandler (2 handlers)
2024-03-19T23:58:46.816495511Z [GIN-debug] GET    /api/status               --> main.apiStatusHandler (2 handlers)
2024-03-19T23:58:46.816501690Z [GIN-debug] GET    /stream                   --> main.run.func11 (2 handlers)
2024-03-19T23:58:46.816508181Z [GIN-debug] GET    /test/webhook             --> main.run.func12 (2 handlers)
2024-03-19T23:58:46.816514915Z [GIN-debug] GET    /test/email               --> main.run.func13 (2 handlers)
2024-03-19T23:58:46.816526596Z [GIN-debug] GET    /status/channelsactivity  --> main.run.func14 (2 handlers)
2024-03-19T23:58:46.816533084Z [GIN-debug] GET    /edit                     --> main.run.func15 (2 handlers)
2024-03-19T23:58:46.816539039Z [GIN-debug] POST   /save                     --> main.run.func16 (2 handlers)
2024-03-19T23:58:46.816546673Z [GIN-debug] POST   /m3usave/:file            --> main.run.func17 (2 handlers)
2024-03-19T23:58:46.816553004Z [GIN-debug] GET    /m3us                     --> main.run.func18 (2 handlers)
2024-03-19T23:58:46.816559898Z [GIN-debug] GET    /editm3u/:file            --> main.run.func19 (2 handlers)
2024-03-19T23:58:46.816567416Z [GIN-debug] GET    /config                   --> main.run.func20 (2 handlers)
2024-03-19T23:58:46.816577157Z [GIN-debug] POST   /configsave               --> main.run.func21 (2 handlers)
2024-03-19T23:58:46.816583495Z [START] ah4c is ready
2024-03-19T23:58:46.816589634Z [GIN-debug] Listening and serving HTTP on :7654
2024-03-19T23:58:48.415344896Z 
2024-03-19T23:58:48.415391025Z > [email protected] start
2024-03-19T23:58:48.415398891Z > node ./index.js
2024-03-19T23:58:48.415405782Z 
2024-03-19T23:58:49.708288622Z Listening on:
2024-03-19T23:58:49.708330076Z 	http://ah4c-test:8000 http://localhost:8000
2024-03-19T23:58:49.708597375Z 	http://127.0.0.1:8000 http://172.30.0.2:8000
2024-03-20T00:00:06.975035437Z Attempting network tune for device http://192.168.1.41/live/stream3 192.168.1.54 42642 
2024-03-20T00:00:07.019967258Z [EXECUTE] Running [./scripts/atv/spectrum/prebmitune.sh 192.168.1.54 42642]
2024-03-20T00:00:07.023555334Z [EXECUTE] Stdout: ''
2024-03-20T00:00:07.023582656Z [EXECUTE] Stderr: ''
2024-03-20T00:00:07.023589856Z [EXECUTE] Finished running ./scripts/atv/spectrum/prebmitune.sh in 3.488749ms
2024-03-20T00:00:07.023596336Z [EXECUTE] Running [./scripts/atv/spectrum/bmitune.sh 42642 192.168.1.54]
2024-03-20T00:00:10.564582182Z [EXECUTE] Stdout: ''
2024-03-20T00:00:10.564624089Z [EXECUTE] Stderr: ''
2024-03-20T00:00:10.564630912Z [EXECUTE] Finished running ./scripts/atv/spectrum/bmitune.sh in 3.541267417s
2024-03-20T00:00:39.919722188Z [IO] io.Copy: write tcp 172.30.0.2:7654->192.168.1.20:52710: write: broken pipe
2024-03-20T00:00:39.919755951Z [IOINFO] Successfully copied 18478520 bytes
2024-03-20T00:00:39.919763709Z [IOINFO] Transfer speed: 4.493796000082043 Mbits/second
2024-03-20T00:00:39.919770689Z Performing Close() for 192.168.1.54
2024-03-20T00:00:39.919777555Z [EXECUTE] Running [./scripts/atv/spectrum/stopbmitune.sh 192.168.1.54 42642]
2024-03-20T00:00:41.761099478Z [EXECUTE] Stdout: ''
2024-03-20T00:00:41.761131388Z [EXECUTE] Stderr: ''
2024-03-20T00:00:41.761138472Z [EXECUTE] Finished running ./scripts/atv/spectrum/stopbmitune.sh in 1.841744869s
2024-03-20T00:00:41.761242991Z [GIN-debug] Request: 192.168.1.20 GET /play/tuner/42642, latency: 34.786289642s, status: 200

Well, I appreciate you giving it a shot. I'll have access to an AppleTV in the next day or two, so I'll see what I can figure out.

Switched approaches, and I believe I've solved a number of problems. I'm now building using pyatv:master as a base, and since this will be a pyatv specific build, I've removed ws-scrcpy which is strictly for use with adb.

This has allowed me to build both amd64 and arm64, with reasonable container sizes, and 90 second build times instead of 30 minutes.

The container is starting and attempting to scan for AppleTVs, with no traceback errors. Looks good from what I can tell, without actually having an ATV atm.

Try bnhf/ah4c:test2.appletv again when you have a moment. Thanks.

3 Likes

New build looks perfect...found ATV's, tuned channel and stopped fine...then went ahead and tuned both tuners ...both played and stopped when requested...

Docker Log

127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.30.0.2	ah4c-test

Scan Results
========================================
       Name: Entertainment Room
   Model/SW: Apple TV 4, tvOS 17.4
    Address: 192.168.1.54
        MAC: 08:66:98:DB:39:90
 Deep Sleep: False

Identifiers:
 - 371532D4-923E-4726-9D78-8B54E882E58C
 - 08:66:98:DB:39:90
 - 086698DB3990

:
 - Protocol: Companion, Port: 49153, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
 - Protocol: AirPlay, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
 - Protocol: RAOP, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory

Scan Results
========================================
       Name: Home Theater
   Model/SW: Apple TV 4, tvOS 17.4
    Address: 192.168.1.55
        MAC: D0:03:4B:1F:2C:09
 Deep Sleep: False

Identifiers:
 - 4C852F58-5C9D-4A8F-AAA3-86FAE2A32B65
 - D0:03:4B:1F:2C:09
 - D0034B1F2C09

:
 - Protocol: Companion, Port: 49153, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
 - Protocol: AirPlay, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
 - Protocol: RAOP, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
Existing ./scripts/firetv/directv/prebmitune.sh found, and will be preserved
Existing ./scripts/atv/spectrum/prebmitune.sh found, and will be preserved
Existing ./scripts/firetv/directv/bmitune.sh found, and will be preserved
Existing ./scripts/atv/spectrum/bmitune.sh found, and will be preserved
Existing ./scripts/firetv/directv/stopbmitune.sh found, and will be preserved
Existing ./scripts/atv/spectrum/stopbmitune.sh found, and will be preserved
Existing directv.m3u found, and will be preserved
Existing dtvosprey.m3u found, and will be preserved
Existing dtvstream.m3u found, and will be preserved
Existing foo-fighters.m3u found, and will be preserved
Existing fubo.m3u found, and will be preserved
Existing hulu.m3u found, and will be preserved
Existing livetv.m3u found, and will be preserved
Existing npo.m3u found, and will be preserved
Existing silicondust.m3u found, and will be preserved
Existing sling.m3u found, and will be preserved
Existing spectrum.m3u found, and will be preserved
Existing youtubetv_shield.m3u found, and will be preserved
Existing youtubetv.m3u found, and will be preserved
[START] ah4c is starting
[ENV] Not loading env
[ENV] IPADDRESS                  192.168.1.101:7654
[ENV] ALERT_SMTP_SERVER          
[ENV] ALERT_AUTH_SERVER          
[ENV] ALERT_EMAIL_FROM           
[ENV] ALERT_EMAIL_PASS           
[ENV] ALERT_EMAIL_TO             
[ENV] ALERT_WEBHOOK_URL          
[ENV] ALLOW_DEBUG_VIDEO_PREVIEW  
[ENV] Creating tuner             1
[ENV] ENCODER1_URL               http://192.168.1.41/live/stream3
[ENV] TUNER1_IP                  192.168.1.54
[ENV] CMD1                       
[ENV] TEECMD1                    
[ENV] PRE SCRIPT                 ./scripts/atv/spectrum/prebmitune.sh
[ENV] START SCRIPT               ./scripts/atv/spectrum/bmitune.sh
[ENV] STOP SCRIPT                ./scripts/atv/spectrum/stopbmitune.sh
[ENV] REBOOT SCRIPT              ./scripts/atv/spectrum/reboot.sh
[ENV] Creating tuner             2
[ENV] ENCODER2_URL               http://192.168.1.41/live/stream4
[ENV] TUNER2_IP                  192.168.1.55
[ENV] CMD2                       
[ENV] TEECMD2                    
[ENV] PRE SCRIPT                 ./scripts/atv/spectrum/prebmitune.sh
[ENV] START SCRIPT               ./scripts/atv/spectrum/bmitune.sh
[ENV] STOP SCRIPT                ./scripts/atv/spectrum/stopbmitune.sh
[ENV] REBOOT SCRIPT              ./scripts/atv/spectrum/reboot.sh
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:	export GIN_MODE=release
 - using code:	gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET    /favicon.ico              --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
[GIN-debug] HEAD   /favicon.ico              --> github.com/gin-gonic/gin.(*RouterGroup).StaticFile.func1 (2 handlers)
[GIN-debug] Loaded HTML Templates (11): 
	- config.html

	- edit.html
	- index.html
	- routes.html
	- status_and_logs.html
	- 
	- editm3u.html

	- logs.html

	- m3us.html
	- status.html
	- stream.html
[GIN-debug] GET    /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
[GIN-debug] HEAD   /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (2 handlers)
[GIN-debug] GET    /                         --> main.run.func1 (2 handlers)
[GIN-debug] GET    /routes                   --> main.run.func2 (2 handlers)
[GIN-debug] GET    /play/tuner:tuner/:channel --> main.run.func3 (2 handlers)
[GIN-debug] GET    /m3u/:channel             --> main.run.func4 (2 handlers)
[GIN-debug] GET    /env                      --> main.run.func5 (2 handlers)
[GIN-debug] GET    /logs/text                --> main.run.func6 (2 handlers)
[GIN-debug] GET    /logs                     --> main.run.func7 (2 handlers)
[GIN-debug] GET    /status/andlogs           --> main.run.func8 (2 handlers)
[GIN-debug] GET    /logs/json                --> main.run.func9 (2 handlers)
[GIN-debug] GET    /video                    --> main.run.func10 (2 handlers)
[GIN-debug] GET    /status                   --> main.statusPageHandler (2 handlers)
[GIN-debug] GET    /api/status               --> main.apiStatusHandler (2 handlers)
[GIN-debug] GET    /stream                   --> main.run.func11 (2 handlers)
[GIN-debug] GET    /test/webhook             --> main.run.func12 (2 handlers)
[GIN-debug] GET    /test/email               --> main.run.func13 (2 handlers)
[GIN-debug] GET    /status/channelsactivity  --> main.run.func14 (2 handlers)
[GIN-debug] GET    /edit                     --> main.run.func15 (2 handlers)
[GIN-debug] POST   /save                     --> main.run.func16 (2 handlers)
[GIN-debug] POST   /m3usave/:file            --> main.run.func17 (2 handlers)
[GIN-debug] GET    /m3us                     --> main.run.func18 (2 handlers)
[GIN-debug] GET    /editm3u/:file            --> main.run.func19 (2 handlers)
[GIN-debug] GET    /config                   --> main.run.func20 (2 handlers)
[GIN-debug] POST   /configsave               --> main.run.func21 (2 handlers)
[START] ah4c is ready
[GIN-debug] Listening and serving HTTP on :7654
[GIN-debug] Loaded HTML Templates (14): 
	- livetv.m3u
	- silicondust.m3u
	- 
	- dtvosprey.m3u
	- hulu.m3u
	- youtubetv_shield.m3u
	- dtvstream.m3u
	- fubo.m3u
	- directv.m3u
	- foo-fighters.m3u
	- npo.m3u

	- sling.m3u
	- spectrum.m3u
	- youtubetv.m3u
[GIN-debug] Loaded HTML Templates (11): 
	- status.html
	- status_and_logs.html

	- edit.html
	- editm3u.html
	- index.html

	- logs.html

	- m3us.html
	- 
	- config.html
	- routes.html
	- stream.html
[GIN-debug] Request: 192.168.1.20 GET /m3u/spectrum.m3u, latency: 35.895238ms, status: 200
Attempting network tune for device http://192.168.1.41/live/stream3 192.168.1.54 42642 
[EXECUTE] Running [./scripts/atv/spectrum/prebmitune.sh 192.168.1.54 42642]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/prebmitune.sh in 5.322115ms
[EXECUTE] Running [./scripts/atv/spectrum/bmitune.sh 42642 192.168.1.54]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/bmitune.sh in 2.891814532s
[IO] io.Copy: write tcp 172.30.0.2:7654->192.168.1.20:52976: write: broken pipe
[IOINFO] Successfully copied 9513556 bytes
[IOINFO] Transfer speed: 2.3890440428852626 Mbits/second
Performing Close() for 192.168.1.54
[EXECUTE] Running [./scripts/atv/spectrum/stopbmitune.sh 192.168.1.54 42642]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/stopbmitune.sh in 1.368846651s
[GIN-debug] Request: 192.168.1.20 GET /play/tuner/42642, latency: 33.237336013s, status: 200
Attempting network tune for device http://192.168.1.41/live/stream3 192.168.1.54 58515 
[EXECUTE] Running [./scripts/atv/spectrum/prebmitune.sh 192.168.1.54 58515]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/prebmitune.sh in 5.063092ms
[EXECUTE] Running [./scripts/atv/spectrum/bmitune.sh 58515 192.168.1.54]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/bmitune.sh in 2.769673083s
Tuner 0 is active - skipping
Attempting network tune for device http://192.168.1.41/live/stream4 192.168.1.55 59337 
[EXECUTE] Running [./scripts/atv/spectrum/prebmitune.sh 192.168.1.55 59337]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/prebmitune.sh in 5.183264ms
[EXECUTE] Running [./scripts/atv/spectrum/bmitune.sh 59337 192.168.1.55]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/bmitune.sh in 2.651689713s
[IO] io.Copy: write tcp 172.30.0.2:7654->192.168.1.20:52984: write: broken pipe
[IOINFO] Successfully copied 8023840 bytes
[IOINFO] Transfer speed: 2.8400081022456165 Mbits/second
Performing Close() for 192.168.1.55
[EXECUTE] Running [./scripts/atv/spectrum/stopbmitune.sh 192.168.1.55 59337]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/stopbmitune.sh in 1.442030755s
[GIN-debug] Request: 192.168.1.20 GET /play/tuner/59337, latency: 24.056164233s, status: 200
[IO] io.Copy: write tcp 172.30.0.2:7654->192.168.1.20:52982: write: broken pipe
[IOINFO] Successfully copied 34793536 bytes
[IOINFO] Transfer speed: 5.268985117277173 Mbits/second
Performing Close() for 192.168.1.54
[EXECUTE] Running [./scripts/atv/spectrum/stopbmitune.sh 192.168.1.54 58515]
[EXECUTE] Stdout: ''
[EXECUTE] Stderr: ''
[EXECUTE] Finished running ./scripts/atv/spectrum/stopbmitune.sh in 1.352648327s
[GIN-debug] Request: 192.168.1.20 GET /play/tuner/58515, latency: 54.191713534s, status: 200

Not sure what is possible but was thinking about the ATV pairings...would your web portal be able to have a button for each tuner for pairing...when it is pressed it would display the hdmi stream for that ATV and provide an input for the code that would be displayed?
If I remember right we only really need to pair companion protocol...but I could confirm this.

That's excellent -- and addresses several issues!

I'm thinking about something simpler -- basically a script that would run atvremote wizard in the pyatv:master container, but from the host's command line using "host" networking so discovery works. It would look something like this:

Looking for devices...
Found the following devices:
    Name                      Model                    Address
--  ------------------------  -----------------------  -----------
 1  Receiver+                 airupnp                  10.0.10.200
 2  Receiver                  RX-V773                  10.0.10.82
 3  Pierre's AirPort Express  AirPort Express (gen 2)  10.0.10.168
 4  FakeATV                   Unknown                  10.0.10.254
 5  Vardagsrum                Apple TV 4K              10.0.10.81
 6  Apple TV                  Apple TV 3               10.0.10.83
Enter index of device to set up (q to quit): 4
Starting to set up FakeATV
Starting to pair Protocol.MRP
Enter PIN on screen: 1111
Successfully paired Protocol.MRP, moving on...
Pairing finished, trying to connect and get some metadata...
Currently playing:
  Media type: Music
Device state: Playing
       Title: Never Gonna Give You Up
      Artist: Rick Astley
    Position: 1/213s (0.0%)
      Repeat: Off
     Shuffle: Off
Device is now set up!

And when complete, would place the .pyatv.conf file in our desired location. One would use whatever preview support was built-in to their HDMI Encoder to see the code:

1 Like

:grinning:
Sounds much simpler...just let me know when you need something tested or if there is anything else I can do.

New bnhf/ah4c:appletv pushed which includes a pairing script to use with your encoder-connected AppleTV streaming boxes.

Spin-up the container as usual, and once it's running, execute the following from a command prompt on your docker host:

docker exec -it ah4c scripts/atv/spectrum/atvpair.sh <your_appletv_ip>

You'll be prompted to enter the pairing code that will display on the AppleTV's output device. Most encoders have the ability to monitor the captured video in order to view the code -- or you can use VLC.

If you've previously paired AppleTVs, the .pyatv.conf file that contains those credentials will be moved temporarily from persistent storage, to the standard location. After a new device is added, the updated or newly created file will be moved back to the persistent location.

doesn't look like the script is there....can't find it

Sorry about that. Should be there now though -- repull :appletv.

:+1: @bnhf

Tested adding both tuners one at a time using your script...with and without pre-existing .pyatv.conf file and it worked everytime.

Outstanding. Though a bit of a battle at times, I'm happy with the end result here. Any reason to keep the two test builds around? If not, I'll nuke them later today.

No need as far as I know...Should the image continue to be bnhf/ah4c:appletv or should I move to :latest ?