Skip to content

Instantly share code, notes, and snippets.

@frozenpandaman
Last active October 26, 2026 14:49
Show Gist options
  • Select an option

  • Save frozenpandaman/a91f4dc7b999499761f798fdd6da6129 to your computer and use it in GitHub Desktop.

Select an option

Save frozenpandaman/a91f4dc7b999499761f798fdd6da6129 to your computer and use it in GitHub Desktop.
download videos protected with widevine DRM

Downloading Widevine content

Specifically from Rakuten TV (live.tv.rakuten.co.jp)

FMI: https://cdm-project.com/How-To/ & https://old.reddit.com/r/Piracy/comments/y30ffr/

Setup

  1. Install Tampermonkey: https://www.tampermonkey.net/
  2. Install yt-dlp: https://github.com/yt-dlp/yt-dlp#installation
  3. Install ffmpeg: https://ffmpeg.org/download.html
  4. Download Bento4: https://www.bento4.com/downloads/
  5. Have a proxy/VPN if you're not in Japan since stuff is geolocked

Getting your decryption key

Get PSSH

  1. Install this userscript: https://greasyfork.org/en/scripts/373903-eme-logger
  2. Search browser JS Console for MediaKeySession::generateRequest, then press play on the video and look under "Init Data"
  3. Get something like AAAAMnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAXXXXXXXXFtoyTEzFOZDD4T9lmTiI=

Get License URL

  1. After doing the above, go to your browser developer tools' Network tab and search for Widevine
  2. Right click > Copy > Copy link address
  3. Get something like https://azcp001.keydelivery.japaneast.media.azure.net/Widevine/?kid=e0c5b68c-9313-314e-6430-f8XXXXXXXX22

Get headers

  1. Left click on the Widevine entry from the above steps, under the "Headers tab" scroll down to "Request Headers"
  2. Copy the following lines & do some manual formatting, get something like:
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,ja-JP;q=0.8,ja;q=0.7
Authorization: blahblah
Cache-Control: no-cache
Content-Length: "blahblah"
Origin: https://live.tv.rakuten.co.jp
Pragma: no-cache
Referer: https://live.tv.rakuten.co.jp/
User-Agent: blahblah

Getting the key

  1. Open https://cdrm-project.com/
  2. Input the results from the previous steps and press "Send"
  3. Hopefully see the "SUCCESS" message along with a key that looks like e0c5b68c93133XXXXXXXX84fd9664e22:499047f36b770957XXXXXXXX9dfc4033

Downloading the encrypted files

  1. In the developer console Network tab, search for mpd
  2. Find something that starts with Manifest, right click and copy the URL, e.g. https://azclwds01.akamaized.net/9dc3547a-ede5-4aed-841f-5cXXXXXXXX0f/tXyKyP_tab_hd.ism/Manifest(format=mpd-time-csf,encryption=cenc,filter=pc_hd_001)
  3. Run the Terminal command: yt-dlp --allow-unplayable [url]
  4. Get two files, an .mp4 and an .m4a

Decrypting & merging the files

  1. In Bento4's bin/ folder, find the mp4decrypt command line utility
  2. Navigate to this folder in your Terminal and run mp4decrypt --key [yourkey] /path/to/corrupted.file /path/to/fixed.file on both files
  3. Run ffmpeg -i fixedvideo.mp4 -i fixedaudio.m4a -c:v copy -c:a copy output.mp4
  4. The end
@luohuaweishui

Copy link
Copy Markdown

想了解prime video 这种drm怎么解决?

@JeffMacK

Copy link
Copy Markdown

I downloaded the URL (herdenking-van-9-jaren-strijd) and was able to download the complete file without any problems. Thank you very much for your help and for taking the time to investigate the issue!

Thanks, i have pro now also but my problem is i can download the video and audio file but unfortunlay there is no sound in my videos and also no sound in the audio file. Did they experience the same because you didnt mention that? did the herdenking video have sound when you downloaded it?

That's correct. It downloads the audio and video files separately. Once both files have been fully downloaded, they are automatically muxed into a single file. There has also been an update, and now you can download all the files without any problems ;) succes

@mojienjoyment

mojienjoyment commented Sep 30, 2026 •

Copy link
Copy Markdown

for subtitle file:

  1. In the developer console Network tab, search for .vtt
  2. While playing content, Find something that starts with Manifest, right click and copy the URL and download it with some tools like wget. That is the subtitle file.

@nathanbaker007

Copy link
Copy Markdown

Interesting technical write-up on how Widevine DRM works in practice. I found the explanation of PSSH, license requests, manifests, and the role of tools like yt-dlp and FFmpeg particularly useful for understanding the overall streaming-media workflow. It’s a good example of how browser developer tools can reveal the different components involved in protected video delivery.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment