Universal EPG for live Max/Netflix/Prime/Peacock/ABCNetworks

Still though from what I found uverse is better, but you have to already have the service. I compared it a while ago when it was DirecTVnow, not sure if dtv stream upgraded quality

1 Like

Chrome capture only does 30fps but feels like 60 because it must be 1080p30 as you said

The quality of CBS and NBC and their sub channels is worse on DirecTV than NBC.com or CBS.com though

In most markets DTV ingests their locals OTA, so quality varies market to market depending on how many subchannels your affiliate carries and how their ATSC encoder or statmux is configured. DTV satellite has CBS and NBC at their native 1080i while their app and website stream them at 1080p60.

CBS.com and NBC.com ingest their affiliates via internal feeds the stations send out from their studios or master controls. NBC.com's affiliate streams are limited to 1080p30 but have Dolby Digital Plus 5.1 audio available on select platforms, CBS.com has 1080p60 but it's limited to AAC-LC stereo.

DIRECTV doesn't carry local diginets, they have national feeds for some of them: Bounce is 1080i on sat/1080p60 on streaming, MeTV, StartTV and H&I are 720p60 on both sat and stream, Grit is 480i on satellite and 1080p60 on streaming, Cozi and Get are 480i on sat/480p60 on streaming. Their FAST versions of Scripps News and CourtTV stream at 1080p60

@doug8796

I might have went a little overboard:

I started with Peacock and ABC. I need to get the UI wired up a bit better, but hopefully this weekend it'll be ready. I'm creating the xmltv data to integrate directly with CC4C if that's okay

4 Likes

Wow it's beautiful

Your code is quite remarkable.

I guess if you could just add other sites like CBS. Though that will be part of your project eventually as well.

Do all the NBC channels have epg/XML? I think some of those don't

Wow it's almost done. Could you add support for :

Prime Video live events (though supposedly there is a spot for it in Channels Direct)
Netflix live(I don't think we get anything until New Year's)

HBOMax live sporting events and events including CNNMax - These are sporadic like your EPlustv and just offer some sports . Could potentially complement an EPlustv account if they only had ESPN plus

I used the demo and recorded YouTubetv 4k. As of now Google only offers 1080p on their 4k stream for PC.

YouTube TV 4k events

I can give you a max login if you need it. The goal is an all in one XML database for stuff you can't get on schedules direct for live events/channels.

DirecTV won't allow this method
Spectrum and Dish and Uverse and Comcast already have guide data on channels direct.
YouTube tv is also mostly covered afaik, but not YouTubetv 4k which has random events including fox4k that may be killed in EPlustv. It plays in 4k, but only powerful xeons and maybe the new i9 can record in 4k it (possibly) or at least at 1440p

Sling- not sure
Friendly tv - not sure
FuboTV - not sure

What other streamers have obscure channels we can feed into cc4c and hdmi4c

This guide data is good for not only users of cc4c and hdmi4c

We just require different methods and clicks to get to where we need to get

Well NBC and CBS are higher bitrate on their own networks than DirecTV stream. Directvstream is about 8mbit or so from my readings

Will the peacock pull live sporting events too? The names maybe 3 linear channels or non linear?

If someone wants to give it a shot - I have a very beta version up here: GitHub - m0ngr31/ccEPG

I'm sure there will be bugs - It's something that was interesting to me, not that I'll ever use it. This one should be pretty easy to contribute to since it's simpler if someone wants to add in a new provider

4 Likes

What's the usage script for powershell for peacock / hboxmax / abc / prime? (Netflix)

I don't understand your question

Sorry. I will try to figure it out. Is there a usage needed or is it a docker. I haven't looked yet.

Do you have sample networks already inputted?

1 Like

It's a docker container. It should provide EPG for ABC and Peacock

That's awesome. Could you add Amazon prime live video? I can provide a login. I know I am asking a lot and thank you for your hard work.

My only step will be to grab name data to output from the epg to usable string to input in chromecapture

I need it to create. Script to scrub the xmlguide for time and website.

I'll take a look at it. Thanks

*Does peacock have multiple channels to make up for extra events during same time?

The container does all that for you

I'm just grabbing the channels it has setup from that page you sent. I'm not sure how things like SNF work on there?

OK, so I can do a call statement to the guide data and figure that out on my end, if it comes down to it.

I need a different method to just grab the guide data (not m3u) and I can run a script manually

Peacock has live events that are random, that I think would be best scrapped and used the way EplusTV works with a docker and checking the api so often, with different channels, at least 3. Amazon may also need it. If you can make it like eplustv, I can create the script to seach and click.

Peacock has SNF, but also has NBC games - Notre Dame etc, and some exclusive NCAAF games.
Prime has Thursday night football - I think Amazon Prime is on channels direct already/channels. But If you could do that would be good (if API allows it)
Netflix will have some random boxing events and NFL games near Christmas.

Thanks!

https://www.peacocktv.com/watch/sports/live-and-upcoming

The most efficient way is to have it check api every top and bottom of the hour (if its allowed), or have a script to somehow check it when an event should be live, that way a click script might not be necessary.

Its a bit of scripting, but I assume guide data can easily be pulled from that url, just have a script to check every 5 min (there are random times on there) if "guide data xml = time, run api", that should provide a real clickable link when its live. Something like that, I only know basic coding.

If you can get it working on cc4c, hdmi4c team may be able to use the code to implement a similar function on their end, the deep links work a bit differently.

I know you are very busy and appreciate everything!

1 Like

So I guess this is just my ignorance for what you're needing, but why do you need to have a script modify the data coming out of this container when it's spitting out exactly what you need for CC4C? The m3u will just link directly to your CC4C instance with the proper ?stream= param set

For the sporting events, you're correct that it'd have to be scheduled similar to E+ does it since these aren't on linear channels - I'm not picking up these yet. I'm just grabbing the linear channels right now. Would be a bit of work to get the dynamic stuff

Well I had to do it for directvstream/puffer and some others may need it, but yes I admit your method is better. I know you have other stuff going on but an EPlustv structure for this would be amazing if you could add sometime. It would be more efficient than my plan of using a click script.

So if you could add them one at a time. I really think you should accept donations, but thanks for what you do on your own time. I'll try and test what you have given us so far.

Requests would be for:

max - live events and linear channels like CNNMax and others
Peacock - Live events (sports)
Netflix live events
Amazon Prime Live events

Thanks and here's to hoping it is possible and not a huge headache for you to implement eventually.

If you don't feel like creating the m3u I could still use my inefficient mouse clicker method, but I assume the guide data extractor would take just as long for you to implement

Was trying to test this today but ran into issues

024-10-15 12:39:39 === Getting events ===
2024-10-15 12:39:39 Looking for Peacock events...
2024-10-15 12:39:39 Error getting Peacock channels
2024-10-15 12:39:39 Could not parse Peacock events
2024-10-15 12:39:39 Looking for ABC events...
2024-10-15 12:39:39 Error getting ABC channels
2024-10-15 12:39:39 Could not parse ABC events
2024-10-15 12:39:39 === Done getting events ===
2024-10-15 12:39:39 === Building the schedule ===
2024-10-15 12:39:39 === Done building the schedule ===
2024-10-15 12:39:39 === Starting Server ===
2024-10-15 12:39:39 Server started on port 8787
2024-10-15 12:39:39 _options: [Object],
2024-10-15 12:39:39 _ended: true,
2024-10-15 12:39:39 _ending: true,
2024-10-15 12:39:39 _redirectCount: 0,
2024-10-15 12:39:39 _redirects: [],
2024-10-15 12:39:39 _requestBodyLength: 0,
2024-10-15 12:39:39 _requestBodyBuffers: [],
2024-10-15 12:39:39 _onNativeResponse: [Function (anonymous)],
2024-10-15 12:39:39 _currentRequest: [Circular *1],
2024-10-15 12:39:39 _currentUrl: 'https://prod.gatekeeper.us-abc.symphony.edgedatg.com/api/ws/pluto/v1/module/categoryguide/4204541?brand=001&device=001&authlevel=0&layout=3897245&starttime=20241015-1710&endtime=20241017&offset=+0000&affiliate=WBMA&urlObfuscation=true',
2024-10-15 12:39:39 [Symbol(kCapture)]: false
2024-10-15 12:39:39 },
2024-10-15 12:39:39 [Symbol(kCapture)]: false,
2024-10-15 12:39:39 [Symbol(kBytesWritten)]: 0,
2024-10-15 12:39:39 [Symbol(kNeedDrain)]: false,
2024-10-15 12:39:39 [Symbol(corked)]: 0,
2024-10-15 12:39:39 [Symbol(kOutHeaders)]: [Object: null prototype] {
2024-10-15 12:39:39 accept: [Array],
2024-10-15 12:39:39 'user-agent': [Array],
2024-10-15 12:39:39 'accept-encoding': [Array],
2024-10-15 12:39:39 host: [Array]
2024-10-15 12:39:39 },
2024-10-15 12:39:39 [Symbol(errored)]: null,
2024-10-15 12:39:39 [Symbol(kHighWaterMark)]: 16384,
2024-10-15 12:39:39 [Symbol(kRejectNonStandardBodyWrites)]: false,
2024-10-15 12:39:39 [Symbol(kUniqueHeaders)]: null
2024-10-15 12:39:39 },
2024-10-15 12:39:39 response: {
2024-10-15 12:39:39 status: 404,
2024-10-15 12:39:39 statusText: 'Not Found',
2024-10-15 12:39:39 headers: AxiosHeaders {
2024-10-15 12:39:39 'content-type': 'application/vnd.disney.error.v1.0+json;charset=UTF-8',
2024-10-15 12:39:39 'transfer-encoding': 'chunked',
2024-10-15 12:39:39 connection: 'close',
2024-10-15 12:39:39 date: 'Tue, 15 Oct 2024 17:39:39 GMT',
2024-10-15 12:39:39 'cache-control': 'private, no-cache, no-store, no-transform, must-revalidate, proxy-revalidate, max-age=0, s-maxage=0',
2024-10-15 12:39:39 'access-control-expose-headers': 'Content-Length, X-DATG-Trace-Id',
2024-10-15 12:39:39 'x-datg-trace-id': 'vTv0I00s9p6fZ4uGzYJQcRXtJ9oUinR_oa9ks7puWKGbY-mWUOfn6Q==',
2024-10-15 12:39:39 vary: 'appversion,DATG-MVPD,Origin',
2024-10-15 12:39:39 'x-cache': 'Error from cloudfront',
2024-10-15 12:39:39 via: '1.1 28fbdc7dff830de5fe5fe845e58f2500.cloudfront.net (CloudFront)',
2024-10-15 12:39:39 'x-amz-cf-pop': 'ATL59-P8',
2024-10-15 12:39:39 'x-amz-cf-id': 'vTv0I00s9p6fZ4uGzYJQcRXtJ9oUinR_oa9ks7puWKGbY-mWUOfn6Q=='
2024-10-15 12:39:39 },
2024-10-15 12:39:39 config: {
2024-10-15 12:39:39 transitional: [Object],
2024-10-15 12:39:39 adapter: [Array],
2024-10-15 12:39:39 transformRequest: [Array],
2024-10-15 12:39:39 transformResponse: [Array],
2024-10-15 12:39:39 timeout: 0,
2024-10-15 12:39:39 xsrfCookieName: 'XSRF-TOKEN',
2024-10-15 12:39:39 xsrfHeaderName: 'X-XSRF-TOKEN',
2024-10-15 12:39:39 maxContentLength: -1,
2024-10-15 12:39:39 maxBodyLength: -1,
2024-10-15 12:39:39 env: [Object],
2024-10-15 12:39:39 validateStatus: [Function: validateStatus],
2024-10-15 12:39:39 headers: [AxiosHeaders],
2024-10-15 12:39:39 method: 'get',
2024-10-15 12:39:39 url: 'https://prod.gatekeeper.us-abc.symphony.edgedatg.com/api/ws/pluto/v1/module/categoryguide/4204541?brand=001&device=001&authlevel=0&layout=3897245&starttime=20241015-1710&endtime=20241017&offset=+0000&affiliate=WBMA&urlObfuscation=true',
2024-10-15 12:39:39 data: undefined
2024-10-15 12:39:39 },
2024-10-15 12:39:39 request: <ref *1> ClientRequest {
2024-10-15 12:39:39 _events: [Object: null prototype],
2024-10-15 12:39:39 _eventsCount: 7,
2024-10-15 12:39:39 _maxListeners: undefined,
2024-10-15 12:39:39 outputData: [],
2024-10-15 12:39:39 outputSize: 0,
2024-10-15 12:39:39 writable: true,
2024-10-15 12:39:39 destroyed: false,
2024-10-15 12:39:39 _last: true,
2024-10-15 12:39:39 chunkedEncoding: false,
2024-10-15 12:39:39 shouldKeepAlive: false,
2024-10-15 12:39:39 maxRequestsOnConnectionReached: false,
2024-10-15 12:39:39 _defaultKeepAlive: true,
2024-10-15 12:39:39 useChunkedEncodingByDefault: false,
2024-10-15 12:39:39 sendDate: false,
2024-10-15 12:39:39 _removedConnection: false,
2024-10-15 12:39:39 _removedContLen: false,
2024-10-15 12:39:39 _removedTE: false,
2024-10-15 12:39:39 strictContentLength: false,
2024-10-15 12:39:39 _contentLength: 0,
2024-10-15 12:39:39 _hasBody: true,
2024-10-15 12:39:39 _trailer: '',
2024-10-15 12:39:39 finished: true,
2024-10-15 12:39:39 _headerSent: true,
2024-10-15 12:39:39 _closed: false,
2024-10-15 12:39:39 socket: [TLSSocket],
2024-10-15 12:39:39 _header: 'GET /api/ws/pluto/v1/module/categoryguide/4204541?brand=001&device=001&authlevel=0&layout=3897245&starttime=20241015-1710&endtime=20241017&offset=+0000&affiliate=WBMA&urlObfuscation=true HTTP/1.1\r\n' +
2024-10-15 12:39:39 'Accept: application/json, text/plain, /\r\n' +
2024-10-15 12:39:39 'user-agent: Mozilla/5.0 (X11; Linux i686; rv:106.0) Gecko/20100101 Firefox/106.0\r\n' +
2024-10-15 12:39:39 'Accept-Encoding: gzip, compress, deflate, br\r\n' +
2024-10-15 12:39:39 'Host: prod.gatekeeper.us-abc.symphony.edgedatg.com\r\n' +
2024-10-15 12:39:39 'Connection: close\r\n' +
2024-10-15 12:39:39 '\r\n',
2024-10-15 12:39:39 _keepAliveTimeout: 0,
2024-10-15 12:39:39 _onPendingData: [Function: nop],
2024-10-15 12:39:39 agent: [Agent],
2024-10-15 12:39:39 socketPath: undefined,
2024-10-15 12:39:39 method: 'GET',
2024-10-15 12:39:39 maxHeaderSize: undefined,
2024-10-15 12:39:39 insecureHTTPParser: undefined,
2024-10-15 12:39:39 joinDuplicateHeaders: undefined,
2024-10-15 12:39:39 path: '/api/ws/pluto/v1/module/categoryguide/4204541?brand=001&device=001&authlevel=0&layout=3897245&starttime=20241015-1710&endtime=20241017&offset=+0000&affiliate=WBMA&urlObfuscation=true',
2024-10-15 12:39:39 _ended: true,
2024-10-15 12:39:39 res: [IncomingMessage],
2024-10-15 12:39:39 aborted: false,
2024-10-15 12:39:39 timeoutCb: null,
2024-10-15 12:39:39 upgradeOrConnect: false,
2024-10-15 12:39:39 parser: null,
2024-10-15 12:39:39 maxHeadersCount: null,
2024-10-15 12:39:39 reusedSocket: false,
2024-10-15 12:39:39 host: 'prod.gatekeeper.us-abc.symphony.edgedatg.com',
2024-10-15 12:39:39 protocol: 'https:',
2024-10-15 12:39:39 _redirectable: [Writable],
2024-10-15 12:39:39 [Symbol(kCapture)]: false,
2024-10-15 12:39:39 [Symbol(kBytesWritten)]: 0,
2024-10-15 12:39:39 [Symbol(kNeedDrain)]: false,
2024-10-15 12:39:39 [Symbol(corked)]: 0,
2024-10-15 12:39:39 [Symbol(kOutHeaders)]: [Object: null prototype],
2024-10-15 12:39:39 [Symbol(errored)]: null,
2024-10-15 12:39:39 [Symbol(kHighWaterMark)]: 16384,
2024-10-15 12:39:39 [Symbol(kRejectNonStandardBodyWrites)]: false,
2024-10-15 12:39:39 [Symbol(kUniqueHeaders)]: null
2024-10-15 12:39:39 },
2024-10-15 12:39:39 data: { error: [Object] }
2024-10-15 12:39:39 }
2024-10-15 12:39:39 }
2024-10-15 12:39:39 TypeError: Cannot read properties of undefined (reading 'categories')
2024-10-15 12:39:39 at ABCHandler. (/app/services/abc-handler.ts:173:35)
2024-10-15 12:39:39 at Generator.next ()
2024-10-15 12:39:39 at fulfilled (/app/services/abc-handler.ts:5:58)
2024-10-15 12:39:39 at processTicksAndRejections (node:internal/process/task_queues:95:5)

Also peacock should have more channels - a lot more ( this is only some of them)


Does chromecapture need to be open to login? If so, I had it running. Does it need tokens? Has anyone else been able to replicate it and successful get it to work?

Patiently awaiting your reply

I'll look and see what is breaking ABC, but you're right that Peacock should have a ton of channels. It was showing a bunch on mine. That area should scroll to show them? Assuming they pulled in.

At the top of the admin panel it should have a URL to point to your CC4C server so it'd use whatever tokens you already have setup there

That may be why, I dont use docker for cc4c, how can I make my custom .js file turn into a docker?

Does cc4c store tokens in a similar way?