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.
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).
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.
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...
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...
Basically Docker is the backbone application on your OS that allows you to run individual ISOLATED applications separate from each other. These isolated applications are called containers.
Portainer is just one of these isolated containers. It ALLOWS you to easily create and/or manage all your other containers.
I would follow @bnhf installation instructions for docker, olivetin, portainer...
Once you have Docker/Portainer installed...Log in to Portainer and created a new "stack". At that point you will follow the instructions at the top of this thread and copy/paste the ah4c compose file into the editor and the variables into the variable section using your unique variables and run it.
With the HDHomerun you should already have access to all the unencrypted channels directly in CDVR. Correct?
Do you already have the Spectrum app installed on your ATV's and working?
I havent posted the scripts anywhere yet. As of now they arent bullet proof turn key scripts. They are usable under certain conditions. I was planning on adding some OCR or other method to error handling, and havent completed that part of the project.
So I have to spend time “productizing” everything for more general purpose use by the community with tuner error correction. It going to take some time for me to do this. Definitely on my bullet list of to dos. Thanks for poking me!
You guys are all great, thank you for your tips and advice!!!
I'm running Ubuntu 20.04 about 5 years, verified it is desktop, but you're right I never really use that, mostly CLI. Starting over with server may be a pain if I have to re-install everything. Wondering if there is a way to 'upgrade' to server. Perhaps need to Google and chatGPT more. I guess there is a way to install server packages and remove desktop without full start-over, but not sure how 'clean' this is.
Here’s something I’m worried about: Apparently I did install docker some time ago just playing around but never spun up anything, so it’s just been sitting there. So, if I need to install the docker convenience scripts: '$ curl -fsSL https://get.docker.com -o install-docker.sh', I'm wondering if I should first remove current docker installation, then get the convenience scripts, then re-install docker. I don't want to bork anything.
I'd roll with what you have in that case. Hopefully Desktop will stay out of the way. 20.04 is a couple of major releases behind now, so when you decide to upgrade a transition to Server would be a good move.
Again, I'd roll with what you have, as long as it isn't Docker Desktop for Linux -- then I would uninstall it. If it's regular Docker you should be fine.
Also, I need to read more about OliveTin.
I'm currently running CDVR not in a docker, but directly in Ubuntu. Thinking back now, the reason I didn't use docker was that my Linux box is Intel gen 9 processor (i3-9100) and I wanted to take advantage of Intel Quick Sync for hardware transcoding and was worried about issues getting that to work through docker with 20.04 at the time.
Will I still be able to take advantage of some of the things OliveTin has to offer (installation on same machine as CDVR) without running CDVR in docker? I guess once I go down the docker road, I may want to move everything in that direction, especially if I start over with server at some point. But, not interested in making the project bigger than it needs to be right now.
OliveTin-for-Channels doesn't care where your CDVR server is running, so that won't be an issue. There's no particular advantage to having CDVR installed in Docker.
Docker is popular with open source developers, given that one's application is packaged with the OS it's going to run on, which greatly reduces testing and installer requirements. And it's popular with users, as it allows applications to be added or removed with nothing modified or left behind.
Docker requires some additional resources vs installing directly, but overall it's a win for both developers and users.
Yes, so that will just remain as the current M3U source in CDVR. Someday, once (if) ATSC 3.0 becomes available in my area I may want to look into processing through ah4c if necessary (if it's even worth it).
I use ATV's only for my current CDVR implementation, but I purchased additional ones off eBay to set up as Spectrum ATV tuners specifically for this project. Also purchased 2 Magewell dual port HDMI (fanless) for this project. I see someone has about 10 of these on eBay right now for about $65 each - less than I paid.
You'll be blazing a new trail here using Magewell cards in Docker. I don't see any reason why they wouldn't work, but the previous couple of people I can think of that used Magewell had ah4c installed at the OS level. On paper, it should just be a matter of passing the devices into the container.
The other thing that I remember being interesting about Magewell, is that their streams required ffmpeg post processing. When using network encoders, they're doing all the encoding work, but with Magewell there's going to be a load on your Docker host to consider.
They sound a lot more like a capture device than an encoder in the way I've seen them being used with ah4c. Probably worth mentioning too here, that the sum total of what you're doing should be considered "advanced". It should be doable, and I'm sure you'll have people willing to help, but this combination of gear is not from the mainstream of users.
ah4c:appletv is available only as docker, is that correct? Time to put on the learning hat and blaze the trail I guess.
Yes, the other Magewell users were capturing from Android devices -- as the vast majority of ah4c and ADBTuner users are. It's technically possible to do this without using Docker, but you'd be very much on your own.