Any chance someone can download this episode for me? Thank you in advance. I do appreciate it.
https://www.cbs.com/shows/video/1_nZLkN8AQKznUve1PYStKFZjfGTeron/
Try StreamFab Downloader and download from Netflix, Amazon, Youtube! Or Try DVDFab and copy Blu-rays!
+ Reply to Thread
Results 31 to 60 of 258
Thread
-
-
Code:
--key b9997bec3be140afb65b45d63857b82c:351a1d3de1f5627ed941d9abbca8a79e
Last edited by iamghost; 26th Jul 2023 at 13:58.
-
Hi All. Can someone help me learn how to DL vids from CBS [specifically Big Brother]? I see some really nice guys DL vids here for others; which would be great. But I can't keep asking folks to DL vids for me every few days [Big Brother is on multiple times per week]. I have a little experience with Widevine; but am clearly not an expert. I think I found the LICENSE & MPD URLs for my video; but I could not find the PSSH. I'm really not sure I'm doing it all correctly. If anyone can point me in the right direction I'd sure appreciate it!
https://www.cbs.com/shows/video/gPd2a68tmV_XuX3lBKKQFtrPTStW8Lxb -
Have you read the sticky threads? All the information you need is in there.
A summary:
1. use WKS-Keys or one of the other solutions. You could also go with getwvkeys or cdrm or any of the other ones that have popped up lately.
2. Get PSSH, License URL and headers from the developer console (or write a script that extracts these values automatically)
3. Run WKS-keys with the info you found in step 2 and it should spit out the keys
This is very much an oversimplification, but that's how it generally works -
also you have to edit mpd to get rid of shit loads of ads otherwise it will not decrypt with ads on it
-
ah right, my downloader does this automatically so I forgot to mention that
-
Thanks for your replies iamghost & Karoolus! I was following a process I used some time ago for itvX videos. I would find the PSSH using a Tampermonkey "EME Logger" user-script. I would get the license & MPD URLs from Chrome DevTools. And then use "cdrm-project" to get the key.
But I think something is different here with this CBS URL? Are they not using MPDs? The "EME Logger" user-script does NOT find a PSSH. When I use "N_m3u8DL-RE" to process the MPD URL I did find [https://pubads.g.doubleclick.net/<...>/manifest.mpd...], it was the COMMERCIAL that plays beforehand; NOT the actual video.
Another MPD URL then appears, which looks promising, but the MPD portion is the MPD for the ad again:
https://secure-dcr.imrworldwide.com/cgi-bin/gn?prd=dcr<...>&c66=mediaurl,https%253A%252F%252Fp ubads.g.doubleclick.net%252Fondemand%252Fdash%252F content%252F2497752%252Fvid%252FgPd2a68tmV_XuX3lBK KQFtrPTStW8Lxb%252FDLS%252Fstreams%252F8621e8e8-b8e5-4a86-a3c6-247d1a8b15ba%252Fmanifest.mpd
I also see some M3U8 URLs, but they are just a bunch of hex as text:
https://bakere97c485.airspace-a.cbsivideo.com/measurements/100KB.m3u8?rnd=14-1-10787-1-10787-97567-90051996-_CgJqMRAUGHsiBQgBEKNUKJyr-CowkJq1pgY4kZq1pgZArPufnwhKFAgBEN8BGMF2IIqAgMAEKIW AgKAEUJiIpANaFAgBEN8BGPI9IIqAgMAEKIWAgKAEYAFqE2J1d HRvbjEuc2pjLmh2LnByb2SCARQIARDfARjyPSCKgIDABCiFgIC gBIgBmIik-waQAQCYAQA
So I'm stuck. Any further tips would be appreciated.
UPDATE #1: OK, so I understand now that the first MPD URL I see [https://pubads.g.doubleclick.net/<...>/manifest.mpd...] is the one I want. But there are so many elements in it -- I'm not sure yet which are for the commercial(s) which I should delete. Also, I still can NOT find the PSSH.
UPDATE #2: Spent a few more hours on this trying to understand it better from the clues you guys gave me above; and I got SO CLOSE to the solution! I downloaded the correct MPD and learned how to edit it properly. I downloaded my desired audio & video streams using "N_m3u8DL-RE". But I could NOT decrypt the DL'd files -- I was missing the SECOND HALF of the KEY string!!! I had the first half, the KID, from the "N_m3u8DL-RE" output. But I needed that second part (after the colon) to form the complete KEY. I tried using "https://keysdb.net" with PSSH from MPD, and license URL from Chrome DevTools, but get {"code":400,"error":true,"message":"Failed to get license: 403 Forbidden"} error. Was I too slow -- does the PSSH "expire"? Maybe the "https://keysdb.net" site is unreliable? When I use the second half of the KEY provided by "iamghost" in post below, I am able to SUCCESSFULLY decrypt my DL'd files! Looked at installing "WKS-Keys", but seems like a complex setup [installing Android Studio, or dumping from my phone]. Am I missing something simple here? Got SO CLOSE -- just could not generate that "a90b8429be13fd55f89719afa17f9d8f" second-half of the key!
This is the PSSH and license URL I have:
Code:AAAAWHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADgIARIQ4RDzw/IGTiCPq7mw5h4g8CIgZ1BkMmE2OHRtVl9YdVgzbEJLS1FGdHJQVFN0VzhMeGI4AQ== https://cbsi.live.ott.irdeto.com/widevine/getlicense?CrmId=cbsi&AccountId=cbsi&SubContentType=Default&ContentId=gPd2a68tmV_XuX3lBKKQFtrPTStW8Lxb
UPDATE #3: Finally, a complete solution (for now anyway)! I was missing the "Authorization:Bearer ..." string in the HEADERS value on the Send Widevine Request site.
https://www.cbs.com/shows/video/gPd2a68tmV_XuX3lBKKQFtrPTStW8LxbLast edited by zimmerma379; 6th Aug 2023 at 16:45. Reason: UPDATE
-
download mpd (i have done remove all ads)
Code:https://anonfiles.com/G2P8y964zf/manifest_mpd
Code:N_m3u8DL-RE -M format=mp4 --key e110f3c3f2064e208fabb9b0e61e20f0:a90b8429be13fd55f89719afa17f9d8f "PATH your mpd-C:\Users\XXXXXXX\manifest.mpd" --save-name Big_Brother
[Attachment 72901 - Click to enlarge]
[Attachment 72902 - Click to enlarge] -
Thanks again for your help & clues "iamghost"!!! If you have any more time to help, see "UPDATE #2" in my post above.
Last edited by zimmerma379; 4th Aug 2023 at 18:25.
-
My process is pretty basic.
As everyone advised already; if you have WKS-Keys or one of the other solutions to get the keys......, this is my process:
Load your video of choice from cbs with Dev Tools open.
On Network Tab, search for .mpd and play video.
The one .mpd it loads, right click on it and save it somewhere.
Also with .mpd file selected in Network tab, view response.
If you scroll down a bit you'll see the PSSH, it's the shorter one.
You can use that as others pointed out with your preferred method to get keys.
I manually edit my .mpd files to get rid of the ads. If someone has an automated way, I would love to hear it
I open the .mpd into notepad++
Got to View -> Fold Level -> 2
Now everything is "closed"/"folded"
Highlight each section that looks similar to:
Code:<Period id="mid-roll-4-ad-1" duration="PT30.03S">
re-save file.
Run through like imaghost showed above, you should get video file without ads. -
Thanks for your reply "ehurdler "! Yes, I got SO CLOSE to the solution -- just can NOT generate second half of KEY. See my "UPDATE #2" above for more details.
-
How are you getting your keys? Your own CDM? If you are, your headers.py just add ONLY 'authorization': 'Bearer to the header, nothing else.
Get the header info from license url, "Copy as Curl (bash)" - paste it in at curlconverter..... Only enter the 'authorization': 'Bearer into your headers.py and you should be set.
Sorry I re-read your post. You do not use your own CDM. I do not have access nor tried the "https://keysdb.net". I would follow
and setup your own. Much easier in the long run, well for me that is.Last edited by ehurdler; 4th Aug 2023 at 19:08.
-
Here, take these L3 CDM and get WKS Keys up and running.
https://files.videohelp.com/u/303646/1874076282.zip
https://files.videohelp.com/u/303646/2085943500.zip
https://files.videohelp.com/u/303646/2314085259.zip
https://files.videohelp.com/u/303646/2515545258.zip
Maybe it's an expired token in the headers, maybe it's because there is a geolock in place and keysdb.net is simply not in the right country, I have no idea. Doing it locally will always be easier and doesn't rely on others. At least this way you can check easily. -
from keydbs.net
[Attachment 72907 - Click to enlarge]
must add proxy url
copy below and save as proxy.py
Code:import json import random import uuid import time import httpx from lxml import html class Settings: def __init__(self, userCountry: str = None, randomProxy: bool = False) -> None: self.randomProxy = randomProxy self.userCountry = userCountry self.ccgi_url = "https://client.hola.org/client_cgi/" self.ext_ver = self.get_ext_ver() self.ext_browser = "chrome" self.user_uuid = uuid.uuid4().hex self.user_agent = "Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36" self.product = "cws" self.port_type_choice: str self.zoneAvailable = ["AR", "AT", "AU", "BE", "BG", "BR", "CA", "CH", "CL", "CO", "CZ", "DE", "DK", "ES", "FI", "FR", "GR", "HK", "HR", "HU", "ID", "IE", "IL", "IN", "IS", "IT", "JP", "KR", "MX", "NL", "NO", "NZ", "PL", "RO", "RU", "SE", "SG", "SK", "TR", "UK", "US", "GB"] def get_ext_ver(self) -> str: about = httpx.get("https://hola.org/access/my/settings#/about").text if 'window.pub_config.init({"ver":"' in about: version = about.split('window.pub_config.init({"ver":"')[1].split('"')[0] return version # last know working version return "1.199.485" class Engine: def __init__(self, Settings) -> None: self.settings = Settings def get_proxy(self, tunnels, tls=False) -> str: login = f"user-uuid-{self.settings.user_uuid}" proxies = dict(tunnels) protocol = "https" if tls else "http" for k, v in proxies["ip_list"].items(): return "%s://%s:%s@%s:%d" % ( protocol, login, proxies["agent_key"], k if tls else v, proxies["port"][self.settings.port_type_choice], ) def generate_session_key(self, timeout: float = 10.0) -> json: post_data = {"login": "1", "ver": self.settings.ext_ver} return httpx.post( f"{self.settings.ccgi_url}background_init?uuid={self.settings.user_uuid}", json=post_data, headers={"User-Agent": self.settings.user_agent}, timeout=timeout, ).json()["key"] def zgettunnels( self, session_key: str, country: str, timeout: float = 10.0 ) -> json: qs = { "country": country.lower(), "limit": 1, "ping_id": random.random(), "ext_ver": self.settings.ext_ver, "browser": self.settings.ext_browser, "uuid": self.settings.user_uuid, "session_key": session_key, } #print(qs) return httpx.post( f"{self.settings.ccgi_url}zgettunnels", params=qs, timeout=timeout ).json() @staticmethod def sleep() -> None: min_tunnels_pause = 10 max_tunnels_pause = 25 def rand_range(low: int, hi: int) -> float: if low >= hi: raise Exception("RandRange: low boundary is greater or equal to high boundary") delta = hi - low return low + random.random() * delta sleep_duration = int(rand_range(min_tunnels_pause, max_tunnels_pause)) # sleep_duration = 10 # seems 10 is enough print("Please wait for "+str(sleep_duration)+" seconds.") time.sleep(sleep_duration) class Hola: def __init__(self, Settings) -> None: self.myipUri: str = "https://hola.org/myip.json" self.settings = Settings def get_country(self) -> str: if not self.settings.randomProxy and not self.settings.userCountry: self.settings.userCountry = httpx.get(self.myipUri).json()["country"] if ( not self.settings.userCountry in self.settings.zoneAvailable or self.settings.randomProxy ): self.settings.userCountry = random.choice(self.settings.zoneAvailable) return self.settings.userCountry def init_proxy(data): settings = Settings( data["zone"] ) # True if you want random proxy each request / "DE" for a proxy with region of your choice (German here) / False if you wish to have a proxy localized to your IP address settings.port_type_choice = data[ "port" ] # direct return datacenter ipinfo, peer "residential" (can fail sometime) hola = Hola(settings) engine = Engine(settings) userCountry = hola.get_country() session_key = engine.generate_session_key() #engine.sleep() tunnels = engine.zgettunnels(session_key, userCountry) return engine.get_proxy(tunnels) if __name__ == "__main__": CC = input("Input desired country code: ") test = init_proxy({"zone": CC, "port": "peer"}) print(test)
[Attachment 72908 - Click to enlarge]
your header is
[Attachment 72909 - Click to enlarge]Last edited by iamghost; 5th Aug 2023 at 02:31.
-
Just a quick question. I got my own CDM thanks to Andriod studio and i am able to get keys from other sites but for some reason, when i do exactly what is told to get keys from cbs, i keep getting "unable to parse license - check protobufs".
Last edited by monsterbubble; 5th Aug 2023 at 11:19.
-
Last edited by ehurdler; 5th Aug 2023 at 11:09.
-
This is how i have headers.pay file..
headers = {
'authorization': 'Bearer eyJhbGciOiJIUzI1NiIsImtpZCI6IjNkNjg4NGJmLWViMDktND A1Zi1hOWZjLWU0NGE1NmY3NjZiNiIsInR5cCI6IkpXVCJ9.eyJ zdWIiOiJhbm9ueW1vdXNfVVMiLCJlbnQiOlt7ImJpZCI6IkFsb EFjY2Vzc01haW4iLCJlcGlkIjo3fV0sImlhdCI6MTY5MTI0MDQ 5MywiZXhwIjoxNjkxMjQ3NjkzLCJpc3MiOiJjYnMiLCJhaWQiO iJjYnNpIiwiaXNlIjp0cnVlLCJqdGkiOiJjOGIxNDM1Mi1jMzB mLTQxY2ItODA2Ni1mOTY4ZWUzNGY5Y2UifQ.xHfJfRE8ml0cui AHqSUTiRhkDE8m8s_kTielU2GtUOs',
} -
That would/should work.
Unsure what the rest of the info you are doing or passing along, but that would be a correct headers.py file.
What else? Show exactly what you are doing, your process. Maybe we can help.
Honestly everything you would need is already shown in this full thread, but show what you're doing and we can all see. -
Here's what i did & the results..
[Attachment 72914 - Click to enlarge]
How i have the header:
'authorization': 'Bearer eyJhbGciOiJIUzI1NiIsImtpZCI6IjNkNjg4NGJmLWViMDktND A1Zi1hOWZjLWU0NGE1NmY3NjZiNiIsInR5cCI6IkpXVCJ9.eyJ zdWIiOiJhbm9ueW1vdXNfVVMiLCJlbnQiOlt7ImJpZCI6IkFsb EFjY2Vzc01haW4iLCJlcGlkIjo3fV0sImlhdCI6MTY5MTI1NzU xNCwiZXhwIjoxNjkxMjY0NzE0LCJpc3MiOiJjYnMiLCJhaWQiO iJjYnNpIiwiaXNlIjp0cnVlLCJqdGkiOiI5M2ZhYTdmNC0zMzI yLTQxMGUtYTVhMy01ODNiYTJjN2EyMDIifQ.PC9N5PxdG89QoV OdTXo6D4EhxXF1G5Xgs9mBSy4DXrs',
} -
it should be work
my wks-keys...
[Attachment 72915 - Click to enlarge]
[Attachment 72916 - Click to enlarge]
Code:--key e110f3c3f2064e208fabb9b0e61e20f0:a90b8429be13fd55f89719afa17f9d8f
Last edited by iamghost; 5th Aug 2023 at 12:55.
-
-
-
-
try copy all this to see if it work on you, if it work then your cdm fine and you put something mistake on your header
Code:pssh- AAAAWHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADgIARIQDtainAVWR8qvuugYgrFQQiIgbW1DMGhmX2ZRczFsR3BrRm9sZHpqVklKX2lydFR2Znk4AQ== license- https://cbsi.live.ott.irdeto.com/widevine/getlicense?CrmId=cbsi&AccountId=cbsi&SubContentType=Default&ContentId=mmC0hf_fQs1lGpkFoldzjVIJ_irtTvfy
Code:import requests headers = { 'authorization': 'Bearer eyJhbGciOiJIUzI1NiIsImtpZCI6IjNkNjg4NGJmLWViMDktNDA1Zi1hOWZjLWU0NGE1NmY3NjZiNiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbm9ueW1vdXNfVVMiLCJlbnQiOlt7ImJpZCI6IkFsbEFjY2Vzc01haW4iLCJlcGlkIjo3fV0sImlhdCI6MTY5MTI1OTI4MywiZXhwIjoxNjkxMjY2NDgzLCJpc3MiOiJjYnMiLCJhaWQiOiJjYnNpIiwiaXNlIjp0cnVlLCJqdGkiOiI4ODdhYmI5MS00YTcwLTRiOWYtYWFiYy01NTU1MmMwNjQ3NmUifQ.MoH1mdB4Ebor2fWbVAfv2QdLhzX7S2j2HQiUdCKP4RQ', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36', }
-
-
karoolus already post cdm to download https://forum.videohelp.com/threads/407820-Can-I-download-from-CBS-com/page2#post2700255
i have try one and still works
Similar Threads
-
Download subtitles from CBS.com video streams
By BobbyGee2003 in forum SubtitleReplies: 1Last Post: 28th Apr 2020, 06:02 -
Portable DLer for CBS?
By KermitJ in forum Video Streaming DownloadingReplies: 22Last Post: 1st Feb 2020, 12:18 -
CBS Grammy Download
By ghostrewel in forum Video Streaming DownloadingReplies: 8Last Post: 14th Feb 2019, 22:02 -
Could someone help me download a CBS News video?
By GDev in forum Video Streaming DownloadingReplies: 4Last Post: 21st Sep 2018, 01:50 -
RTMP and CBS
By RBCC in forum Video Streaming DownloadingReplies: 1Last Post: 22nd Mar 2018, 08:21