ESPN+ & FOX Sports with Custom Channels via EPlusTV

I added TVE and Paramount+ login, and it doesn't add anything to what I have because NFL+ is already giving prime time and in-market games. I'm not sure what adding Prime or Peacock would do either. So I think I'll skip adding these.

The big caveat is that if someone wants to let me borrow their Sunday Ticket credentials (big ask since it's your Google Account) which would give access to all the games. If someone wants to do a quick call on Discord, I should be able to capture the auth flow without needing your credentials (I can give you the code to login with).

You're correct that the auths are tied to a device ID. Like I said above though adding new providers for this service won't give you anything (outside of Sunday Ticket).

I have a workaround for this - at least for NFL Network, NFL Channel, and RedZone - going out this afternoon.

I wonder if there was an issue on the P+ side. Might try restarting the container. I just tried locally and it worked okay. I'll add in a line of code that will prevent that from failing hard like that though.

2 Likes

Just restarted and it came back up fine, found events. Must've been a temporary issue. Thanks.

Okay, decently big update for NFL+ that just deployed:

If you have had auth issues in the past with NFL+ I might have found the issue. Wouldn't be a bad idea to login again...

I've also added NFL Channel as a linear option, and the good news is that I was able to get 1080p streams for at least the linear stuff (NFL Network, Red Zone, and NFL Channel)

2 Likes

Okay, I figured something out!

If you don't have NFL+ you can just login with your NFL account - and then when you add the providers the games will play based on those credentials. I'll add back TVE and Paramount+ and then work on getting Peacock and Prime added.

Although I'm tempted to not add in Paramount+ or ESPN+ since I'm not sure if ESPN+ actually shows games and if they are, you should be using those integrations instead? You'll get better quality. But with Prime and Peacock at least you'll get the games without needing an NFL+ account.

Edit: Here's NFL Network working from Fubo instead of NFL+

3 Likes

Thanks for all the great work on the NFL man, just wanted to chime in and say that I'm watching the UCLA versus Penn State game today and it's in beautiful 4K!

1 Like

Okay, I pushed an update for using NFL without NFL+ subscription. It's hard to say that it'll work before tomorrow, but I was able to get playback on NFL Network. I'm hoping that if you have Red Zone through your TV provider it'll work too.

I'll keep an eye on it tomorrow to make sure it's working

1 Like

I've got NFL Network (and Channel) up and running with TVE login.

I'm going to record the international game tomorrow, so we'll see how it goes, but I have to think it will go well!

For those doing this, here's what I recommend:

  • Create an NFL Account if you don't have one

  • Under the box for your account, click Edit Profile

image

  • Then click back to My Account

image

  • Under this, go to 3rd Party Accounts

image

  • Now connect your streaming provider(s):

  • That should be good to get things going. I also recommend being on the same browser as what you just did this in when you do the authentication during the Docker initialization.

  • When setting up in Docker, somewhat counterintuitively, you still will want the NFLPLUS variable set to true, even though you don't have NFL+. If you don't, you won't get prompted to authenticate.

2 Likes

Just to clarify, you don't need to connect in the browser. Let the container prompt that. Otherwise the tokens might not work since they are tied to a device.

2 Likes

I have NFL+ enabled (authenticated fine with the container) and my provider is linked on my NFL account but I don't see the morning game in the guide. I also don't see my local games for the afternoon. I do not have linear enabled. Logs show that no NFL events were added, but they were looked for.

I'm running 3.2.6 and don't have an NFL+ sub, just trying to get my local games plus the NFL Network game.

2 Likes

unfortunately getting the foolowing error

Channel #4330 has an active event (New York Jets vs. Minnesota Vikings). Going to start the stream.
Could not parse M3U8 properly!
AxiosError: Request failed with status code 404

--- truncated output ---

Could not get a playlist for channel #4330. Please make sure there is an event scheduled and you have access to it.

Apparently I was too optimistic; the job failed:

2024/10/06 09:25:00.005021 [DVR] Starting job 1728221100-66 NFL Football on ch=[90830]
2024/10/06 09:25:00.007231 [DVR] Waiting 3h29m59.9927686s until next job 1728233700-23 NFL Football
2024/10/06 09:25:00.007231 [DBG] Scheduling wake timer for scheduled recording in 3h28m29.9927686s
2024/10/06 09:25:04.282617 [ERR] Failed to start stream on channel 90830 via M3U-EPlusTVLinear: M3U: Could not fetch playlist from localhost:7989: GET: http://localhost:7989/channels/90830.m3u8: 404 Not Found
2024/10/06 09:25:04.283152 [DVR] Error running job 1728221100-66 NFL Football: could not start stream on channels=[90830]: M3U: Could not fetch playlist from localhost:7989: GET: http://localhost:7989/channels/90830.m3u8: 404 Not Found

I tested some other streams at the same time, both Linear and Scheduled, and they all worked as expected. Here's what I saw in the EPlusTV Docker log:

2024-10-06 09:25:00 Channel #90830 has an active event (NFL GameDay Kickoff). Going to start the stream.
2024-10-06 09:25:02 Channel #90830 was setup improperly... Removing.
2024-10-06 09:25:04 AxiosError: Request failed with status code 404
2024-10-06 09:25:04     at settle (/app/node_modules/axios/lib/core/settle.js:19:12)
2024-10-06 09:25:04     at IncomingMessage.handleStreamEnd (/app/node_modules/axios/lib/adapters/http.js:512:11)
2024-10-06 09:25:04     at IncomingMessage.emit (node:events:529:35)
2024-10-06 09:25:04     at IncomingMessage.emit (node:domain:489:12)
2024-10-06 09:25:04     at endReadableNT (node:internal/streams/readable:1400:12)
2024-10-06 09:25:04     at processTicksAndRejections (node:internal/process/task_queues:82:21) {
2024-10-06 09:25:04   code: 'ERR_BAD_REQUEST',
2024-10-06 09:25:04   config: {
2024-10-06 09:25:04     transitional: {
2024-10-06 09:25:04       silentJSONParsing: true,
2024-10-06 09:25:04       forcedJSONParsing: true,
2024-10-06 09:25:04       clarifyTimeoutError: false
2024-10-06 09:25:04     },
2024-10-06 09:25:04     adapter: [ 'xhr', 'http' ],
2024-10-06 09:25:04     transformRequest: [ [Function: transformRequest] ],
2024-10-06 09:25:04     transformResponse: [ [Function: transformResponse] ],
2024-10-06 09:25:04     timeout: 0,
2024-10-06 09:25:04     xsrfCookieName: 'XSRF-TOKEN',
2024-10-06 09:25:04     xsrfHeaderName: 'X-XSRF-TOKEN',
2024-10-06 09:25:04     maxContentLength: -1,
2024-10-06 09:25:04     maxBodyLength: -1,
2024-10-06 09:25:04     env: { FormData: [Function], Blob: [class Blob] },
2024-10-06 09:25:04     validateStatus: [Function: validateStatus],
2024-10-06 09:25:04     headers: AxiosHeaders {
2024-10-06 09:25:04       Accept: 'application/json, text/plain, */*',
2024-10-06 09:25:04       'Content-Type': 'application/json',
2024-10-06 09:25:04       'User-Agent': 'okhttp/4.11.0',
2024-10-06 09:25:04       authorization: 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGllbnRJZCI6IjM2NTY3MmQwLTgzYjgtNDZlYy04ZWUwLTZlMTU0M2JjM2RlOSIsImNsaWVudEtleSI6IkEzYjc0d09pU0RNcmhKS2VYQUVJcWdSSUNCaUJObzdvIiwiaXNzIjoiTkZMIiwiZGV2aWNlSWQiOiJlZDliODk2NC0wMDhjLTQ4MDEtOGRmMi0xN2MxMGZhMzg0ZmUiLCJwbGFucyI6W3sicGxhbiI6ImZyZWUiLCJleHBpcmF0aW9uRGF0ZSI6IjIwMjUtMTAtMDYiLCJzb3VyY2UiOiJORkwiLCJzdGFydERhdGUiOiIyMDI0LTEwLTA2Iiwic3RhdHVzIjoiQUNUSVZFIiwidHJpYWwiOmZhbHNlfV0sIkRpc3BsYXlOYW1lIjoiQ1RWX0FORFJPSURfQ1RWIiwiTm90ZXMiOiIiLCJmb3JtRmFjdG9yIjoiQ1RWIiwibHVyYUFwcEtleSI6IlNaczU3ZEJHUnhiTDcyOGxWcDdEWVEiLCJwbGF0Zm9ybSI6IkFORFJPSUQiLCJwcm9kdWN0TmFtZSI6IkNUViIsInJvbGVzIjpbImNvbnRlbnQiLCJleHBlcmllbmNlIiwiZm9vdGJhbGwiLCJ1dGlsaXRpZXMiLCJ0ZWFtcyIsInBsYXkiLCJsaXZlIiwiaWRlbnRpdHkiLCJuZ3Nfc3RhdHMiLCJwYXltZW50c19hcGkiLCJuZ3NfdHJhY2tpbmciLCJuZ3NfcGxhdGZvcm0iLCJuZ3NfY29udGVudCIsIm5nc19jb21iaW5lIiwibmdzX2FkdmFuY2VkX3N0YXRzIiwibmZsX3BybyIsImVjb21tIiwibmZsX2lkX2FwaSIsInV0aWxpdGllc19sb2NhdGlvbiIsImZyZWUiXSwiY2l0eSI6InByb3ZpZGVuY2UiLCJjb3VudHJ5Q29kZSI6IlVTIiwiZG1hQ29kZSI6IjUyMSIsImhtYVRlYW1zIjpbIjEwNDAzMjAwLTY5YWItOWVhNi01YWY1LWUyNDBmYmMwOGJlYSJdLCJyZWdpb24iOiJSSSIsInppcENvZGUiOiIwMjkwMyIsImJyb3dzZXIiOiJPdGhlciIsImNlbGx1bGFyIjpmYWxzZSwiZW52aXJvbm1lbnQiOiJwcm9kdWN0aW9uIiwidWlkIjoiNDJhNTEzOWZlNzg3NDU2MWJiZjhmMDJhMzE0OGY4ODUiLCJuZXR3b3JrcyI6eyJBQkMiOiJBQkMiLCJGT1hERVBPUlRFUyI6IkZPWERFUE9SVEVTIiwiVEVMRU1VTkRPIjoiVEVMRU1VTkRPIiwiRVNQTkRFUE9SVEVTIjoiRVNQTkRFUE9SVEVTIiwiRVNQTiI6IkVTUE4iLCJGT1giOiJGT1giLCJOQkMiOiJOQkMiLCJDQlMiOiJDQlMiLCJORkxOIjoiTkZMTiJ9LCJleHAiOjE3MjgyMjQ3MDJ9.UpPr8ljK6RELgb9x5m_qD-O5zYTSebwIWS1_ToQPkto',
2024-10-06 09:25:04       'Content-Length': '133',
2024-10-06 09:25:04       'Accept-Encoding': 'gzip, compress, deflate, br'
2024-10-06 09:25:04     },
2024-10-06 09:25:04     method: 'post',
2024-10-06 09:25:04     url: 'https://api.nfl.com/play/v1/asset/OBDRMY6Gh73zuUmf--j4Pw',
2024-10-06 09:25:04     data: '{"idp":"cox","mvpdUUID":"43a76ac0-4cf3-11e9-b7ab-005056a73b9c","mvpdUserId":"910fbc20-aacb-11e7-ba06-14feb5d9357d","networks":"NFLN"}'
2024-10-06 09:25:04   },
2024-10-06 09:25:04   request: <ref *1> ClientRequest {
2024-10-06 09:25:04     _events: [Object: null prototype] {
2024-10-06 09:25:04       abort: [Function (anonymous)],
2024-10-06 09:25:04       aborted: [Function (anonymous)],
2024-10-06 09:25:04       connect: [Function (anonymous)],
2024-10-06 09:25:04       error: [Function (anonymous)],
2024-10-06 09:25:04       socket: [Function (anonymous)],
2024-10-06 09:25:04       timeout: [Function (anonymous)],
2024-10-06 09:25:04       finish: [Function: requestOnFinish]
2024-10-06 09:25:04     },
2024-10-06 09:25:04     _eventsCount: 7,
2024-10-06 09:25:04     _maxListeners: undefined,
2024-10-06 09:25:04     outputData: [],
2024-10-06 09:25:04     outputSize: 0,
2024-10-06 09:25:04     writable: true,
2024-10-06 09:25:04     destroyed: false,
2024-10-06 09:25:04     _last: true,
2024-10-06 09:25:04     chunkedEncoding: false,
2024-10-06 09:25:04     shouldKeepAlive: false,
2024-10-06 09:25:04     maxRequestsOnConnectionReached: false,
2024-10-06 09:25:04     _defaultKeepAlive: true,
2024-10-06 09:25:04     useChunkedEncodingByDefault: true,
2024-10-06 09:25:04     sendDate: false,
2024-10-06 09:25:04     _removedConnection: false,
2024-10-06 09:25:04     _removedContLen: false,
2024-10-06 09:25:04     _removedTE: false,
2024-10-06 09:25:04     strictContentLength: false,
2024-10-06 09:25:04     _contentLength: '133',
2024-10-06 09:25:04     _hasBody: true,
2024-10-06 09:25:04     _trailer: '',
2024-10-06 09:25:04     finished: true,
2024-10-06 09:25:04     _headerSent: true,
2024-10-06 09:25:04     _closed: false,
2024-10-06 09:25:04     socket: TLSSocket {
2024-10-06 09:25:04       _tlsOptions: [Object],
2024-10-06 09:25:04       _secureEstablished: true,
2024-10-06 09:25:04       _securePending: false,
2024-10-06 09:25:04       _newSessionPending: false,
2024-10-06 09:25:04       _controlReleased: true,
2024-10-06 09:25:04       secureConnecting: false,
2024-10-06 09:25:04       _SNICallback: null,
2024-10-06 09:25:04       servername: 'api.nfl.com',
2024-10-06 09:25:04       alpnProtocol: false,
2024-10-06 09:25:04       authorized: true,
2024-10-06 09:25:04       authorizationError: null,
2024-10-06 09:25:04       encrypted: true,
2024-10-06 09:25:04       _events: [Object: null prototype],
2024-10-06 09:25:04       _eventsCount: 10,
2024-10-06 09:25:04       connecting: false,
2024-10-06 09:25:04       _hadError: false,
2024-10-06 09:25:04       _parent: null,
2024-10-06 09:25:04       _host: 'api.nfl.com',
2024-10-06 09:25:04       _closeAfterHandlingError: false,
2024-10-06 09:25:04       _readableState: [ReadableState],
2024-10-06 09:25:04       _maxListeners: undefined,
2024-10-06 09:25:04       _writableState: [WritableState],
2024-10-06 09:25:04       allowHalfOpen: false,
2024-10-06 09:25:04       _sockname: null,
2024-10-06 09:25:04       _pendingData: null,
2024-10-06 09:25:04       _pendingEncoding: '',
2024-10-06 09:25:04       server: undefined,
2024-10-06 09:25:04       _server: null,
2024-10-06 09:25:04       ssl: [TLSWrap],
2024-10-06 09:25:04       _requestCert: true,
2024-10-06 09:25:04       _rejectUnauthorized: true,
2024-10-06 09:25:04       parser: null,
2024-10-06 09:25:04       _httpMessage: [Circular *1],
2024-10-06 09:25:04       [Symbol(alpncallback)]: null,
2024-10-06 09:25:04       [Symbol(res)]: [TLSWrap],
2024-10-06 09:25:04       [Symbol(verified)]: true,
2024-10-06 09:25:04       [Symbol(pendingSession)]: null,
2024-10-06 09:25:04       [Symbol(async_id_symbol)]: 18441,
2024-10-06 09:25:04       [Symbol(kHandle)]: [TLSWrap],
2024-10-06 09:25:04       [Symbol(lastWriteQueueSize)]: 0,
2024-10-06 09:25:04       [Symbol(timeout)]: null,
2024-10-06 09:25:04       [Symbol(kBuffer)]: null,
2024-10-06 09:25:04       [Symbol(kBufferCb)]: null,
2024-10-06 09:25:04       [Symbol(kBufferGen)]: null,
2024-10-06 09:25:04       [Symbol(kCapture)]: false,
2024-10-06 09:25:04       [Symbol(kSetNoDelay)]: false,
2024-10-06 09:25:04       [Symbol(kSetKeepAlive)]: true,
2024-10-06 09:25:04       [Symbol(kSetKeepAliveInitialDelay)]: 60,
2024-10-06 09:25:04       [Symbol(kBytesRead)]: 0,
2024-10-06 09:25:04       [Symbol(kBytesWritten)]: 0,
2024-10-06 09:25:04       [Symbol(connect-options)]: [Object]
2024-10-06 09:25:04     },
2024-10-06 09:25:04     _header: 'POST /play/v1/asset/OBDRMY6Gh73zuUmf--j4Pw HTTP/1.1\r\n' +
2024-10-06 09:25:04       'Accept: application/json, text/plain, */*\r\n' +
2024-10-06 09:25:04       'Content-Type: application/json\r\n' +
2024-10-06 09:25:04       'User-Agent: okhttp/4.11.0\r\n' +
2024-10-06 09:25:04       'authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGllbnRJZCI6IjM2NTY3MmQwLTgzYjgtNDZlYy04ZWUwLTZlMTU0M2JjM2RlOSIsImNsaWVudEtleSI6IkEzYjc0d09pU0RNcmhKS2VYQUVJcWdSSUNCaUJObzdvIiwiaXNzIjoiTkZMIiwiZGV2aWNlSWQiOiJlZDliODk2NC0wMDhjLTQ4MDEtOGRmMi0xN2MxMGZhMzg0ZmUiLCJwbGFucyI6W3sicGxhbiI6ImZyZWUiLCJleHBpcmF0aW9uRGF0ZSI6IjIwMjUtMTAtMDYiLCJzb3VyY2UiOiJORkwiLCJzdGFydERhdGUiOiIyMDI0LTEwLTA2Iiwic3RhdHVzIjoiQUNUSVZFIiwidHJpYWwiOmZhbHNlfV0sIkRpc3BsYXlOYW1lIjoiQ1RWX0FORFJPSURfQ1RWIiwiTm90ZXMiOiIiLCJmb3JtRmFjdG9yIjoiQ1RWIiwibHVyYUFwcEtleSI6IlNaczU3ZEJHUnhiTDcyOGxWcDdEWVEiLCJwbGF0Zm9ybSI6IkFORFJPSUQiLCJwcm9kdWN0TmFtZSI6IkNUViIsInJvbGVzIjpbImNvbnRlbnQiLCJleHBlcmllbmNlIiwiZm9vdGJhbGwiLCJ1dGlsaXRpZXMiLCJ0ZWFtcyIsInBsYXkiLCJsaXZlIiwiaWRlbnRpdHkiLCJuZ3Nfc3RhdHMiLCJwYXltZW50c19hcGkiLCJuZ3NfdHJhY2tpbmciLCJuZ3NfcGxhdGZvcm0iLCJuZ3NfY29udGVudCIsIm5nc19jb21iaW5lIiwibmdzX2FkdmFuY2VkX3N0YXRzIiwibmZsX3BybyIsImVjb21tIiwibmZsX2lkX2FwaSIsInV0aWxpdGllc19sb2NhdGlvbiIsImZyZWUiXSwiY2l0eSI6InByb3ZpZGVuY2UiLCJjb3VudHJ5Q29kZSI6IlVTIiwiZG1hQ29kZSI6IjUyMSIsImhtYVRlYW1zIjpbIjEwNDAzMjAwLTY5YWItOWVhNi01YWY1LWUyNDBmYmMwOGJlYSJdLCJyZWdpb24iOiJSSSIsInppcENvZGUiOiIwMjkwMyIsImJyb3dzZXIiOiJPdGhlciIsImNlbGx1bGFyIjpmYWxzZSwiZW52aXJvbm1lbnQiOiJwcm9kdWN0aW9uIiwidWlkIjoiNDJhNTEzOWZlNzg3NDU2MWJiZjhmMDJhMzE0OGY4ODUiLCJuZXR3b3JrcyI6eyJBQkMiOiJBQkMiLCJGT1hERVBPUlRFUyI6IkZPWERFUE9SVEVTIiwiVEVMRU1VTkRPIjoiVEVMRU1VTkRPIiwiRVNQTkRFUE9SVEVTIjoiRVNQTkRFUE9SVEVTIiwiRVNQTiI6IkVTUE4iLCJGT1giOiJGT1giLCJOQkMiOiJOQkMiLCJDQlMiOiJDQlMiLCJORkxOIjoiTkZMTiJ9LCJleHAiOjE3MjgyMjQ3MDJ9.UpPr8ljK6RELgb9x5m_qD-O5zYTSebwIWS1_ToQPkto\r\n' +
2024-10-06 09:25:04       'Content-Length: 133\r\n' +
2024-10-06 09:25:04       'Accept-Encoding: gzip, compress, deflate, br\r\n' +
2024-10-06 09:25:04       'Host: api.nfl.com\r\n' +
2024-10-06 09:25:04       'Connection: close\r\n' +
2024-10-06 09:25:04       '\r\n',
2024-10-06 09:25:04     _keepAliveTimeout: 0,
2024-10-06 09:25:04     _onPendingData: [Function: nop],
2024-10-06 09:25:04     agent: Agent {
2024-10-06 09:25:04       _events: [Object: null prototype],
2024-10-06 09:25:04       _eventsCount: 2,
2024-10-06 09:25:04       _maxListeners: undefined,
2024-10-06 09:25:04       defaultPort: 443,
2024-10-06 09:25:04       protocol: 'https:',
2024-10-06 09:25:04       options: [Object: null prototype],
2024-10-06 09:25:04       requests: [Object: null prototype] {},
2024-10-06 09:25:04       sockets: [Object: null prototype],
2024-10-06 09:25:04       freeSockets: [Object: null prototype] {},
2024-10-06 09:25:04       keepAliveMsecs: 1000,
2024-10-06 09:25:04       keepAlive: false,
2024-10-06 09:25:04       maxSockets: Infinity,
2024-10-06 09:25:04       maxFreeSockets: 256,
2024-10-06 09:25:04       scheduling: 'lifo',
2024-10-06 09:25:04       maxTotalSockets: Infinity,
2024-10-06 09:25:04       totalSocketCount: 1,
2024-10-06 09:25:04       maxCachedSessions: 100,
2024-10-06 09:25:04       _sessionCache: [Object],
2024-10-06 09:25:04       [Symbol(kCapture)]: false
2024-10-06 09:25:04     },
2024-10-06 09:25:04     socketPath: undefined,
2024-10-06 09:25:04     method: 'POST',
2024-10-06 09:25:04     maxHeaderSize: undefined,
2024-10-06 09:25:04     insecureHTTPParser: undefined,
2024-10-06 09:25:04     joinDuplicateHeaders: undefined,
2024-10-06 09:25:04     path: '/play/v1/asset/OBDRMY6Gh73zuUmf--j4Pw',
2024-10-06 09:25:04     _ended: true,
2024-10-06 09:25:04     res: IncomingMessage {
2024-10-06 09:25:04       _readableState: [ReadableState],
2024-10-06 09:25:04       _events: [Object: null prototype],
2024-10-06 09:25:04       _eventsCount: 4,
2024-10-06 09:25:04       _maxListeners: undefined,
2024-10-06 09:25:04       socket: [TLSSocket],
2024-10-06 09:25:04       httpVersionMajor: 1,
2024-10-06 09:25:04       httpVersionMinor: 1,
2024-10-06 09:25:04       httpVersion: '1.1',
2024-10-06 09:25:04       complete: true,
2024-10-06 09:25:04       rawHeaders: [Array],
2024-10-06 09:25:04       rawTrailers: [],
2024-10-06 09:25:04       joinDuplicateHeaders: undefined,
2024-10-06 09:25:04       aborted: false,
2024-10-06 09:25:04       upgrade: false,
2024-10-06 09:25:04       url: '',
2024-10-06 09:25:04       method: null,
2024-10-06 09:25:04       statusCode: 404,
2024-10-06 09:25:04       statusMessage: 'Not Found',
2024-10-06 09:25:04       client: [TLSSocket],
2024-10-06 09:25:04       _consuming: true,
2024-10-06 09:25:04       _dumped: false,
2024-10-06 09:25:04       req: [Circular *1],
2024-10-06 09:25:04       responseUrl: 'https://api.nfl.com/play/v1/asset/OBDRMY6Gh73zuUmf--j4Pw',
2024-10-06 09:25:04       redirects: [],
2024-10-06 09:25:04       [Symbol(kCapture)]: false,
2024-10-06 09:25:04       [Symbol(kHeaders)]: [Object],
2024-10-06 09:25:04       [Symbol(kHeadersCount)]: 32,
2024-10-06 09:25:04       [Symbol(kTrailers)]: null,
2024-10-06 09:25:04       [Symbol(kTrailersCount)]: 0
2024-10-06 09:25:04     },
2024-10-06 09:25:04     aborted: false,
2024-10-06 09:25:04     timeoutCb: null,
2024-10-06 09:25:04     upgradeOrConnect: false,
2024-10-06 09:25:04     parser: null,
2024-10-06 09:25:04     maxHeadersCount: null,
2024-10-06 09:25:04     reusedSocket: false,
2024-10-06 09:25:04     host: 'api.nfl.com',
2024-10-06 09:25:04     protocol: 'https:',
2024-10-06 09:25:04     _redirectable: Writable {
2024-10-06 09:25:04       _writableState: [WritableState],
2024-10-06 09:25:04       _events: [Object: null prototype],
2024-10-06 09:25:04       _eventsCount: 3,
2024-10-06 09:25:04       _maxListeners: undefined,
2024-10-06 09:25:04       _options: [Object],
2024-10-06 09:25:04       _ended: true,
2024-10-06 09:25:04       _ending: true,
2024-10-06 09:25:04       _redirectCount: 0,
2024-10-06 09:25:04       _redirects: [],
2024-10-06 09:25:04       _requestBodyLength: 133,
2024-10-06 09:25:04       _requestBodyBuffers: [],
2024-10-06 09:25:04       _onNativeResponse: [Function (anonymous)],
2024-10-06 09:25:04       _currentRequest: [Circular *1],
2024-10-06 09:25:04       _currentUrl: 'https://api.nfl.com/play/v1/asset/OBDRMY6Gh73zuUmf--j4Pw',
2024-10-06 09:25:04       [Symbol(kCapture)]: false
2024-10-06 09:25:04     },
2024-10-06 09:25:04     [Symbol(kCapture)]: false,
2024-10-06 09:25:04     [Symbol(kBytesWritten)]: 0,
2024-10-06 09:25:04     [Symbol(kNeedDrain)]: false,
2024-10-06 09:25:04     [Symbol(corked)]: 0,
2024-10-06 09:25:04     [Symbol(kOutHeaders)]: [Object: null prototype] {
2024-10-06 09:25:04       accept: [Array],
2024-10-06 09:25:04       'content-type': [Array],
2024-10-06 09:25:04       'user-agent': [Array],
2024-10-06 09:25:04       authorization: [Array],
2024-10-06 09:25:04       'content-length': [Array],
2024-10-06 09:25:04       'accept-encoding': [Array],
2024-10-06 09:25:04       host: [Array]
2024-10-06 09:25:04     },
2024-10-06 09:25:04     [Symbol(errored)]: null,
2024-10-06 09:25:04     [Symbol(kHighWaterMark)]: 16384,
2024-10-06 09:25:04     [Symbol(kRejectNonStandardBodyWrites)]: false,
2024-10-06 09:25:04     [Symbol(kUniqueHeaders)]: null
2024-10-06 09:25:04   },
2024-10-06 09:25:04   response: {
2024-10-06 09:25:04     status: 404,
2024-10-06 09:25:04     statusText: 'Not Found',
2024-10-06 09:25:04     headers: AxiosHeaders {
2024-10-06 09:25:04       connection: 'close',
2024-10-06 09:25:04       'content-length': '122',
2024-10-06 09:25:04       'content-type': 'application/json',
2024-10-06 09:25:04       'cache-control': 'private',
2024-10-06 09:25:04       server: 'be-play-token',
2024-10-06 09:25:04       via: '1.1 varnish, 1.1 varnish, 1.1 varnish',
2024-10-06 09:25:04       'accept-ranges': 'bytes',
2024-10-06 09:25:04       date: 'Sun, 06 Oct 2024 13:25:04 GMT',
2024-10-06 09:25:04       'x-served-by': 'cache-bur-kbur8200144-BUR, cache-bur-kbur8200128-BUR, cache-lga21960-LGA',
2024-10-06 09:25:04       'x-cache': 'MISS, MISS, MISS',
2024-10-06 09:25:04       'x-cache-hits': '0, 0, 0',
2024-10-06 09:25:04       'x-timer': 'S1728221104.886308,VS0,VE232',
2024-10-06 09:25:04       vary: 'Accept-Encoding',
2024-10-06 09:25:04       'access-control-allow-origin': '*',
2024-10-06 09:25:04       'access-control-allow-methods': 'PUT,POST,OPTIONS,GET,PATCH,DELETE',
2024-10-06 09:25:04       'access-control-allow-headers': 'Authorization,Content-Type,Cache-Control,nfl_session'
2024-10-06 09:25:04     },

Ditto. Linked both my Amazon Prime and my FuboTV accounts under NFL Account:

Also not getting NFL Channels in the Linear option. Just getting FS1, FS2, BiG10 and Soccer Plus in linear (I don't enable the ESPN channels as they are picked up via TVE currently).

Here's my install script:

docker run --restart unless-stopped --name EPlusTV -p 8000:8000 -v config_dir:/app/config -e START_CHANNEL='7000' -e LINEAR_CHANNELS=TRUE -e NUM_OF_CHANNELS=50 -e ESPN=FALSE -e ESPN2=FALSE -e ESPN3=TRUE -e ESPNU=FALSE -e SEC=FALSE -e SECPLUS=FALSE -e ESPNPLUS=FALSE -e FOXSPORTS=TRUE -e NFLPLUS=TRUE -e NFLNETORK=TRUE -e NFLCHANNNEL=TRUE -e FOXSPORTS_MAX_RESOLUTION=UHD/HDR m0ngr31/eplustv

Like I mentioned earlier - you have to link them in the container with NFL_TVE, NFL_PRIME, NFL_PEACOCK, not just relying on what you did in your browser

Do it with env variables instead

You're spelling NFLNETWORK and NFLCHANNEL wrong. You don't need to add in the env vars where you're setting to FALSE, that's the default state.

I think I found the issue. New version should be up any minute now. You'll probably have to clear your entries.db and schedule.db files though

Thanks, I missed the _TVE and _PRIME envs (they were missing in your README but I see you updated it), added them and getting games now. Watching the NFL Network game now, it's working. Quality is not great since it's intended for mobile, I'm getting 720p/30 at something like 3kbps lol.

I think (not sure) that Prime games won't work though, at least nfl.com says you can't watch them there after linking Prime as a provider. Guess we'll see Thursday.

1 Like

Oh I guess that will be a good test

NFL Network, RedZone and NFL Channel look good now with TVE creds
Having issue with authenticating with Peacock (get error 288 but I think its an NFL issue since get the same error in browser authenticating peacock)

Now on to Sunday Ticket when ready for that :slight_smile:

1 Like

I'm glad to hear that Red Zone works without NFL+. The code I wrote for that was a total guess :slight_smile:

well spoke too soon.
work the first time around viewing channel but then going back after changing stations got 403 error

Channel #4300 has been idle for more than 5 minutes. Removing playlist info.
Could not parse chunklist properly!
Could not get chunklist for channel #4330.
AxiosError: Request failed with status code 403
    at settle (/app/node_modules/axios/lib/core/settle.js:19:12)
    at Unzip.handleStreamEnd (/app/node_modules/axios/lib/adapters/http.js:512:11)

--- truncated outut----

Saw something weird in the guide data, the national afternoon CBS game Packers vs. Rams is scheduled to start at 5:00 p.m. Eastern, but it really starts at 4:25. I'm guessing this is an NFL.com bug.