I'm trying to playback Widevine-encrypted content outside of the browser. I'm trying to use the Content Decryption Module that ships with Chrome, which exports this API. After a lot of trial-and-error and research, I'm able to successfully initialize the CDM and obtain a Widevine license from the content server. The problem is that I'm not quite sure how the API is to be invoked for playback. I've got some DASH segments with encrypted samples, and I'm able to parse the sample information out of the boxes (number of samples, size of samples, sample IVs, and sample data). I thought I could decrypt audio via ContentDecryptionModule_10::Decrypt(); the call returns kSuccess but gives me decrypted buffers full of zeros. My next attempt was to try to use the CDM audio decoder via InitializeAudioDecoder() but that always returns kInitializationError. So I'm not quite sure where I'm going wrong. I realize I'm glossing over a lot of detail, but if anyone is familiar with any of this I can provide more data and code.
How can I play Widevine-encrypted content out of the browser?
1.1k views Asked by Luke At
1
There are 1 answers
Related Questions in CHROMIUM
- Why is it impossible to definitively know if your website is running as a PWA or as a website?
- Is it possible to save MHTML with scripts included?
- Chrome PDF print image aspect ratio incorrect - very apparent with small images - is there a workaround?
- How to turn off login pop-up on stackoverflow
- "Inconsistent WhatsApp Web Integration: Error with Manifest File Null Value Reading"
- Possible scroll bug with usage of overflow-hidden on body along with "sr-only" elements?
- How to solve Missing X server or $DISPLAY when trying to change the loaded website in Chromium
- Google Chrome for AWS Lambda as a layer
- Does Chromium pass URLs along with JS to V8?
- Chromium version on Puppeteer build
- Change the blue background of chrome devtool like before
- Native Messaging "Specified native messaging host not found" debugging
- PDF-documents not loading inside iframe in Chrome and Edge
- ReferenceError: ReadableStream is not defined using Puppeteer's page.pdf() on AWS
- Why is MediaQuery.of(context).size.height in Flutter detecting a larger height in Android chromium-based browsers?
Related Questions in DRM
- Dashjs and persistence license, how to handle an expired/obsolete license sessionId on playback?
- shouldWaitForLoadingOfRequestedResource delegate method not getting called
- Assign fake MAC Address to Wireguard Virtual NIC?
- AVPlayer:While playing DRM video, sometimes the audio and video both are not visible but the seek bar continues progress
- Preventing users from recording playback videos in browser using NextJS
- How can I find the License Key for a stream?
- DRM session error java.lang.IllegalArgumentException: {}: BAD_VALUE
- How to setup a playlist in jwplayer?
- Preventing Screenshots and Screen Recording through DRMs?
- Does xBox in developer mode supports video DRM playback with SL2000 or SL3000 content?
- How to download Widevine encrypted m3u8 stream
- Preventing Screenshots and Screen Recording on Website written in React
- How can I plot an EC50 value onto my dose-response curve in R?
- How to Integrate RMSDK on IOS for DRM function
- Issue in playing fairplay video with avplayer
Related Questions in MPEG-DASH
- Referencing secondary manifests in dash
- How to play ffmpeg dash?
- Streaming dynamic playlist with GPAC
- generate mpeg dash segments in specific directory using FFMPEG
- Having problems compiling shaka player
- Microsoft Edge fails to play PlayReady DASH stream in VideoJS
- ExoPlayer clearkey issue
- Is it possible to pregenerate m3u8 file? (the playlist only) and skip the transcoding?
- How can I play Widevine-encrypted content out of the browser?
- How to reduce the latency of CMAF?
- Is there a way to add private attributes to MPD without violating the DASH standard?
- How to support quality levels in video.js and videojs-contrib-dash. videojs-contrib-quality-levels is not working
- In Dash manifest, how to insert duration into the segmentTemplate or pass the segment duration in segment requests?
- Playing clearkey protected mpd content in html5 dashjs player with already acquired kty k and kid values
- Change keyframe interval losslessly to produce mpeg-dash content
Related Questions in WIDEVINE
- Dashjs and persistence license, how to handle an expired/obsolete license sessionId on playback?
- How to download Widevine encrypted m3u8 stream
- video.js multiple sources for fairplay widevine playready livestream DRM
- Netflix not working in my chromium browser fork
- How to create an Android custom MediaCas plugin?
- How to detect if video playback was blocked by DRM?
- Getting Protected Content License Error while playing DRM Protected Video in Roku Brightscript
- I want to setup a DRM based video stream with both widevine and play ready
- Is it possible to implement hardware-backed DRM with ClearKey?
- How can I play Widevine-encrypted content out of the browser?
- Is it possible to play DRM content by pure Javascript and video HTML5?
- How to verify if L1 license key and which one is installed for oemcrypto
- Widevine license format expected by Chromecast receiver
- Cast: Intercepting (and adjusting) response from Widevine license proxy
- WideVine Certification DRM problem on Android phone
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
At a very high level, without going into detail of the code etc, if you were able to use the CDM to decrypt the content and receive back unencrypted content that you or your app could view, then this would be a loophole or an error in the content protection system as it should not allow this.
This does not mean it is not possible, just that it's not the intent and you could not rely on the loophole or error not being fixed over time.
The CDM is usually intended to either decrypt and play the content securely itself, or to pass it back to a secure media path that will play it back without the app or even the OS being able to see the decrypted media.
This is sort of shown in the diagram below in the EME spec - the content, or frames, never get back to the app itself (https://www.w3.org/TR/encrypted-media/):
However, in your case, I think you just want to play back the content and you are not trying to actually view or access the decrypted content. If so, the cross platform Electron framework has a fork which supports CDM based playback for apps. This may meet your needs, although it is still using chromium and web technologies. Even if it does not it may give you useful insight into how the guys at Castlabs, the ones who created the fork, achieved this.