This has been changed in the latest EPlusTV version 4.14.3
Networking
Learn how networking works from the container's point of view
This has been changed in the latest EPlusTV version 4.14.3
For a command line docker run command, use
--dns=1.1.1.1 --dns=1.0.0.1 for Cloudflare DNS or
--dns=8.8.8.8 --dns=8.8.4.4 for Google DNS or
--dns=9.9.9.9 for Quad9 DNS, etc.
Refer to Docker Documentation
Learn how networking works from the container's point of view
Just built a new server with truenas. I am getting the following error when I try to update
[EINVAL] options.app_version: Upgrade version must be greater than current version
| Error Name: | EINVAL |
|---|---|
| Error Code: | 22 |
| Reason: | [EINVAL] options.app_version: Upgrade version must be greater than current version |
| Error Class: | ValidationErrors |
Problem with Fox One Linear channels and XMLTV guide data.
Since the Gracenote guide data is wrong for some channels, I wanted to use a 2 source method.
One source for channels with Gracenote guide data
A second source for channels using Fox One guide data (linear-xmltv.xml)
It's not working.
1 and 2 contain the same information, including the gracenote/tms station id tvc-guide-stationid=
3 is empty (just contains the line #EXTM3U)
4 is the Fox One guide data that I'm trying to use
So as an example, I want the Fox One (not Gracenote) epg for The Masked Singer channel
I add a custom m3u source to Channels DVR with the following settings
Since the linear-channels.m3u contain the gracenote/tms station id tvc-guide-stationid=, Channels DVR ignores the linear-xmltv.xml epg.
Can we also get a linear-channels.m3u that doesn't contain the gracenote/tms station id tvc-guide-stationid= that could be used with Fox One linear-xmltv.xml epg.
Right now to work around it, I download the linear-channel.m3u to a file, edit the file to remove the gracenote/tms station id tvc-guide-stationid, then copy and paste it into the Channels DVR custom m3u source settings as a Text Source.
Since masked singer channel is not working correctly, it should be able to have the gracenote id taken out of the code. It just has to be stripped for the channel in two places and then the gracenote=exclude should work. I will test it out.
Thanks,
It's an unusual channel as it plays ad-less episodes (average 44 minutes each).
Gracenote epg lists each episode as 60 minutes, so recording with gracenote epg gets you parts of two or three episodes in the 60 minute time slot.
I tested it out and it it worked, adding it to the non-gracenote m3u. It will then pull the guide data from the xml. I made a PR for it so once Tony approves it can be safely added.
I tested it out and it it worked, adding it to the non-gracenote m3u. It will then pull the guide data from the xml. I made a PR for it so once Tony approves it can be safely added.
This has been merged in v4.14.4
Thanks @GenericChannelsUser and @tonywagner
It's working.
The only possible issue I see is that the m3u playlist linear-channels.m3u?gracenote=exclude does not contain the m3u tag channel-id, so Channels DVR falls back to using the tag
tvg-name="FOX Digital" for the channel ID. This will cause a problem if more than one non-gracenote channel uses this same tvg-name.
Container crashed and restarted after requesting a Rebuild EPG
Running v4.14.4
I did a Rebuild EPG from the container web page
2025-11-11T04:08:19.077554683Z Updating FOX One prelim token
2025-11-11T04:08:19.388919513Z Refreshing TV Provider token (FOX One)
2025-11-11T04:10:41.352368095Z === Getting events ===
2025-11-11T04:10:41.353730396Z Looking for FOX One events...
2025-11-11T04:10:43.420569923Z TypeError: Response body object should not be disturbed or locked
2025-11-11T04:10:43.421294367Z at extractBody (node:internal/deps/undici/undici:5344:17)
2025-11-11T04:10:43.422417862Z at new Request (node:internal/deps/undici/undici:6325:48)
2025-11-11T04:10:43.422498330Z at new Request (/app/node_modules/@hono/node-server/dist/index.js:68:5)
2025-11-11T04:10:43.422559150Z at newRequestFromIncoming (/app/node_modules/@hono/node-server/dist/index.js:99:10)
2025-11-11T04:10:43.422612523Z at Request.[getRequestCache] (/app/node_modules/@hono/node-server/dist/index.js:120:35)
2025-11-11T04:10:43.422660990Z at Request.[getAbortController] (/app/node_modules/@hono/node-server/dist/index.js:115:26)
2025-11-11T04:10:43.422711671Z at ServerResponse.<anonymous> (/app/node_modules/@hono/node-server/dist/index.js:443:34)
2025-11-11T04:10:43.422761719Z at ServerResponse.emit (node:events:517:28)
2025-11-11T04:10:43.422806971Z at ServerResponse.emit (node:domain:489:12)
2025-11-11T04:10:43.422850138Z at emitCloseNT (node:_http_server:1020:10)
2025-11-11T04:10:46.136777271Z
2025-11-11T04:10:46.137489868Z > [email protected] start
2025-11-11T04:10:46.137605001Z > ts-node -r tsconfig-paths/register index.tsx
2025-11-11T04:10:46.137659379Z
2025-11-11T04:11:08.493342196Z === E+TV v4.14.4 starting ===
Wow.. This is just wild. My ESPN+ worked fine until a couple days ago. I have recordings on SEC+ up until Friday night. Spectrum changed my package to one that didn't have ESPNU or News, I was trying to set it up through my Disney+ Espn and thought I had broken it... Guess I didn't.
OK. I noticed that my SEC Network+ was working under EPlusTV last night. Is it intermittently not working or do certain channels still work? Thanks
SEC Network+ isn't DRM-d so it'll work. The only things ESPN-wise that are DRM'd are ESPN+ (or ESPN Select)
Well I spent some time messing with it today. I changed DNS to Cloudflare and it didn't seem to make a difference. Then changed to Google. Same.
Does the error log look identical to you?
2025-11-12 19:10:22.348 |
2025-11-12 19:10:22.348 | > [email protected] start
2025-11-12 19:10:22.348 | > ts-node -r tsconfig-paths/register index.tsx
2025-11-12 19:10:22.348 |
2025-11-12 19:10:33.852 | === E+TV v4.14.4 starting ===
2025-11-12 19:10:40.032 | Updating FOX One prelim token
2025-11-12 19:10:40.386 | Refreshing TV Provider token (FOX One)
2025-11-12 19:10:41.651 | HTTP server started on port 8000
2025-11-12 19:10:41.896 | === Getting events ===
2025-11-12 19:10:41.905 | Looking for FOX One events...
2025-11-12 19:10:45.383 | === Done getting events ===
2025-11-12 19:10:45.383 | === Building the schedule ===
2025-11-12 19:10:45.389 | === Done building the schedule ===
2025-11-12 19:10:55.240 | Channel #316 has an active event (Jesse Watters Primetime). Going to start the stream.
2025-11-12 19:25:19.001 | Channel #312 has an active event (College Basketball - Wisconsin-Milwaukee at Indiana). Going to start the stream.
2025-11-12 19:26:43.948 | Could not parse chunklist properly!
2025-11-12 19:26:43.986 | Could not get chunklist for channel #316.
2025-11-12 19:26:43.986 | AxiosError: timeout of 60000ms exceeded
2025-11-12 19:26:43.987 | at RedirectableRequest.handleRequestTimeout (/app/node_modules/axios/lib/adapters/http.js:570:16)
2025-11-12 19:26:43.987 | at RedirectableRequest.emit (node:events:517:28)
2025-11-12 19:26:43.987 | at RedirectableRequest.emit (node:domain:489:12)
2025-11-12 19:26:43.987 | at Timeout.<anonymous> (/app/node_modules/follow-redirects/index.js:169:12)
2025-11-12 19:26:43.987 | at listOnTimeout (node:internal/timers:569:17)
2025-11-12 19:26:43.987 | at processTimers (node:internal/timers:512:7) {
2025-11-12 19:26:43.987 | code: 'ECONNABORTED',
2025-11-12 19:26:43.987 | config: {
2025-11-12 19:26:43.987 | transitional: {
2025-11-12 19:26:43.987 | silentJSONParsing: true,
2025-11-12 19:26:43.987 | forcedJSONParsing: true,
2025-11-12 19:26:43.987 | clarifyTimeoutError: false
2025-11-12 19:26:43.987 | },
2025-11-12 19:26:43.987 | adapter: [ 'xhr', 'http' ],
2025-11-12 19:26:43.987 | transformRequest: [ [Function: transformRequest] ],
2025-11-12 19:26:43.987 | transformResponse: [ [Function: transformResponse] ],
2025-11-12 19:26:43.987 | timeout: 60000,
2025-11-12 19:26:43.987 | xsrfCookieName: 'XSRF-TOKEN',
2025-11-12 19:26:43.987 | xsrfHeaderName: 'X-XSRF-TOKEN',
2025-11-12 19:26:43.987 | maxContentLength: -1,
2025-11-12 19:26:43.987 | maxBodyLength: -1,
2025-11-12 19:26:43.987 | env: { FormData: [Function [FormData]], Blob: [class Blob] },
2025-11-12 19:26:43.987 | validateStatus: [Function: validateStatus],
2025-11-12 19:26:43.987 | headers: AxiosHeaders {
2025-11-12 19:26:43.987 | Accept: 'application/json, text/plain, */*',
2025-11-12 19:26:43.987 | 'Accept-Encoding': 'identity',
2025-11-12 19:26:43.987 | 'User-Agent': 'foxone-androidtv/1.3.0 (Linux; Android 12; en-us; onn. 4K Streaming Box Build/SGZ1.221127.063.A1.9885170)'
2025-11-12 19:26:43.987 | },
2025-11-12 19:26:43.987 | method: 'get',
2025-11-12 19:26:43.987 | url: 'https://foxdtc-video.akamaized.net/live-dr/fnc-ue2/hdntl=exp=1763082655~acl=%2f*~data=hdntl~hmac=eccbddb286e5e600d07db98baa90dad9dab0fea00f8d06be389c93e9fe251a13/index_7.m3u8',
2025-11-12 19:26:43.987 | data: undefined
2025-11-12 19:26:43.987 | },
2025-11-12 19:26:43.987 | request: <ref *1> Writable {
2025-11-12 19:26:43.987 | _writableState: WritableState {
2025-11-12 19:26:43.987 | objectMode: false,
2025-11-12 19:26:43.987 | highWaterMark: 16384,
2025-11-12 19:26:43.987 | finalCalled: false,
2025-11-12 19:26:43.987 | needDrain: false,
2025-11-12 19:26:43.987 | ending: false,
2025-11-12 19:26:43.987 | ended: false,
2025-11-12 19:26:43.987 | finished: false,
2025-11-12 19:26:43.987 | destroyed: false,
2025-11-12 19:26:43.987 | decodeStrings: true,
2025-11-12 19:26:43.987 | defaultEncoding: 'utf8',
2025-11-12 19:26:43.987 | length: 0,
2025-11-12 19:26:43.987 | writing: false,
2025-11-12 19:26:43.987 | corked: 0,
2025-11-12 19:26:43.987 | sync: true,
2025-11-12 19:26:43.987 | bufferProcessing: false,
2025-11-12 19:26:43.987 | onwrite: [Function: bound onwrite],
2025-11-12 19:26:43.987 | writecb: null,
2025-11-12 19:26:43.987 | writelen: 0,
2025-11-12 19:26:43.987 | afterWriteTickInfo: null,
2025-11-12 19:26:43.987 | buffered: [],
2025-11-12 19:26:43.987 | bufferedIndex: 0,
2025-11-12 19:26:43.987 | allBuffers: true,
2025-11-12 19:26:43.987 | allNoop: true,
2025-11-12 19:26:43.987 | pendingcb: 0,
2025-11-12 19:26:43.987 | constructed: true,
2025-11-12 19:26:43.987 | prefinished: false,
2025-11-12 19:26:43.987 | errorEmitted: false,
2025-11-12 19:26:43.987 | emitClose: true,
2025-11-12 19:26:43.988 | autoDestroy: true,
2025-11-12 19:26:43.988 | errored: null,
2025-11-12 19:26:43.988 | closed: false,
2025-11-12 19:26:43.988 | closeEmitted: false,
2025-11-12 19:26:43.988 | [Symbol(kOnFinished)]: []
2025-11-12 19:26:43.988 | },
2025-11-12 19:26:43.988 | _events: [Object: null prototype] {
2025-11-12 19:26:43.988 | response: [Function: handleResponse],
2025-11-12 19:26:43.988 | error: [Function: handleRequestError],
2025-11-12 19:26:43.988 | socket: [Array]
2025-11-12 19:26:43.988 | },
2025-11-12 19:26:43.988 | _eventsCount: 3,
2025-11-12 19:26:43.988 | _maxListeners: undefined,
2025-11-12 19:26:43.988 | _options: {
2025-11-12 19:26:43.988 | maxRedirects: 21,
2025-11-12 19:26:43.988 | maxBodyLength: Infinity,
2025-11-12 19:26:43.988 | protocol: 'https:',
2025-11-12 19:26:43.988 | path: '/live-dr/fnc-ue2/hdntl=exp=1763082655~acl=%2f*~data=hdntl~hmac=eccbddb286e5e600d07db98baa90dad9dab0fea00f8d06be389c93e9fe251a13/index_7.m3u8',
2025-11-12 19:26:43.988 | method: 'GET',
2025-11-12 19:26:43.988 | headers: [Object: null prototype],
2025-11-12 19:26:43.988 | agents: [Object],
2025-11-12 19:26:43.988 | auth: undefined,
2025-11-12 19:26:43.988 | beforeRedirect: [Function: dispatchBeforeRedirect],
2025-11-12 19:26:43.988 | beforeRedirects: [Object],
2025-11-12 19:26:43.988 | hostname: 'foxdtc-video.akamaized.net',
2025-11-12 19:26:43.988 | port: '',
2025-11-12 19:26:43.988 | agent: undefined,
2025-11-12 19:26:43.988 | nativeProtocols: [Object],
2025-11-12 19:26:43.988 | pathname: '/live-dr/fnc-ue2/hdntl=exp=1763082655~acl=%2f*~data=hdntl~hmac=eccbddb286e5e600d07db98baa90dad9dab0fea00f8d06be389c93e9fe251a13/index_7.m3u8'
2025-11-12 19:26:43.988 | },
2025-11-12 19:26:43.988 | _ended: true,
2025-11-12 19:26:43.988 | _ending: true,
2025-11-12 19:26:43.988 | _redirectCount: 0,
2025-11-12 19:26:43.988 | _redirects: [],
2025-11-12 19:26:43.988 | _requestBodyLength: 0,
2025-11-12 19:26:43.988 | _requestBodyBuffers: [],
2025-11-12 19:26:43.988 | _onNativeResponse: [Function (anonymous)],
2025-11-12 19:26:43.988 | _currentRequest: ClientRequest {
2025-11-12 19:26:43.988 | _events: [Object: null prototype],
2025-11-12 19:26:43.988 | _eventsCount: 7,
2025-11-12 19:26:43.988 | _maxListeners: undefined,
2025-11-12 19:26:43.988 | outputData: [],
2025-11-12 19:26:43.988 | outputSize: 0,
2025-11-12 19:26:43.988 | writable: true,
2025-11-12 19:26:43.988 | destroyed: false,
2025-11-12 19:26:43.988 | _last: true,
2025-11-12 19:26:43.988 | chunkedEncoding: false,
2025-11-12 19:26:43.988 | shouldKeepAlive: false,
2025-11-12 19:26:43.988 | maxRequestsOnConnectionReached: false,
2025-11-12 19:26:43.988 | _defaultKeepAlive: true,
2025-11-12 19:26:43.988 | useChunkedEncodingByDefault: false,
2025-11-12 19:26:43.988 | sendDate: false,
2025-11-12 19:26:43.988 | _removedConnection: false,
2025-11-12 19:26:43.988 | _removedContLen: false,
2025-11-12 19:26:43.988 | _removedTE: false,
2025-11-12 19:26:43.988 | strictContentLength: false,
2025-11-12 19:26:43.988 | _contentLength: 0,
2025-11-12 19:26:43.988 | _hasBody: true,
2025-11-12 19:26:43.988 | _trailer: '',
2025-11-12 19:26:43.988 | finished: true,
2025-11-12 19:26:43.988 | _headerSent: true,
2025-11-12 19:26:43.988 | _closed: false,
2025-11-12 19:26:43.988 | socket: [TLSSocket],
2025-11-12 19:26:43.988 | _header: 'GET /live-dr/fnc-ue2/hdntl=exp=1763082655~acl=%2f*~data=hdntl~hmac=eccbddb286e5e600d07db98baa90dad9dab0fea00f8d06be389c93e9fe251a13/index_7.m3u8 HTTP/1.1\r\n' +
2025-11-12 19:26:43.988 | 'Accept: application/json, text/plain, */*\r\n' +
2025-11-12 19:26:43.988 | 'Accept-Encoding: identity\r\n' +
2025-11-12 19:26:43.988 | 'User-Agent: foxone-androidtv/1.3.0 (Linux; Android 12; en-us; onn. 4K Streaming Box Build/SGZ1.221127.063.A1.9885170)\r\n' +
2025-11-12 19:26:43.988 | 'Host: foxdtc-video.akamaized.net\r\n' +
2025-11-12 19:26:43.988 | 'Connection: close\r\n' +
2025-11-12 19:26:43.988 | '\r\n',
2025-11-12 19:26:43.988 | _keepAliveTimeout: 0,
2025-11-12 19:26:43.988 | _onPendingData: [Function: nop],
2025-11-12 19:26:43.988 | agent: [Agent],
2025-11-12 19:26:43.988 | socketPath: undefined,
2025-11-12 19:26:43.988 | method: 'GET',
2025-11-12 19:26:43.988 | maxHeaderSize: undefined,
2025-11-12 19:26:43.988 | insecureHTTPParser: undefined,
2025-11-12 19:26:43.988 | joinDuplicateHeaders: undefined,
2025-11-12 19:26:43.988 | path: '/live-dr/fnc-ue2/hdntl=exp=1763082655~acl=%2f*~data=hdntl~hmac=eccbddb286e5e600d07db98baa90dad9dab0fea00f8d06be389c93e9fe251a13/index_7.m3u8',
2025-11-12 19:26:43.988 | _ended: false,
2025-11-12 19:26:43.988 | res: null,
2025-11-12 19:26:43.988 | aborted: false,
2025-11-12 19:26:43.988 | timeoutCb: null,
2025-11-12 19:26:43.988 | upgradeOrConnect: false,
2025-11-12 19:26:43.988 | parser: [HTTPParser],
2025-11-12 19:26:43.988 | maxHeadersCount: null,
2025-11-12 19:26:43.989 | reusedSocket: false,
2025-11-12 19:26:43.989 | host: 'foxdtc-video.akamaized.net',
2025-11-12 19:26:43.989 | protocol: 'https:',
2025-11-12 19:26:43.989 | _redirectable: [Circular *1],
2025-11-12 19:26:43.989 | [Symbol(kCapture)]: false,
2025-11-12 19:26:43.989 | [Symbol(kBytesWritten)]: 0,
2025-11-12 19:26:43.989 | [Symbol(kNeedDrain)]: false,
2025-11-12 19:26:43.989 | [Symbol(corked)]: 0,
2025-11-12 19:26:43.989 | [Symbol(kOutHeaders)]: [Object: null prototype],
2025-11-12 19:26:43.989 | [Symbol(errored)]: null,
2025-11-12 19:26:43.989 | [Symbol(kHighWaterMark)]: 16384,
2025-11-12 19:26:43.989 | [Symbol(kRejectNonStandardBodyWrites)]: false,
2025-11-12 19:26:43.989 | [Symbol(kUniqueHeaders)]: null
2025-11-12 19:26:43.989 | },
2025-11-12 19:26:43.989 | _currentUrl: 'https://foxdtc-video.akamaized.net/live-dr/fnc-ue2/hdntl=exp=1763082655~acl=%2f*~data=hdntl~hmac=eccbddb286e5e600d07db98baa90dad9dab0fea00f8d06be389c93e9fe251a13/index_7.m3u8',
2025-11-12 19:26:43.989 | _timeout: null,
2025-11-12 19:26:43.989 | [Symbol(kCapture)]: false
2025-11-12 19:26:43.989 | }
2025-11-12 19:26:43.989 | }
I'm not sure of the timeout details as to what it's timing out on. A developer would have to tell you.
My best guess is it's timing out after 60 seconds trying to get a playlist.
Are you sure you overrode the container DNS?
You have to use bridge mode networking to do that.
You can verify the DNS servers the container is using by looking at the file /etc/resolv.conf inside the eplustv container
sudo docker exec eplustv cat /etc/resolv.conf
nameserver 75.75.75.75
nameserver 75.75.76.76
And by doing these nslookup commands from docker to see what DNS server IP address the container is using (Server:)
fastly.net
sudo docker exec eplustv nslookup fa.edge.foxdtc.digitalvideoplatform.com
Server: 75.75.75.75
Address: 75.75.75.75:53
Non-authoritative answer:
fa.edge.foxdtc.digitalvideoplatform.com canonical name = fa-dvpvideo.map.fastly.net
Name: fa-dvpvideo.map.fastly.net
Address: 151.101.42.18
Non-authoritative answer:
fa.edge.foxdtc.digitalvideoplatform.com canonical name = fa-dvpvideo.map.fastly.net
Name: fa-dvpvideo.map.fastly.net
Address: 2a04:4e42:a::530
cloudfront.net
sudo docker exec eplustv nslookup cf.edge.foxdtc.digitalvideoplatform.com
Server: 75.75.75.75
Address: 75.75.75.75:53
Non-authoritative answer:
cf.edge.foxdtc.digitalvideoplatform.com canonical name = d33560mwi6nhtw.cloudfront.net
Name: d33560mwi6nhtw.cloudfront.net
Address: 108.138.246.122
Name: d33560mwi6nhtw.cloudfront.net
Address: 108.138.246.2
Name: d33560mwi6nhtw.cloudfront.net
Address: 108.138.246.84
Name: d33560mwi6nhtw.cloudfront.net
Address: 108.138.246.46
Non-authoritative answer:
cf.edge.foxdtc.digitalvideoplatform.com canonical name = d33560mwi6nhtw.cloudfront.net
Name: d33560mwi6nhtw.cloudfront.net
Address: 2600:9000:234c:ae00:14:9b62:100:93a1
Name: d33560mwi6nhtw.cloudfront.net
Address: 2600:9000:234c:f800:14:9b62:100:93a1
Name: d33560mwi6nhtw.cloudfront.net
Address: 2600:9000:234c:5e00:14:9b62:100:93a1
Name: d33560mwi6nhtw.cloudfront.net
Address: 2600:9000:234c:9c00:14:9b62:100:93a1
Name: d33560mwi6nhtw.cloudfront.net
Address: 2600:9000:234c:c400:14:9b62:100:93a1
Name: d33560mwi6nhtw.cloudfront.net
Address: 2600:9000:234c:2400:14:9b62:100:93a1
Name: d33560mwi6nhtw.cloudfront.net
Address: 2600:9000:234c:a600:14:9b62:100:93a1
Name: d33560mwi6nhtw.cloudfront.net
Address: 2600:9000:234c:a00:14:9b62:100:93a1
akamai.net
sudo docker exec eplustv nslookup foxdtc-video.akamaized.net
Server: 75.75.75.75
Address: 75.75.75.75:53
Non-authoritative answer:
foxdtc-video.akamaized.net canonical name = a1626.dscz.akamai.net
Name: a1626.dscz.akamai.net
Address: 23.200.146.67
Name: a1626.dscz.akamai.net
Address: 23.200.146.83
Non-authoritative answer:
foxdtc-video.akamaized.net canonical name = a1626.dscz.akamai.net
Name: a1626.dscz.akamai.net
Address: 2600:1406:c400::17c8:9253
Name: a1626.dscz.akamai.net
Address: 2600:1406:c400::17c8:9243
Do you have any ad blockers or DNS filtering running (including on your router)?
Try overriding the container DNS with your ISP's DNS Server IP address. For my Xfinity it's
--dns=75.75.75.75
And then verify it stuck by using the docker commands I posted.
Does the error log look identical to you?
It looks the same. Same timeout in the same place.
I'm not sure of the timeout details as to what it's timing out on. A developer would have to tell you.
My best guess is it's timing out after 60 seconds trying to get a playlist.
This is correct. It is timing out trying to get the playlist.
Thanks for responding. I tried to watch it last night and it isn't working again. What I did notice is that sec network worked, Sec network + didn't. Maybe I was looking at the SEC network the night before.
Would it be possible to add a high school conference to Hudl as well? The one I am looking at locally would be Minnesota High School Sports. I believe Team1 and Hudl are the same. Thanks for considering. I tried looking at your Hudl handler but I don't know how to find the slug for a conference.
Thanks for responding. I tried to watch it last night and it isn't working again. What I did notice is that sec network worked, Sec network + didn't. Maybe I was looking at the SEC network the night before.
It appears that ESPN3 has the same issue as SEC+, and likely ACC Extra too.
It sounds like they may have recently migrated those digital networks to DRM, joining ESPN+.
Can anyone else confirm?
If so, I'd guess that the ESPN linear networks are on borrowed time here as well.
Would it be possible to add a high school conference to Hudl as well? The one I am looking at locally would be Minnesota High School Sports . I believe Team1 and Hudl are the same. Thanks for considering. I tried looking at your Hudl handler but I don't know how to find the slug for a conference.
This should be do-able, I will look into it. It might take some work in the EPlusTV GUI to handle state/team/conference selections, with so many available.