VideoHelp Forum
+ Reply to Thread
Page 1 of 4
1 2 3 ... LastLast
Results 1 to 30 of 116
Thread
  1. Hello! I'm new here, and I'm trying to learn yt-dlp to download the episodes of this show: https://www.ctv.ca/shows/muddling-through

    I want to download them to put them to a DVD for a family member who worked on the production of the original show. We're trying to put together sort of a compilation of all the things he ever worked on, for a Christmas present (he's retired and isn't in good health).

    Anyhow, I know from browsing this forum that CTV stuff is DRM-protected, but it seems like a few folks have had some success getting a few things from there. The CTV site doesn't require a login or account to watch the videos. When I follow the directions for downloading with yt-dlp, I get a message that "this video is DRM protected".

    I confess that I'm not very savvy in command-line stuff or scripting/coding (one of the other threads dealing with a CTV request mentioned needing to know some of that stuff). Can anyone point me to a resource where I can fill in the blanks and work out how to capture these videos? I don't want to distribute the videos or anything; I only want to present them to my uncle for a private memento.

    Thanks in advance to anyone who reads this and might offer some help!
    Quote Quote  
  2. http://getwvkeys.cc/ you need this site for getting the keys so you can decrypt the encrypted content that you will download.

    Download these and put them in some folder (these are used for downloading, decrypting, merging video and audio)
    https://drive.google.com/file/d/1DxCKtao8EUoH3hWPOzlESWNJC2BSd-wt/view?usp=sharing

    Download this add on
    https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en

    Copy the contents of this code:
    Code:
    // ==UserScript==
    // @name         EME2
    // @version      0.6
    // @match        *://*/*
    // @match        http://ss-cdn1.blim.com/
    // @run-at       document-start
    // @grant        none
    // ==/UserScript==
    
    (async () => {
        const indent = (s,n=4) => s.split('\n').map(l=>Array(n).fill(' ').join('')+l).join('\n');
    
        const b64 = {
            decode: s => Uint8Array.from(atob(s), c => c.charCodeAt(0)),
            encode: b => btoa(String.fromCharCode(...new Uint8Array(b)))
        };
    
        const fnproxy = (object, func) => new Proxy(object, { apply: func });
    
        const proxy = (object, key, func) => Object.defineProperty(object, key, {
            value: fnproxy(object[key], func)
        });
    
            proxy(MediaKeySession.prototype, 'generateRequest', async (_target, _this, _args) => {
            const [initDataType, initData] = _args;
            console.groupCollapsed(
                `[EME] MediaKeySession::generateRequest\n` +
                `    Session ID: ${_this.sessionId || '(not available)'}\n` +
                `    Init Data Type: ${initDataType}\n` +
                `    Init Data: ${b64.encode(initData)}`
            );
            console.trace();
            console.groupEnd();
            return _target.apply(_this, _args);
        });
        })();
    and go to the add-on, click "Create New Script", paste the code there and click file -> save
    You need to do this so you can get the PSSH from console of browser, otherwise you won't have those codes in the console.

    The whole process is shown in the following video.
    Watch it closely, I might do some things that seem "fast" to you, so rewind, stop, watch, try, think, etc.
    https://streamable.com/umoszy - Removed by Streamable because it violated their stupid Terms of service.
    https://web.archive.org/web/20220301190239/https://streamable.com/umoszy

    Do let us now if you need help with anything.
    Last edited by [ss]vegeta; 14th Apr 2022 at 14:28.
    Quote Quote  
  3. @[ss]vegeta

    This is an excellent post with a great demonstration video. Kudos to you. I suggest that this post be made a sticky so that new comers can read and get up to speed quickly.


    For those who wish to have their own copy of this excellent video please click ...

    Quote Quote  
  4. Originally Posted by brook_benton View Post
    @[ss]vegeta

    this is an excellent post with a great demonstration video. Kudos to you. I suggest that this post be made a sticky so that new comers can read and get up to speed quickly.

    I join a @Brook_Benton's thanks for your video tutorial.
    Could you also explain how to use WKS-KEYS scripts.My first attempts resulted in an error

    Code:
    D:\video\WKS-KEYS>python l3.py
    Traceback (most recent call last):
      File "D:\video\WKS-KEYS\l3.py", line 9, in <module>
        from pywidevine.L3.cdm import cdm, deviceconfig
      File "D:\video\WKS-KEYS\pywidevine\L3\cdm\cdm.py", line 13, in <module>
        from Cryptodome.Random import get_random_bytes
    ModuleNotFoundError: No module named 'Cryptodome'
    Quote Quote  
  5. pip install pycryptodome
    Quote Quote  
  6. Originally Posted by [ss]vegeta View Post
    The whole process is shown in the following video.
    Watch it closely, I might do some things that seem "fast" to you, so rewind, stop, watch, try, think, etc.
    https://streamable.com/umoszy

    Do let us now if you need help with anything.
    I don't know what to say-- this is like magic! It's working perfectly! I'm so excited-- I really thought we weren't going to be able to get these videos, but everyone in my family is going to be thrilled.

    THANK YOU VERY VERY MUCH. You guys are amazing, and I owe you big.

    Originally Posted by Brook_Benton View Post
    @[ss]vegeta

    This is an excellent post with a great demonstration video. Kudos to you. I suggest that this post be made a sticky so that new comers can read and get up to speed quickly.
    I agree totally. Thank you for posting this link to a downloadable video. This guide is a total lifesaver and I couldn't be happier. My sincere appreciation to both of you and to this forum.
    Quote Quote  
  7. Originally Posted by oxoxen21 View Post
    THANK YOU VERY VERY MUCH.
    You are welcome sir. Hope your family member will recover and he'll enjoy this gift that you all are preparing.
    Quote Quote  
  8. Originally Posted by lomero View Post
    pip install pycryptodome
    Error again
    Code:
    D:\video\WKS-KEYS>pip install pycryptodome
    Collecting pycryptodome
      Downloading pycryptodome-3.12.0-cp35-abi3-win_amd64.whl (1.8 MB)
         |████████████████████████████████| 1.8 MB 819 kB/s
    Installing collected packages: pycryptodome
    Successfully installed pycryptodome-3.12.0
    
    D:\video\WKS-KEYS>python l3.py
    Traceback (most recent call last):
      File "D:\video\WKS-KEYS\l3.py", line 9, in <module>
        from pywidevine.L3.cdm import cdm, deviceconfig
      File "D:\video\WKS-KEYS\pywidevine\L3\cdm\cdm.py", line 13, in <module>
        from Cryptodome.Random import get_random_bytes
    ModuleNotFoundError: No module named 'Cryptodome'
    Quote Quote  
  9. Originally Posted by mister_ nex View Post
    Error again
    Code:
    D:\video\WKS-KEYS>pip install pycryptodome
    Collecting pycryptodome
      Downloading pycryptodome-3.12.0-cp35-abi3-win_amd64.whl (1.8 MB)
         |████████████████████████████████| 1.8 MB 819 kB/s
    Installing collected packages: pycryptodome
    Successfully installed pycryptodome-3.12.0
    
    D:\video\WKS-KEYS>python l3.py
    Traceback (most recent call last):
      File "D:\video\WKS-KEYS\l3.py", line 9, in <module>
        from pywidevine.L3.cdm import cdm, deviceconfig
      File "D:\video\WKS-KEYS\pywidevine\L3\cdm\cdm.py", line 13, in <module>
        from Cryptodome.Random import get_random_bytes
    ModuleNotFoundError: No module named 'Cryptodome'
    pip install pyrcryptodomex

    and you shouldn't hijack threads like this
    Quote Quote  
  10. Originally Posted by [ss]vegeta View Post
    Originally Posted by oxoxen21 View Post
    THANK YOU VERY VERY MUCH.
    You are welcome sir. Hope your family member will recover and he'll enjoy this gift that you all are preparing.
    Thanks again for your your help the other day and for your kind words here.

    As you know, the getvwkeys site we were using to decrypt the content is down. I've been trying to follow the discussion in the threads it's being discussed in, but a lot of this stuff is pretty technical from my standpoint and I'm having a hard time following it.

    I hate to keep being a bother, but can you me in non-technical terms if there's an alternative way to get those keys? I've only been able to download a few of these episodes because the process is so complex (for me) and I've been waiting until I was back home to download the rest.

    I totally understand if there's no alternative way to do it right now, but if there is one and it's something I can grasp and do myself, can you point me in the right direction? Thanks in advance for any help you can give and for all your time.
    Quote Quote  
  11. Originally Posted by oxoxen21 View Post
    Thanks in advance for any help you can give and for all your time.
    Tell me the episodes you need keys from, I'll try to get you.
    Quote Quote  
  12. Originally Posted by [ss]vegeta View Post
    Originally Posted by oxoxen21 View Post
    Thanks in advance for any help you can give and for all your time.
    Tell me the episodes you need keys from, I'll try to get you.
    I'll send you a PM. THANK YOU SO MUCH.
    Quote Quote  
  13. Originally Posted by [ss]vegeta View Post
    http://getwvkeys.herokuapp.com/ you need this site for getting the keys so you can decrypt the encrypted content that you will download.

    Download these and put them in some folder (these are used for downloading, decrypting, merging video and audio)
    https://we.tl/t-ycGxRyGupw

    Download this add on
    https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en

    Copy the contents of this code:
    Code:
    // ==UserScript==
    // @name         EME Logger
    // @version      0.6
    // @match        *://*/*
    // @match        http://ss-cdn1.blim.com/
    // @run-at       document-start
    // @grant        none
    // ==/UserScript==
    
    (async () => {
        const indent = (s,n=4) => s.split('\n').map(l=>Array(n).fill(' ').join('')+l).join('\n');
    
        const b64 = {
            decode: s => Uint8Array.from(atob(s), c => c.charCodeAt(0)),
            encode: b => btoa(String.fromCharCode(...new Uint8Array(b)))
        };
    
        const fnproxy = (object, func) => new Proxy(object, { apply: func });
    
        const proxy = (object, key, func) => Object.defineProperty(object, key, {
            value: fnproxy(object[key], func)
        });
    
        proxy(Navigator.prototype, 'requestMediaKeySystemAccess', async (_target, _this, _args) => {
            const [keySystem, supportedConfigurations] = _args;
            console.groupCollapsed(
                `[EME] Navigator::requestMediaKeySystemAccess\n` +
                `    Key System: ${keySystem}\n` +
                `    Supported Configurations:\n` +
                indent(JSON.stringify(supportedConfigurations, null, '    '))
            );
            console.trace();
            console.groupEnd();
            return _target.apply(_this, _args);
        });
    
        proxy(MediaKeySystemAccess.prototype, 'createMediaKeys', async (_target, _this, _args) => {
            console.groupCollapsed(
                `[EME] MediaKeySystemAccess::createMediaKeys\n` +
                `    Key System: ${_this.keySystem}\n` +
                `    Configurations:\n` +
                indent(JSON.stringify(_this.getConfiguration(), null, '    '))
            );
            console.trace();
            console.groupEnd();
            return _target.apply(_this, _args);
        });
    
        proxy(MediaKeys.prototype, 'setServerCertificate', async (_target, _this, _args) => {
            const [serverCertificate] = _args;
            console.groupCollapsed(
                `[EME] MediaKeys::setServerCertificate\n` +
                `    Server Certificate: ${b64.encode(serverCertificate)}`
            );
            console.trace();
            console.groupEnd();
            return _target.apply(_this, _args);
        });
    
        function messageHandler(event) {
            const keySession = event.target;
            const {sessionId} = keySession;
            const {message, messageType} = event;
            const listeners = keySession.getEventListeners('message').filter(l => l !== messageHandler);
            console.groupCollapsed(
                `[EME] MediaKeySession::message\n` +
                `    Session ID: ${sessionId || '(not available)'}\n` +
                `    Message Type: ${messageType}\n` +
                `    Message: ${b64.encode(message)}` +
                '\n    Listeners:', listeners
            );
            console.trace();
            console.groupEnd();
        }
    
        function keystatuseschangeHandler(event) {
            const keySession = event.target;
            const {sessionId} = keySession;
            const listeners = keySession.getEventListeners('keystatuseschange').filter(l => l !== keystatuseschangeHandler);
            console.groupCollapsed(
                `[EME] MediaKeySession::keystatuseschange\n` +
                `    Session ID: ${sessionId || '(not available)'}\n` +
                Array.from(keySession.keyStatuses).map(([keyId, status]) =>
                                                       `    [${status.toUpperCase()}] ${b64.encode(keyId)}`
                                                      ).join('\n') +
                '\n    Listeners:', listeners
            );
            console.trace();
            console.groupEnd();
        }
    
        proxy(MediaKeys.prototype, 'createSession', (_target, _this, _args) => {
            const [sessionType] = _args;
            console.groupCollapsed(
                `[EME] MediaKeys::createSession\n` +
                `    Session Type: ${sessionType || 'temporary (default)'}`
            );
            console.trace();
            console.groupEnd();
            const session = _target.apply(_this, _args);
            session.addEventListener('message', messageHandler);
            session.addEventListener('keystatuseschange', keystatuseschangeHandler);
            return session;
        });
    
        function getEventListeners(type) {
            if (this == null) return [];
            const store = this[Symbol.for(getEventListeners)];
            if (store == null || store[type] == null) return [];
            return store[type];
        }
    
        EventTarget.prototype.getEventListeners = getEventListeners;
    
        proxy(EventTarget.prototype, 'addEventListener', async (_target, _this, _args) => {
            if (_this != null) {
                const [type, listener] = _args;
                const storeKey = Symbol.for(getEventListeners);
                if (!(storeKey in _this)) _this[storeKey] = {};
                const store = _this[storeKey];
                if (!(type in store)) store[type] = [];
                const listeners = store[type];
                if (listeners.indexOf(listener) < 0) {
                    listeners.push(listener);
                }
            }
            return _target.apply(_this, _args);
        });
    
        proxy(EventTarget.prototype, 'removeEventListener', async (_target, _this, _args) => {
            if (_this != null) {
                const [type, listener] = _args;
                const storeKey = Symbol.for(getEventListeners);
                if (!(storeKey in _this)) return;
                const store = _this[storeKey];
                if (!(type in store)) return;
                const listeners = store[type];
                const index = listeners.indexOf(listener);
                if (index >= 0) {
                    if (listeners.length === 1) {
                        delete store[type];
                    } else {
                        listeners.splice(index, 1);
                    }
                }
            }
            return _target.apply(_this, _args);
        });
    
        proxy(MediaKeySession.prototype, 'generateRequest', async (_target, _this, _args) => {
            const [initDataType, initData] = _args;
            console.groupCollapsed(
                `[EME] MediaKeySession::generateRequest\n` +
                `    Session ID: ${_this.sessionId || '(not available)'}\n` +
                `    Init Data Type: ${initDataType}\n` +
                `    Init Data: ${b64.encode(initData)}`
            );
            console.trace();
            console.groupEnd();
            return _target.apply(_this, _args);
        });
    
        proxy(MediaKeySession.prototype, 'load', async (_target, _this, _args) => {
            const [sessionId] = _args;
            console.groupCollapsed(
                `[EME] MediaKeySession::load\n` +
                `    Session ID: ${sessionId || '(not available)'}`
            );
            console.trace();
            console.groupEnd();
            return _target.apply(_this, _args);
        });
    
        proxy(MediaKeySession.prototype, 'update', async (_target, _this, _args) => {
            const [response] = _args;
            console.groupCollapsed(
                `[EME] MediaKeySession::update\n` +
                `    Session ID: ${_this.sessionId || '(not available)'}\n` +
                `    Response: ${b64.encode(response)}`
            );
            console.trace();
            console.groupEnd();
            return _target.apply(_this, _args);
        });
    
        proxy(MediaKeySession.prototype, 'close', async (_target, _this, _args) => {
            console.groupCollapsed(
                `[EME] MediaKeySession::close\n` +
                `    Session ID: ${_this.sessionId || '(not available)'}`
            );
            console.trace();
            console.groupEnd();
            return _target.apply(_this, _args);
        });
    
        proxy(MediaKeySession.prototype, 'remove', async (_target, _this, _args) => {
            console.groupCollapsed(
                `[EME] MediaKeySession::remove\n` +
                `    Session ID: ${_this.sessionId || '(not available)'}`
            );
            console.trace();
            console.groupEnd();
            return _target.apply(_this, _args);
        });
    })();
    and go to the add-on, click "Create New Script", paste the code there and click file -> save
    You need to do this so you can get the PSSH from console of browser, otherwise you won't have those codes in the console.

    The whole process is shown in the following video.
    Watch it closely, I might do some things that seem "fast" to you, so rewind, stop, watch, try, think, etc.
    https://streamable.com/umoszy

    Do let us now if you need help with anything.
    The first link is down for maintenence and the wetransfer file is expired. Could you reupload? Very curious to try this. Thank you.
    Quote Quote  
  14. Just followed the excellent instructions by [ss]vegeta, thanks so much for making them!

    For anyone reading beefyboygod's comment, don't worry. The getwvkeys site is back and working at getwvkeys.cc, and the wetransfer link with a toolkit helpfully provided is not needed, you can just get the tools from normal sources with no problem (shouldn't be any news for most users of this forum?):
    yt-dlp - https://github.com/yt-dlp/yt-dlp/releases
    ffmpeg - https://ffmpeg.org/download.html
    mp4decrypt - http://www.bento4.com/downloads/
    aria2 (optional!) - https://github.com/aria2/aria2/releases

    Thanks again to [ss]vegeta!!!
    Quote Quote  
  15. Originally Posted by knuff View Post
    Thanks again to [ss]vegeta!!!
    No problem. I updated the post with a drive link that shouldn't expire and I edited a short version of Eme logger that should display only the PSSH instead of all the other things.
    Quote Quote  
  16. Hey [ss]vegeta, thanks so much for this guide. I used it effectively on a new episode of Transplant here but was unable to download the rest of the season (getting unauthorized, 401 http errors), no matter what combination of logins for my paid Bell account I tried (with cookies-from-browser, with local cookies, with cookies and account login info, and just account login info). Any idea what the approach or syntax I should be using to get this right is?
    Thanks again
    Quote Quote  
  17. Originally Posted by Dexcainabel View Post
    Hey [ss]vegeta, thanks so much for this guide. I used it effectively on a new episode of Transplant here but was unable to download the rest of the season (getting unauthorized, 401 http errors), no matter what combination of logins for my paid Bell account I tried (with cookies-from-browser, with local cookies, with cookies and account login info, and just account login info). Any idea what the approach or syntax I should be using to get this right is?
    Thanks again
    No idea. Maybe some header/user agent?
    Also, it's weird. If I open that link directly, it lets me watch.
    However, when I try to go to it by navigating through the site, it requires login.
    Send user/pass via private message so I can see what's happening.
    Quote Quote  
  18. Watch out for copywrite infringements
    Quote Quote  
  19. youtube-dl -f bestvideo https://capi.9c9media.com/destinations/ctv_hub/platforms/desktop/bond/contents/2333926...5/manifest.mpd
    [generic] manifest: Requesting header
    WARNING: Falling back on generic information extractor.
    [generic] manifest: Downloading webpage
    [generic] manifest: Extracting information
    [dashsegments] Total fragments: 653
    [download] Destination: manifest-manifest.mp4
    [download] 1.6% of ~997.67MiB at 674.65KiB/s ETA 26:35 ...

    VPN.
    Quote Quote  
  20. i tried to the do the mp4decrypt on my mac but i kept getting an error it works when i do it on my mac its in the folder Image
    [Attachment 63528 - Click to enlarge]
    i was able to do it perfectly fine on my pc
    Last edited by nammin; 24th Feb 2022 at 01:21.
    Quote Quote  
  21. Hey there, on getwvkeys.cc, I only get one key "1. 5dd......"
    Some ideas?
    Thanks!


    Edit: it looks like, that there is no key for audo decryption
    Last edited by Bauer4FSV; 24th Feb 2022 at 07:34. Reason: more information
    Quote Quote  
  22. Originally Posted by Bauer4FSV View Post
    Hey there, on getwvkeys.cc, I only get one key "1. 5dd......"
    Some ideas?
    Thanks!


    Edit: it looks like, that there is no key for audo decryption
    One pair of kid/key might mean that it's for both video and audio, if they are both encrypted.
    Or, you might need a different PSSH for getting audio decryption keys. I think this happened to me one time.
    Quote Quote  
  23. Originally Posted by [ss]vegeta View Post

    One pair of kid/key might mean that it's for both video and audio, if they are both encrypted.
    Or, you might need a different PSSH for getting audio decryption keys. I think this happened to me one time.
    That's it.
    Thank you so much!
    Stay healthy
    Quote Quote  
  24. Hello.
    I did everything as written here.

    Received PSSH: AAAC4nBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAsLCAgAAAQ ABALgCPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9 ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAG MAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAA NwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQ ByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAw ACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAE YATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwA RQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQ BMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ ADwASwBJAEQAPgBPAEEAZABsADUAVwBOADYARQAwADIAMQAxAE 0AYwBmAFkAZQBPAC8AMABnAD0APQA8AC8ASwBJAEQAPgA8AEMA SABFAEMASwBTAFUATQA+AGcAaQB4AHAAWgBzAHoANQBTADIAYw A9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBM AD4AaAB0AHQAcABzADoALwAvAGwAaQBjAC4AZAByAG0AdABvAG QAYQB5AC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC0AcAByAG8A eAB5AC0AaABlAGEAZABlAHIAYQB1AHQAaAAvAGQAcgBtAHQAbw BkAGEAeQAvAFIAaQBnAGgAdABzAE0AYQBuAGEAZwBlAHIALgBh AHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwALwBEAEEAVABBAD 4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4AAAAAXHBzc2gAAAAA 7e+LqXnWSs6jyCfc1R0h7QAAADwIARIQ5WUHOHpjTRO11McfYe O/0hoIdXNwLWNlbmMiGDVXVUhPSHBqVFJPMTFNY2ZZZU8vMGc9PS oAMgA=

    It seems to me that it turned out to be a very long PSSH

    I went to the site http://getwvkeys.cc/.

    But it gives me an error:
    Error 404: <!doctype html><html lang="ru"><head><title>HTTP Status 412 – Precondition Failed</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 412 – Precondition Failed</h1></body></html>
    Quote Quote  
  25. I received such a PSSH: AAAAXHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADwIARIQ5W UHOHpjTRO11McfYeO/0hoIdXNwLWNlbmMiGDVXVUhPSHBqVFJPMTFNY2ZZZU8vMGc9PS oAMgA=
    And gives me three keys:

    fe2534d980f35f77a783ec58bfbd0b61:e0d97a69277d6a1ba 4555c9f9939c67f
    133a14ebdac4522b95422338343b17e5:3552232d37902f6ab 9bcbdec037b27e6
    501b768ee58b599095c401c1e319da56:bb43c479e7130ed99 c52afb5288da5a3

    Image
    [Attachment 63569 - Click to enlarge]


    I've tried using them one by one, but it doesn't work.
    Quote Quote  
  26. anyone can help me?
    Quote Quote  
  27. Originally Posted by contello View Post
    anyone can help me?
    Untick the cache box and try again
    Quote Quote  
  28. you have try to decrypt with all keys?

    Code:
    mp4decrypt --key xx:xx --key xx:xx --key xx:xx <input> <output>
    or maybe wrong key ...
    Last edited by lomero; 27th Feb 2022 at 11:20.
    Quote Quote  
  29. Thanks. It turned out that I entered the Headers incorrectly.
    Now i can decrypt the video
    Quote Quote  



Similar Threads

Visit our sponsor! Try DVDFab and backup Blu-rays!