ESPN+ & FOX Sports with Custom Channels via EPlusTV

That 404 error was in my channels log. The log in Portainer has a whole bunch of code. See below. I do not have any environment variables set.

Summary
  'access-control-allow-credentials': 'true',
  'access-control-allow-headers': 'authorization'
},
config: {
  transitional: [Object],
  adapter: [Array],
  transformRequest: [Array],
  transformResponse: [Array],
  timeout: 60000,
  xsrfCookieName: 'XSRF-TOKEN',
  xsrfHeaderName: 'X-XSRF-TOKEN',
  maxContentLength: -1,
  maxBodyLength: -1,
  env: [Object],
  validateStatus: [Function: validateStatus],
  headers: [AxiosHeaders],
  method: 'get',
  url: 'https://tve-live.mlb.com/SNY/2025-03/20250304-SNY-In-Market-a-net.m3u8',
  data: undefined
},
request: <ref *1> ClientRequest {
  _events: [Object: null prototype],
  _eventsCount: 7,
  _maxListeners: undefined,
  outputData: [],
  outputSize: 0,
  writable: true,
  destroyed: true,
  _last: true,
  chunkedEncoding: false,
  shouldKeepAlive: true,
  maxRequestsOnConnectionReached: false,
  _defaultKeepAlive: true,
  useChunkedEncodingByDefault: false,
  sendDate: false,
  _removedConnection: false,
  _removedContLen: false,
  _removedTE: false,
  strictContentLength: false,
  _contentLength: 0,
  _hasBody: true,
  _trailer: '',
  finished: true,
  _headerSent: true,
  _closed: true,
  socket: [TLSSocket],
  _header: 'GET /SNY/2025-03/20250304-SNY-In-Market-a-net.m3u8 HTTP/1.1\r\n' +
    'Accept: */*\r\n' +
    'Accept-Encoding: gzip, deflate, br\r\n' +
    'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36\r\n' +
    'accept-language: en-US,en;q=0.5\r\n' +
    'connection: keep-alive\r\n' +
    'x-cdn-token: 1743179056_8ac69d9cf678360d6080a726f2935f605de61ac744e4b555e2a488959f26504a\r\n' +
    'Host: tve-live.mlb.com\r\n' +
    '\r\n',
  _keepAliveTimeout: 0,
  _onPendingData: [Function: nop],
  agent: [Agent],
  socketPath: undefined,
  method: 'GET',
  maxHeaderSize: undefined,
  insecureHTTPParser: undefined,
  joinDuplicateHeaders: undefined,
  path: '/SNY/2025-03/20250304-SNY-In-Market-a-net.m3u8',
  _ended: true,
  res: [IncomingMessage],
  aborted: false,
  timeoutCb: null,
  upgradeOrConnect: false,
  parser: null,
  maxHeadersCount: null,
  reusedSocket: false,
  host: 'tve-live.mlb.com',
  protocol: 'https:',
  _redirectable: [Writable],
  [Symbol(kCapture)]: false,
  [Symbol(kBytesWritten)]: 0,
  [Symbol(kNeedDrain)]: false,
  [Symbol(corked)]: 0,
  [Symbol(kOutHeaders)]: [Object: null prototype],
  [Symbol(errored)]: null,
  [Symbol(kHighWaterMark)]: 16384,
  [Symbol(kRejectNonStandardBodyWrites)]: false,
  [Symbol(kUniqueHeaders)]: null
},
data: '<!DOCTYPE html>\n' +
  '<html>\n' +
  '  <head>\n' +
  '    <meta charset="UTF-8">\n' +
  '    <title>404</title>\n' +
  '  </head>\n' +
  '  <body>\n' +
  '    404\n' +
  '  </body>\n' +
  '</html>'

}
}
Refreshing device token (ESPN+)
Refreshing device refresh token (ESPN+)
Refreshing BAM access token (ESPN+)

nope

1 Like

Okay, one more thing to try:

We're going to try bypassing Channels for playback and just try the feed straight from E+:

Install this extension: https://chromewebstore.google.com/detail/native-mpeg-dash-+-hls-pl/cjfbmleiaobegagekpmlhmaadepdeedn

And then open the /linear-channels.m3u link from the UI and hit play next to SNY

image

I've heard the MLB.tv site has had issues all day. IDK if that maybe the issue here.

nope

image

working fine on the mlb app and on mlbserver

I'm guessing same logs in E+. For yours I think it's a scheduling issue - whatever is scheduled is off or something. Dumb question I know but have you restarted your container since enabling SNY?

yes, restarted multiple times. should I have tz as a variable? I just might recreate the whole container when I get a chance. thanks

1 Like

Nah, I was just curious about the TZ variable messing with the time zone, but it was a shot in the dark. Is is possible to dm me your config folder? That way I can see what your scheduled entries look like

Seeing this in my eplus container logs, with same issue seen on SNY in market - does this help at all?

2025-03-28 11:48:03 Error: TypeError [ERR_INVALID_CHAR]: Invalid character in header content ["x-okta-id"]
2025-03-28 11:48:03     at MLBHandler.<anonymous> (/app/services/mlb-handler.ts:1020:13)
2025-03-28 11:48:03     at Generator.throw (<anonymous>)
2025-03-28 11:48:03     at rejected (/app/services/mlb-handler.ts:25:65)
2025-03-28 11:48:03     at processTicksAndRejections (node:internal/process/task_queues:95:5)

I updated the container to hopefully fix this issue :crossed_fingers:

1 Like

No luck yet, updated to v4.8.7 and tried again.

Summary

Channel #442 has an active event (Mets Baseball 2025). Going to start the stream.

Could not parse M3U8 properly!

AxiosError: Request failed with status code 404

at settle (/app/node_modules/axios/lib/core/settle.js:19:12)

at IncomingMessage.handleStreamEnd (/app/node_modules/axios/lib/adapters/http.js:512:11)

at IncomingMessage.emit (node:events:529:35)

at IncomingMessage.emit (node:domain:489:12)

at endReadableNT (node:internal/streams/readable:1400:12)

at processTicksAndRejections (node:internal/process/task_queues:82:21) {

code: 'ERR_BAD_REQUEST',

config: {

transitional: {

  silentJSONParsing: true,

  forcedJSONParsing: true,

  clarifyTimeoutError: false

},

adapter: [ 'xhr', 'http' ],

transformRequest: [ [Function: transformRequest] ],

transformResponse: [ [Function: transformResponse] ],

timeout: 60000,

xsrfCookieName: 'XSRF-TOKEN',

xsrfHeaderName: 'X-XSRF-TOKEN',

maxContentLength: -1,

maxBodyLength: -1,

env: { FormData: [Function [FormData]], Blob: [class Blob] },

validateStatus: [Function: validateStatus],

headers: AxiosHeaders {

  Accept: '*/*',

  'Accept-Encoding': 'gzip, deflate, br',

  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.3',

  'accept-language': 'en-US,en;q=0.5',

  connection: 'keep-alive',

  'x-cdn-token': '1743270374_1a7d678894de7d36cd12b2a08a8b70321aa8e897fdd1150dc01af46a39287352'

},

method: 'get',

url: 'https://tve-live.mlb.com/SNY/2025-03/20250304-SNY-In-Market-a-net.m3u8',

data: undefined

},

request: <ref *1> ClientRequest {

_events: [Object: null prototype] {

  abort: [Function (anonymous)],

  aborted: [Function (anonymous)],

  connect: [Function (anonymous)],

  error: [Function (anonymous)],

  socket: [Function (anonymous)],

  timeout: [Function (anonymous)],

  finish: [Function: requestOnFinish]

},

_eventsCount: 7,

_maxListeners: undefined,

outputData: [],

outputSize: 0,

writable: true,

destroyed: true,

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

_last: true,

chunkedEncoding: false,

shouldKeepAlive: true,

maxRequestsOnConnectionReached: false,

_defaultKeepAlive: true,

useChunkedEncodingByDefault: false,

sendDate: false,

_removedConnection: false,

_removedContLen: false,

_removedTE: false,

strictContentLength: false,

_contentLength: 0,

_hasBody: true,

_trailer: '',

finished: true,

_headerSent: true,

_closed: true,

socket: TLSSocket {

  _tlsOptions: [Object],

  _secureEstablished: true,

  _securePending: false,

  _newSessionPending: false,

  _controlReleased: true,

  secureConnecting: false,

  _SNICallback: null,

  servername: 'tve-live.mlb.com',

  alpnProtocol: false,

  authorized: true,

  authorizationError: null,

  encrypted: true,

  _events: [Object: null prototype],

  _eventsCount: 8,

  connecting: false,

  _hadError: false,

  _parent: null,

  _host: 'tve-live.mlb.com',

  _closeAfterHandlingError: false,

  _readableState: [ReadableState],

  _maxListeners: undefined,

  _writableState: [WritableState],

  allowHalfOpen: false,

  _sockname: null,

  _pendingData: null,

  _pendingEncoding: '',

  server: undefined,

  _server: null,

  ssl: null,

  _requestCert: true,

  _rejectUnauthorized: true,

  parser: null,

  _httpMessage: [Circular *1],

  timeout: 60000,

  [Symbol(alpncallback)]: null,

  [Symbol(res)]: [TLSWrap],

  [Symbol(verified)]: true,

  [Symbol(pendingSession)]: null,

  [Symbol(async_id_symbol)]: 44673,

  [Symbol(kHandle)]: null,

  [Symbol(lastWriteQueueSize)]: 0,

  [Symbol(timeout)]: Timeout {

    _idleTimeout: -1,

    _idlePrev: null,

    _idleNext: null,

    _idleStart: 596379,

    _onTimeout: null,

    _timerArgs: undefined,

    _repeat: null,

    _destroyed: true,

    [Symbol(refed)]: false,

    [Symbol(kHasPrimitive)]: false,

    [Symbol(asyncId)]: 44681,

    [Symbol(triggerId)]: 44676

  },

  [Symbol(kBuffer)]: null,

  [Symbol(kBufferCb)]: null,

  [Symbol(kBufferGen)]: null,

  [Symbol(kCapture)]: false,

  [Symbol(kSetNoDelay)]: false,

  [Symbol(kSetKeepAlive)]: true,

  [Symbol(kSetKeepAliveInitialDelay)]: 60,

  [Symbol(kBytesRead)]: 527,

  [Symbol(kBytesWritten)]: 407,

  [Symbol(connect-options)]: [Object]

},

_header: 'GET /SNY/2025-03/20250304-SNY-In-Market-a-net.m3u8 HTTP/1.1\r\n' +

  'Accept: */*\r\n' +

  'Accept-Encoding: gzip, deflate, br\r\n' +

  'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.3\r\n' +

  'accept-language: en-US,en;q=0.5\r\n' +

  'connection: keep-alive\r\n' +

  'x-cdn-token: 1743270374_1a7d678894de7d36cd12b2a08a8b70321aa8e897fdd1150dc01af46a39287352\r\n' +

  'Host: tve-live.mlb.com\r\n' +

  '\r\n',

_keepAliveTimeout: 0,

_onPendingData: [Function: nop],

agent: Agent {

  _events: [Object: null prototype],

  _eventsCount: 2,

  _maxListeners: undefined,

  defaultPort: 443,

  protocol: 'https:',

  options: [Object: null prototype],

  requests: [Object: null prototype] {},

  sockets: [Object: null prototype],

  freeSockets: [Object: null prototype] {},

  keepAliveMsecs: 1000,

  keepAlive: false,

  maxSockets: Infinity,

  maxFreeSockets: 256,

  scheduling: 'lifo',

  maxTotalSockets: Infinity,

  totalSocketCount: 1,

  maxCachedSessions: 100,

  _sessionCache: [Object],

  [Symbol(kCapture)]: false

},

socketPath: undefined,

method: 'GET',

maxHeaderSize: undefined,

insecureHTTPParser: undefined,

joinDuplicateHeaders: undefined,

path: '/SNY/2025-03/20250304-SNY-In-Market-a-net.m3u8',

_ended: true,

res: IncomingMessage {

  _readableState: [ReadableState],

  _events: [Object: null prototype],

  _eventsCount: 4,

  _maxListeners: undefined,

  socket: null,

  httpVersionMajor: 1,

  httpVersionMinor: 1,

  httpVersion: '1.1',

  complete: true,

  rawHeaders: [Array],

  rawTrailers: [],

  joinDuplicateHeaders: undefined,

  aborted: false,

  upgrade: false,

  url: '',

  method: null,

  statusCode: 404,

  statusMessage: 'Not Found',

  client: [TLSSocket],

  _consuming: true,

  _dumped: false,

  req: [Circular *1],

  responseUrl: 'https://tve-live.mlb.com/SNY/2025-03/20250304-SNY-In-Market-a-net.m3u8',

  redirects: [],

  [Symbol(kCapture)]: false,

  [Symbol(kHeaders)]: [Object],

  [Symbol(kHeadersCount)]: 28,

  [Symbol(kTrailers)]: null,

  [Symbol(kTrailersCount)]: 0

},

aborted: false,

timeoutCb: null,

upgradeOrConnect: false,

parser: null,

maxHeadersCount: null,

reusedSocket: false,

host: 'tve-live.mlb.com',

protocol: 'https:',

_redirectable: Writable {

  _writableState: [WritableState],

  _events: [Object: null prototype],

  _eventsCount: 3,

  _maxListeners: undefined,

  _options: [Object],

  _ended: true,

  _ending: true,

  _redirectCount: 0,

  _redirects: [],

  _requestBodyLength: 0,

  _requestBodyBuffers: [],

  _onNativeResponse: [Function (anonymous)],

  _currentRequest: [Circular *1],

  _currentUrl: 'https://tve-live.mlb.com/SNY/2025-03/20250304-SNY-In-Market-a-net.m3u8',

  _timeout: null,

  [Symbol(kCapture)]: false

},

[Symbol(kCapture)]: false,

[Symbol(kBytesWritten)]: 0,

[Symbol(kNeedDrain)]: false,

[Symbol(corked)]: 0,

[Symbol(kOutHeaders)]: [Object: null prototype] {

  accept: [Array],

  'accept-encoding': [Array],

  'user-agent': [Array],

  'accept-language': [Array],

  connection: [Array],

  'x-cdn-token': [Array],

  host: [Array]

},

[Symbol(errored)]: null,

[Symbol(kHighWaterMark)]: 16384,

[Symbol(kRejectNonStandardBodyWrites)]: false,

[Symbol(kUniqueHeaders)]: null

},

response: {

status: 404,

statusText: 'Not Found',

headers: AxiosHeaders {

  connection: 'keep-alive',

  'content-length': '126',

  server: 'Varnish',

  'retry-after': '0',

  'content-type': 'text/html',

  'accept-ranges': 'bytes',

  date: 'Fri, 28 Mar 2025 17:46:14 GMT',

  via: '1.1 varnish',

  'x-served-by': 'cache-nyc-kteb1890047-NYC',

  'x-cache': 'MISS',

  'x-cache-hits': '0',

  'x-timer': 'S1743183975.564431,VS0,VE31',

  'access-control-allow-credentials': 'true',

  'access-control-allow-headers': 'authorization'

},

config: {

  transitional: [Object],

  adapter: [Array],

  transformRequest: [Array],

  transformResponse: [Array],

  timeout: 60000,

  xsrfCookieName: 'XSRF-TOKEN',

  xsrfHeaderName: 'X-XSRF-TOKEN',

  maxContentLength: -1,

  maxBodyLength: -1,

  env: [Object],

  validateStatus: [Function: validateStatus],

  headers: [AxiosHeaders],

  method: 'get',

  url: 'https://tve-live.mlb.com/SNY/2025-03/20250304-SNY-In-Market-a-net.m3u8',

  data: undefined

},

request: <ref *1> ClientRequest {

  _events: [Object: null prototype],

  _eventsCount: 7,

  _maxListeners: undefined,

  outputData: [],

  outputSize: 0,

  writable: true,

  destroyed: true,

  _last: true,

  chunkedEncoding: false,

  shouldKeepAlive: true,

  maxRequestsOnConnectionReached: false,

  _defaultKeepAlive: true,

  useChunkedEncodingByDefault: false,

  sendDate: false,

  _removedConnection: false,

  _removedContLen: false,

  _removedTE: false,

  strictContentLength: false,

  _contentLength: 0,

  _hasBody: true,

  _trailer: '',

  finished: true,

  _headerSent: true,

  _closed: true,

  socket: [TLSSocket],

  _header: 'GET /SNY/2025-03/20250304-SNY-In-Market-a-net.m3u8 HTTP/1.1\r\n' +

    'Accept: */*\r\n' +

    'Accept-Encoding: gzip, deflate, br\r\n' +

    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.3\r\n' +

    'accept-language: en-US,en;q=0.5\r\n' +

    'connection: keep-alive\r\n' +

    'x-cdn-token: 1743270374_1a7d678894de7d36cd12b2a08a8b70321aa8e897fdd1150dc01af46a39287352\r\n' +

    'Host: tve-live.mlb.com\r\n' +

    '\r\n',

  _keepAliveTimeout: 0,

  _onPendingData: [Function: nop],

  agent: [Agent],

  socketPath: undefined,

  method: 'GET',

  maxHeaderSize: undefined,

  insecureHTTPParser: undefined,

  joinDuplicateHeaders: undefined,

  path: '/SNY/2025-03/20250304-SNY-In-Market-a-net.m3u8',

  _ended: true,

  res: [IncomingMessage],

  aborted: false,

  timeoutCb: null,

  upgradeOrConnect: false,

  parser: null,

  maxHeadersCount: null,

  reusedSocket: false,

  host: 'tve-live.mlb.com',

  protocol: 'https:',

  _redirectable: [Writable],

  [Symbol(kCapture)]: false,

  [Symbol(kBytesWritten)]: 0,

  [Symbol(kNeedDrain)]: false,

  [Symbol(corked)]: 0,

  [Symbol(kOutHeaders)]: [Object: null prototype],

  [Symbol(errored)]: null,

  [Symbol(kHighWaterMark)]: 16384,

  [Symbol(kRejectNonStandardBodyWrites)]: false,

  [Symbol(kUniqueHeaders)]: null

},

data: '<!DOCTYPE html>\n' +

  '<html>\n' +

  '  <head>\n' +

  '    <meta charset="UTF-8">\n' +

  '    <title>404</title>\n' +

  '  </head>\n' +

  '  <body>\n' +

  '    404\n' +

  '  </body>\n' +

  '</html>'

}

}

I think we're getting closer on yours. I pushed up a fix that'll hopefully do the trick

1 Like

Cleaner error on newest version

2025-03-28 14:41:57 === Done building the schedule ===
2025-03-28 14:42:51 Channel #7342 has an active event (Mets Baseball 2025). Going to start the stream.
2025-03-28 14:42:52 Could not find stream for SNY_LIVE!
2025-03-28 14:42:52 Failed to parse the stream
2025-03-28 14:42:52 Could not get a playlist for channel #7342. Please make sure there is an event scheduled and you have access to it.
1 Like

This is bizarre to me

For each linear channel (in this case SNY or SNLA), it should provide an in-market and out of market stream. In the newest version, I'm checking both and just return whichever works. But in your case, neither is working... Which is surprising to me to say the least. I'm assuming you're able to view the stream in your browser right?

Yep, same error in my log. It plays in the web browser from MLB.tv and selecting SNY from the Watch drop down

Channel #442 has an active event (Mets Baseball 2025). Going to start the stream.

Could not find stream for SNY_LIVE!

Failed to parse the stream

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


@tonywagner Do you support SNY/SNLA on mlbserver? Wondering if I'm missing something here. Especially since it works fine for me

Do you know how to capture a HAR file in the browser?

I DM'd you a link to the HAR file I tried recording.

These 2 channels are supposed to only work in-market and play the specific channel 24/7. Why would they have an out of market stream?

When selecting the channel in the app or on the website there is only one feed.