ESPN+ with Custom Channels via ADBTuner

thanks - this was my gap.

Gave this a small shot this afternoon, but running into the following: (removed the ID after tune figuring it might be identifying)

2025-11-10 19:11:39.974 - stream - [Tune blah] localhost:5592 | Go-http-client/1.1

2025-11-10 19:11:39.976 - stream - [Tune (blah)] No active tuners found for ESPN+14. Reserving a new tuner.

2025-11-10 19:11:39.976 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:40.981 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:41.992 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:43.002 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:44.006 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:45.011 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:46.016 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:47.026 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:48.036 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:49.040 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:50.045 - stream - [Tune (blah)] No tuners available for: ['com.espn.gtv', 'com.espn.gtv'].
1 Like

Any chance you haven't installed the ESPN app on your streaming sticks?

Nope - made sure and tuned on that (already working) Onn prior to installing

Can you confirm com.espn.gtv is the correct package name on an Onn device? I've only tested on FireSticks.

Based on play store for Onn device, it looks like it might be:

id=com.espn.score_center

I'm going to try it out

still no dice - it did seem to get slightly further though, and lock the tuner:

2025-11-10 20:10:31.049 - tuner_management - [Tune gfjiuyBTLZ9PMRQuyKykzD] Attempting to reserve tuner for: ['com.espn.score_center', 'com.espn.gtv'].

2025-11-10 20:10:31.051 - tuner_management - [Tune gfjiuyBTLZ9PMRQuyKykzD] Available Tuners:

2025-11-10 20:10:31.051 - tuner_management - [Tune gfjiuyBTLZ9PMRQuyKykzD] Name: Onn Priority: 

2025-11-10 20:10:31.051 - tuner_management - [Tune gfjiuyBTLZ9PMRQuyKykzD] Using first available tuner (by priority).

2025-11-10 20:10:31.051 - tuner_management - [Tune gfjiuyBTLZ9PMRQuyKykzD] Reserved Tuner: Name: Onn Priority: 

2025-11-10 20:10:31.051 - stream - [Tune (gfjiuyBTLZ9PMRQuyKykzD)] Tuning to ESPN+5 on Onn

2025-11-10 20:10:31.052 - stream - [Tune (gfjiuyBTLZ9PMRQuyKykzD)] Using channel configuration: ESPN+ Deep Links - Show Tuning Process (51af5028-092f-4ddc-b4ea-d5e5fca58cac)

2025-11-10 20:10:31.351 - lib.adb - [Tune (gfjiuyBTLZ9PMRQuyKykzD)] ADB: 192.168.50.148 - pidof com.espn.score_center

2025-11-10 20:10:31.411 - stream - [Tune (gfjiuyBTLZ9PMRQuyKykzD)] Resolving dynamic URL (http://host.docker.internal:8094/whatson/5) for channel.

2025-11-10 20:10:32.128 - stream - [Tune gfjiuyBTLZ9PMRQuyKykzD] Redirecting to stream after 1.08 seconds (fixed delay of 1 seconds exceeded). Tuning is still in progress.

2025-11-10 20:10:32.129 - uvicorn.access - 138.68.32.225:0 - "GET /stream/127 HTTP/1.1" 307

2025/11/10 20:10:32 [PROXY] 138.68.32.225 -> GET "/proxy/1?requestKey=gfjiuyBTLZ9PMRQuyKykzD" -> "http://192.168.50.59:8090/stream0"

2025-11-10 20:10:36.449 - stream - [Tune (gfjiuyBTLZ9PMRQuyKykzD)] ERROR: Could not retrieve dynamic URL data: timed out

Check in Portainer-Networks, and see what the IP address of your Docker Gateway bridge is:

If it's something other than 172.17.0.1, we'll need to adjust the value of DOCKER_GATEWAY in the env vars section of your adbtuner stack.

it is 172.17.0.1 , but i also tried setting explicitly - no change unfort

Another data point - when i hit dvrserver:8094 in a browser, I get:

{"detail":"Not Found"}

Good info. Let me futz around with this a bit and I'll get back to you. It'll probably be tomorrow.

no worries at all - thanks for help! UConn will be on tonight, so I'll be too busy watching FS1 anyway :slight_smile:

40 channels?

Can I get additional channels by changing the Lanes variable in the container and modifying the ADB Tuner m3u accordingly?

Lots of college basketball now and I would like to see more channels. Thanks!!

So I’ve actually never tested changing from the default 40 lanes…. It should work though. I’ll test it too, but if you’re feeling froggy, try it too. Can’t hurt.

:test_tube: ESPN4CC4C — Filtering Test Build (Branch: feature/filtering-ingest-20251110)

Hey everyone,

We’ve added a new filtering system to ESPN4CC4C that lets you include/exclude leagues, sports, or networks directly from a simple filters.ini file. There’s also a built-in API and HTML page to visualize what’s currently in the database and fine-tune filters.


:arrows_counterclockwise: How to Pull the Branch

If you already cloned:

cd ~/Projects/ESPN4CC4C
git fetch origin
git checkout feature/filtering-ingest-20251110
git pull
docker compose build && docker compose up -d

If setting up fresh:

cd ~/Projects
git clone -b feature/filtering-ingest-20251110 https://github.com/kineticman/ESPN4CC4C.git
cd ESPN4CC4C
./bootstrap.sh

:toolbox: New Features to Test

:one: API for filters (see what’s in DB)

  • HTML view: http://:8094/filters
    → Shows all networks, sports, leagues, event types with counts.
    → Includes “tip” section showing valid names for your .ini file.

  • JSON view: http://:8094/filters/json
    → Same data, but machine-readable for scripts.

:two: Filter control via filters.ini

Located in the project root. Example:

[leagues]
include = *
exclude = nba, ncaa women's volleyball, ncaaw, nfl

Run manually:

python bin/filter_events.py ./data/eplus_vc.sqlite3 ./filters.ini

You’ll see total event counts, how many were filtered out, and the first few included IDs.

:three: Rebuild plan (optional)

./update_schedule.sh

The resolver will then serve only the filtered events.


:white_check_mark: Things to Verify

  • /filters accurately reflects what’s in your DB.
  • Editing .ini changes which events are included.
  • /whatson_all?include=deeplink only returns filtered events.
  • JSON + HTML both work via browser and curl.

:compass: Quick Test URLs

  • Health → http://<host>:8094/health
  • Filters HTML → http://<host>:8094/filters
  • Filters JSON → http://<host>:8094/filters/json
  • Current events → http://<host>:8094/whatson_all?include=deeplink
  • Debug lane → http://<host>:8094/vc/6/debug

:speech_balloon: Feedback Wanted

Please post:

  • How filtering behaved for your setup
  • Any leagues that still slipped through
  • Suggestions for /filters layout or counts display

I am using this with onn dongles -- not fire tvs -- and noted that the app has a different name than in the example channels (com.espn.score_center).

I've fixed that and it tunes to the event correctly, but starts at the beginning and does not tune to "live" despite me adding the configuration to my ADBTuner setup.

Any advice?

1 Like

That's what the post_playback_start_commands take care of on FireSticks, but there must be some difference on this between the apps:

You could also try sending multiple fast forwards -- generally three will get you to the fastest fast forward. This will move you to live on the timeline, and should switch to "play" automatically once you're at the live point:

    "post_playback_start_commands": [
        "sleep 20",
        "input keyevent KEYCODE_MEDIA_FAST_FORWARD",
        "input keyevent KEYCODE_MEDIA_FAST_FORWARD",
        "input keyevent KEYCODE_MEDIA_FAST_FORWARD"
    ],

OK, so let's try a few things.

From a browser, can you post the output for:

http://<your-docker-host>:8094/health
http://<your-docker-host>:8094/out/epg.xml

Next, could you exec into the ADBTuner container; install curl; and execute the following:

apt update
apt install curl
curl http://host.docker.internal/whatson/1

Also, are you seeing actual ESPN+ events in your 40 channel guide?

Seems fine:
{"ok":true,"ts":"2025-11-11T11:04:46+00:00"}

<tv generator-info-name="espn-clean-v2.1">

<channel id="1">

<display-name>ESPN+ EPlus 1</display-name>

<lcn>20010</lcn>

</channel>    (with lots more)

The curl command gave this, but thinking it might be a different port anyway?

curl http://host.docker.internal/whatson/1
curl: (7) Failed to connect to host.docker.internal port 80 after 0 ms: Couldn't connect to server

And yes, guide populating. I was picking a test channel with the package name switch with a program i was able to watch on the same device

Yes, sorry, the curl command should be:

curl http://host.docker.internal:8094/whatson/1
curl http://host.docker.internal:8094/whatson/1
curl: (28) Failed to connect to host.docker.internal port 8094 after 136359 ms: Couldn't connect to server