VideoHelp Forum


Try StreamFab Downloader and download from Netflix, Amazon, Youtube! Or Try DVDFab and copy Blu-rays! or rip iTunes movies!


Try StreamFab Downloader and download streaming video from Youtube, Netflix, Amazon! Download free trial.


+ Reply to Thread
Results 1 to 9 of 9
Thread
  1. Hello,

    How can i get decryption key from License Response

    MPD:
    Code:
     <?xml version="1.0" encoding="UTF-8"?>
    <MPD xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" mediaPresentationDuration="PT52M11.361S" minBufferTime="PT2.000S">
      <BaseURL>https://vod.njpwworld.com/media/v1/dash/live/cenc/6415643985001/a1b08073-4a55-4e85-9ef5-2d7ba3907c7a/15583899-0dc9-4ac9-8d34-99e905fe4fe0/</BaseURL>
      <Period>
        <AdaptationSet mimeType="audio/mp4" startWithSAP="1" segmentAlignment="true" lang="ja">
          <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" xmlns:cenc="urn:mpeg:cenc:2013" cenc:default_KID="15583899-0dc9-4ac9-8d34-99e905fe4fe0" value="cenc"></ContentProtection>
          <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" xmlns:cenc="urn:mpeg:cenc:2013" bc:licenseAcquisitionUrl="https://manifest.prod.boltdns.net/license/v1/cenc/widevine/6415643985001/a1b08073-4a55-4e85-9ef5-2d7ba3907c7a/15583899-0dc9-4ac9-8d34-99e905fe4fe0?fastly_token=NjY4NDcxNmFfYWI3MjA4MGE3YzRiNDZhZmRkNGQwOTQyZmZhOTdjZDEwYWM0MzY4MWI5YjQxNzRhZDQ4YWE3MTBjNmUzNjhlZA%3D%3D" xmlns:bc="urn:brightcove:2015">
            <cenc:pssh>AAAAVnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADYIARIQFVg4mQ3JSsmNNJnpBf5P4BoNd2lkZXZpbmVfdGVzdCIIMTIzNDU2NzgyB2RlZmF1bHQ=</cenc:pssh>
          </ContentProtection>
          <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" xmlns:cenc="urn:mpeg:cenc:2013" xmlns:mspr="urn:microsoft:playready">
            <mspr:pro>OgQAAAEAAQAwBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AbQBUAGgAWQBGAGMAawBOAHkAVQBxAE4ATgBKAG4AcABCAGYANQBQADQAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBZAGcAQgBOAHIAMABjADQAZQBnAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBtAGEAbgBpAGYAZQBzAHQALgBwAHIAbwBkAC4AYgBvAGwAdABkAG4AcwAuAG4AZQB0AC8AbABpAGMAZQBuAHMAZQAvAHYAMQAvAGMAZQBuAGMALwBwAGwAYQB5AHIAZQBhAGQAeQAvADYANAAxADUANgA0ADMAOQA4ADUAMAAwADEALwBhADEAYgAwADgAMAA3ADMALQA0AGEANQA1AC0ANABlADgANQAtADkAZQBmADUALQAyAGQANwBiAGEAMwA5ADAANwBjADcAYQAvADEANQA1ADgAMwA4ADkAOQAtADAAZABjADkALQA0AGEAYwA5AC0AOABkADMANAAtADkAOQBlADkAMAA1AGYAZQA0AGYAZQAwAD8AZgBhAHMAdABsAHkAXwB0AG8AawBlAG4APQBOAGoAWQA0AE4ARABjAHgATgBtAEYAZgBOAFQAbABsAE0ARABFADAATQBEAFYAbABaAG0ARgBpAFkAagBFADEATwBHAEkAMQBPAEQAQQB4AE0AegBRAHoATgB6AE0AeQBaAG0AVQAyAFoARABCAGoATQBXAEkAMABPAFQAVQB5AFkAegBRADEAWgBXAFkAdwBNAHoAVQAwAE0AegBOAGsATQBtAEkAMQBOAFQAYwB4AFoARABKAGsAWQB6AEUAegBNAEEAJQAzAEQAJQAzAEQAPAAvAEwAQQBfAFUAUgBMAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</mspr:pro>
            <cenc:pssh>AAAEWnBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABDo6BAAAAQABADAEPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBtAFQAaABZAEYAYwBrAE4AeQBVAHEATgBOAEoAbgBwAEIAZgA1AFAANABBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AFkAZwBCAE4AcgAwAGMANABlAGcASQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAG0AYQBuAGkAZgBlAHMAdAAuAHAAcgBvAGQALgBiAG8AbAB0AGQAbgBzAC4AbgBlAHQALwBsAGkAYwBlAG4AcwBlAC8AdgAxAC8AYwBlAG4AYwAvAHAAbABhAHkAcgBlAGEAZAB5AC8ANgA0ADEANQA2ADQAMwA5ADgANQAwADAAMQAvAGEAMQBiADAAOAAwADcAMwAtADQAYQA1ADUALQA0AGUAOAA1AC0AOQBlAGYANQAtADIAZAA3AGIAYQAzADkAMAA3AGMANwBhAC8AMQA1ADUAOAAzADgAOQA5AC0AMABkAGMAOQAtADQAYQBjADkALQA4AGQAMwA0AC0AOQA5AGUAOQAwADUAZgBlADQAZgBlADAAPwBmAGEAcwB0AGwAeQBfAHQAbwBrAGUAbgA9AE4AagBZADQATgBEAGMAeABOAG0ARgBmAE4AVABsAGwATQBEAEUAMABNAEQAVgBsAFoAbQBGAGkAWQBqAEUAMQBPAEcASQAxAE8ARABBAHgATQB6AFEAegBOAHoATQB5AFoAbQBVADIAWgBEAEIAagBNAFcASQAwAE8AVABVAHkAWQB6AFEAMQBaAFcAWQB3AE0AegBVADAATQB6AE4AawBNAG0ASQAxAE4AVABjAHgAWgBEAEoAawBZAHoARQB6AE0AQQAlADMARAAlADMARAA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</cenc:pssh>
          </ContentProtection>
          <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
          <SegmentTemplate duration="285696" initialization="$RepresentationID$/init.m4f?" media="$RepresentationID$/3x/segment$Number$.m4f?" startNumber="0" timescale="48000"></SegmentTemplate>
          <Representation audioSamplingRate="48000" bandwidth="64000" codecs="mp4a.40.2" id="6481eb29-dec5-4f27-874d-437bc6ae2312"></Representation>
          <Representation audioSamplingRate="48000" bandwidth="96000" codecs="mp4a.40.2" id="e5879a72-13d7-4e54-ab9a-0e707f12539f"></Representation>
          <Representation audioSamplingRate="48000" bandwidth="127000" codecs="mp4a.40.2" id="4e8cab26-c89b-4dfb-863c-4751151b1371"></Representation>
          <Representation audioSamplingRate="48000" bandwidth="167000" codecs="mp4a.40.2" id="2552d4dc-3503-4495-b361-e7cf42383257"></Representation>
        </AdaptationSet>
        <AdaptationSet mimeType="video/mp4" startWithSAP="1" scanType="progressive" segmentAlignment="true">
          <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" xmlns:cenc="urn:mpeg:cenc:2013" cenc:default_KID="15583899-0dc9-4ac9-8d34-99e905fe4fe0" value="cenc"></ContentProtection>
          <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" xmlns:cenc="urn:mpeg:cenc:2013" bc:licenseAcquisitionUrl="https://manifest.prod.boltdns.net/license/v1/cenc/widevine/6415643985001/a1b08073-4a55-4e85-9ef5-2d7ba3907c7a/15583899-0dc9-4ac9-8d34-99e905fe4fe0?fastly_token=NjY4NDcxNmFfYWI3MjA4MGE3YzRiNDZhZmRkNGQwOTQyZmZhOTdjZDEwYWM0MzY4MWI5YjQxNzRhZDQ4YWE3MTBjNmUzNjhlZA%3D%3D" xmlns:bc="urn:brightcove:2015">
            <cenc:pssh>AAAAVnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADYIARIQFVg4mQ3JSsmNNJnpBf5P4BoNd2lkZXZpbmVfdGVzdCIIMTIzNDU2NzgyB2RlZmF1bHQ=</cenc:pssh>
          </ContentProtection>
          <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" xmlns:cenc="urn:mpeg:cenc:2013" xmlns:mspr="urn:microsoft:playready">
            <mspr:pro>OgQAAAEAAQAwBDwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AbQBUAGgAWQBGAGMAawBOAHkAVQBxAE4ATgBKAG4AcABCAGYANQBQADQAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBZAGcAQgBOAHIAMABjADQAZQBnAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBtAGEAbgBpAGYAZQBzAHQALgBwAHIAbwBkAC4AYgBvAGwAdABkAG4AcwAuAG4AZQB0AC8AbABpAGMAZQBuAHMAZQAvAHYAMQAvAGMAZQBuAGMALwBwAGwAYQB5AHIAZQBhAGQAeQAvADYANAAxADUANgA0ADMAOQA4ADUAMAAwADEALwBhADEAYgAwADgAMAA3ADMALQA0AGEANQA1AC0ANABlADgANQAtADkAZQBmADUALQAyAGQANwBiAGEAMwA5ADAANwBjADcAYQAvADEANQA1ADgAMwA4ADkAOQAtADAAZABjADkALQA0AGEAYwA5AC0AOABkADMANAAtADkAOQBlADkAMAA1AGYAZQA0AGYAZQAwAD8AZgBhAHMAdABsAHkAXwB0AG8AawBlAG4APQBOAGoAWQA0AE4ARABjAHgATgBtAEYAZgBOAFQAbABsAE0ARABFADAATQBEAFYAbABaAG0ARgBpAFkAagBFADEATwBHAEkAMQBPAEQAQQB4AE0AegBRAHoATgB6AE0AeQBaAG0AVQAyAFoARABCAGoATQBXAEkAMABPAFQAVQB5AFkAegBRADEAWgBXAFkAdwBNAHoAVQAwAE0AegBOAGsATQBtAEkAMQBOAFQAYwB4AFoARABKAGsAWQB6AEUAegBNAEEAJQAzAEQAJQAzAEQAPAAvAEwAQQBfAFUAUgBMAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</mspr:pro>
            <cenc:pssh>AAAEWnBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAABDo6BAAAAQABADAEPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBtAFQAaABZAEYAYwBrAE4AeQBVAHEATgBOAEoAbgBwAEIAZgA1AFAANABBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AFkAZwBCAE4AcgAwAGMANABlAGcASQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAG0AYQBuAGkAZgBlAHMAdAAuAHAAcgBvAGQALgBiAG8AbAB0AGQAbgBzAC4AbgBlAHQALwBsAGkAYwBlAG4AcwBlAC8AdgAxAC8AYwBlAG4AYwAvAHAAbABhAHkAcgBlAGEAZAB5AC8ANgA0ADEANQA2ADQAMwA5ADgANQAwADAAMQAvAGEAMQBiADAAOAAwADcAMwAtADQAYQA1ADUALQA0AGUAOAA1AC0AOQBlAGYANQAtADIAZAA3AGIAYQAzADkAMAA3AGMANwBhAC8AMQA1ADUAOAAzADgAOQA5AC0AMABkAGMAOQAtADQAYQBjADkALQA4AGQAMwA0AC0AOQA5AGUAOQAwADUAZgBlADQAZgBlADAAPwBmAGEAcwB0AGwAeQBfAHQAbwBrAGUAbgA9AE4AagBZADQATgBEAGMAeABOAG0ARgBmAE4AVABsAGwATQBEAEUAMABNAEQAVgBsAFoAbQBGAGkAWQBqAEUAMQBPAEcASQAxAE8ARABBAHgATQB6AFEAegBOAHoATQB5AFoAbQBVADIAWgBEAEIAagBNAFcASQAwAE8AVABVAHkAWQB6AFEAMQBaAFcAWQB3AE0AegBVADAATQB6AE4AawBNAG0ASQAxAE4AVABjAHgAWgBEAEoAawBZAHoARQB6AE0AQQAlADMARAAlADMARAA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</cenc:pssh>
          </ContentProtection>
          <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"></Role>
          <SegmentTemplate duration="180180" initialization="$RepresentationID$/init.m4f?" media="$RepresentationID$/3x/segment$Number$.m4f?" startNumber="0" timescale="30000"></SegmentTemplate>
          <Representation bandwidth="249000" codecs="avc1.42001e" frameRate="2997/100" height="360" id="7fe32cb2-4901-4fc8-85d0-5e1a14105030" width="640"></Representation>
          <Representation bandwidth="582000" codecs="avc1.4d001f" frameRate="2997/100" height="576" id="85bd82c8-9046-4ab2-98eb-4379dd41542a" width="1024"></Representation>
          <Representation bandwidth="1636000" codecs="avc1.640028" frameRate="2997/100" height="900" id="3668c4d2-8956-465d-b36d-1ef76d88cb09" width="1600"></Representation>
          <Representation bandwidth="2968000" codecs="avc1.640028" frameRate="2997/100" height="1080" id="ab7bf86b-4748-494c-b14f-63438f440ae2" width="1920"></Representation>
        </AdaptationSet>
        <AdaptationSet mimeType="text/vtt" lang="en" label="字幕 / caption">
          <Representation bandwidth="256" id="8ef4509d-3447-4475-97f7-0a602b7521c2">
            <BaseURL>https://vod.njpwworld.com/media/v1/dash/live/clear/6415643985001/a1b08073-4a55-4e85-9ef5-2d7ba3907c7a/8ef4509d-3447-4475-97f7-0a602b7521c2.vtt</BaseURL>
          </Representation>
        </AdaptationSet>
      </Period>
    </MPD>

    KID:
    Code:
    155838990dc94ac98d3499e905fe4fe0
    License Response:
    Code:
      CAISkAIKSgoQjIn4yYIN3JzjQCiVuP9WyxImChCMifjJgg3cnONAKJW4/1bLEAEyEDpWYnQ1/KD+H/r5o7xPE/AaACABKAA4AEAASOyfj7QGEgwIARAAGAAgACgAYAEaVhIQEB61hxY1MAitcfcTtufM/hpApaC5fYzdhPr0gVbP/0aZ1Sen3wjvlPchTvw+qUQr2QFFO+iHe37LggYToIuQopCb1Up3HYhjeaEbM8wslxEb9SABGlIKEBVYOJkNyUrJjTSZ6QX+T+ASEHLiCiCBa0fOXSYAV9WImNQaEDANBF9P0VO4IsUvoYFBZNUgAigBQhIKEGtjMTYAAAAAhROaYIAAAAhiAkhEIOyfj7QGOABQAhogDoHHcajghik/V3wh9zMsF5xg6bnAbDEa2DaYXxnYHYkigAGGFHauJQoEIyRX9FzfyA39vU9JL1JqjicMgyE0guuJ0mz51Jhg9vQDqQRH002snnpgk57l1AZ4DP+Yq3IKUZ4v24gaL4KgCUygiiwL67J/lQ+RR5tQ3yrBpd6mV9+pAZZ+PwhLcR2MpRMn6L/jD2LGXmku6hhdHWiNRwyH3hsGKToyCjAxOS4wLjUgQnVpbHQgb24gSnVuIDUgMjAyNCAxNToxMzozOCAoMTcxNzYyNTYxOClAAUqwAQAAAAIAAACwAAUAEIUTmmDTYHihAAAAXgAAABAAAABwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAtgAAABAAAADIAAAAEAAAANoAAAAQAAAAAAAAAAAAAADyAAAAEKmsIn1FjJxl467F7FmHJLc3g0H4LT2ZMWJ9e3XhdODmWAE=

    Original video link: https://watch.njpwworld.com/player/43782/series?assetType=series
    Last edited by doughnuts; 2nd Jul 2024 at 10:47.
    Quote Quote  
  2. Standard widevine license request as described in length in the stickies. You really should read them if you are interested in how to get the keys:

    Code:
    155838990dc94ac98d3499e905fe4fe0:f6c272cd145a75d05321b206ce18bc98
    Quote Quote  
  3. Member aqzs's Avatar
    Join Date
    Mar 2024
    Location
    Paris
    Search Comp PM
    I have made this script :
    HTML Code:
    import requests
    from pprint import pprint
    import xml.etree.ElementTree as ET
    from pywidevine.cdm import Cdm
    from pywidevine.device import Device
    from pywidevine.pssh import PSSH
    
    def getpssh(url_mpd):
        psshs = []
        response = requests.get(url_mpd)
        root = ET.fromstring(response.content)
        for i in range(20):
            for j in range(20):
                for k in range(20):
                    for l in range(20):
                        try:
                            if root[i][j][k][l].text not in psshs and len(root[i][j][k][l].text) > 70 and len(root[i][j][k][l].text) < 190:
                                psshs.append(root[i][j][k][l].text)
                        except:
                            pass
        for pssh in psshs:
            return pssh
        
    def getkeys(pssh,lic_url):
        pssh = PSSH(pssh)
        device = Device.load(DEVICEPATH)
        cdm = Cdm.from_device(device)
        session_id = cdm.open()
        challenge = cdm.get_license_challenge(session_id, pssh)
        licence = requests.post(lic_url, data=challenge)
        licence.raise_for_status()
        cdm.parse_license(session_id, licence.content)
        keys = []
        for key in cdm.get_keys(session_id):
            if key.type=='CONTENT':
                keys.append(f"{key.kid.hex}:{key.key.hex()}")
        cdm.close(session_id)
        return keys
    
    def getcmd(id):
        params = (('device_type', 'web'),('duid', '16affe5e-270f-44c6-bc65-367b8e518d16'))
        data = requests.post('https://beacon.playback.api.brightcove.com/tvasahi/api/account/anonymous_login', params=params).json()
        auth_token = data['auth_token']
        account_token = data['account_token']
    
        headers = {'authorization': f'Bearer {auth_token}'}
        params = (('device_type', 'web'),('ngsw-bypass', '1'))
        data = requests.get(f'https://beacon.playback.api.brightcove.com/tvasahi/api/account/{account_token}/asset_info/{id}', headers=headers, params=params).json()
        streamid = data['data']['video_playback_details'][-1]['stream_id']
    
        params = (('cohort', '98'),('device_type', 'web'),('device_layout', 'web'))
        data = requests.post(f'https://beacon.playback.api.brightcove.com/tvasahi/api/assets/{id}/streams/{streamid}', headers=headers, params=params).json()
        policy_key = data['data']['stream']['video_provider_details']['policy_key']
        account_id = data['data']['stream']['video_provider_details']['account_id']
        videoid = data['data']['stream']['url']
        name = data['data']['stream']['name']
    
        headers = {'accept': f'application/json;pk={policy_key}',}
        data = requests.get(f'https://edge.api.brightcove.com/playback/v1/accounts/{account_id}/videos/{videoid}', headers=headers).json()
        for source in data['sources']:
            keyssys = source.get('key_systems').get('com.widevine.alpha')
            base_mpd_url = source['src']
            if keyssys:
                mpd_url = base_mpd_url
                lic_url = keyssys['license_url']
    
        pssh = getpssh(mpd_url)
        keys = getkeys(pssh,lic_url)
        print(f"""N_m3u8DL-RE "{mpd_url}" --save-name "{name}" --select-video best --select-audio all --select-subtitle all -mt -M format=mkv  --log-level OFF --key """ + ' --key '.join(keys))
    
    DEVICEPATH = "device.wvd"
    videourl = input('Enter the video url: ')
    # videourl = 'https://watch.njpwworld.com/player/43782/series?assetType=series'
    id = videourl.split('/')[-2]
    getcmd(id)
    HTML Code:
    Enter the video url: https://watch.njpwworld.com/player/43782/series?assetType=series
    N_m3u8DL-RE "https://manifest.prod.boltdns.net/manifest/v1/dash/live-baseurl/bccenc/6415643985001/a1b08073-4a55-4e85-9ef5-2d7ba3907c7a/6s/manifest.mpd?fastly_token=NjY4NDRlZTRfZWMxNDU5MDQxODFhOWQ1OTMxZTU4MjlmNzM0OTU2ZjlkOWU5N2IzMmY5NjYzYzA3MDVjMDhhZTc1MGViOGU2MA%3D%3D" --save-name "Press Conference (with Subtitles) | 6/16/2024 NEW JAPAN SOUL 2023" --select-video best --select-audio all --select-subtitle all -mt -M format=mkv  --log-level OFF --key 155838990dc94ac98d3499e905fe4fe0:f6c272cd145a75d05321b206ce18bc98
    Quote Quote  
  4. Originally Posted by aqzs View Post
    I have made this script :
    [HTML]import requests
    from pprint import pprint
    import xml.etree.ElementTree as ET
    from pywidevine.cdm import Cdm
    from pywidevine.device import Device
    from pywidevine.pssh import PSSH

    def getpssh(url_mpd):
    psshs = []
    response = requests.get(url_mpd)
    root = ET.fromstring(response.content)
    for i in range(20):
    for j in range(20):
    for k in range(20):
    for l in range(20):
    try:
    if root[i][j][k][l].text not in psshs and len(root[i][j][k][l].text) > 70 and len(root[i][j][k][l].text) < 190:
    psshs.append(root[i][j][k][l].text)
    except:....
    I want to know how this decryption works. I have some leads PSSH + License Response = Decryption Key. I don't know how to extract the key from these. Please don't point me to some website that generates the key using PSSH and License server URL. I want to understand how it works. Thanks for your time.
    Quote Quote  
  5. Member aqzs's Avatar
    Join Date
    Mar 2024
    Location
    Paris
    Search Comp PM
    Run that script and add some print() where you don't figure out which part is the one you are looking for.
    HTML Code:
    pssh = getpssh(mpd_url) -> pssh is extracted from mpd
    keys = getkeys(pssh,lic_url) -> key is obtain with pssh and license url that come from this request : data = requests.get(f'https://edge.api.brightcove.com/playback/v1/accounts/{account_id}/videos/{videoid}', headers=headers).json()
    Quote Quote  
  6. Either use the CDRM project, etc.
    or use a CDM with pywidevine
    Quote Quote  
  7. Originally Posted by doughnuts View Post
    I want to know how this decryption works. I have some leads PSSH + License Response = Decryption Key. I don't know how to extract the key from these. Please don't point me to some website that generates the key using PSSH and License server URL. I want to understand how it works. Thanks for your time.
    But that's exactly how it works. Your browser/app/... generates a license request (the "challenge") with the PSSH (which contains the key id), signed with a local CDM (which you usually are not supposed to have access to). The license server validates the signature, and if valid replies with the license response. The reponse again is encrypted by the certificate from your local CDM and contains the keys. As you are not supposed to have access to the local CDM (at least not the CDM that your browser uses), you simply cannot decrypt the response.

    This is where the extracted CDM's come into play: your script can generate a challenge for a license request, and the response for this request can be decrypted. This is basically asymmetric cryptography.

    The practical details are explained in the stickies series by A_n_g_e_l_a - please take a look at these threads.
    Quote Quote  
  8. Originally Posted by aqzs View Post
    Run that script and add some print() where you don't figure out which part is the one you are looking for.
    HTML Code:
    pssh = getpssh(mpd_url) -> pssh is extracted from mpd
    keys = getkeys(pssh,lic_url) -> key is obtain with pssh and license url that come from this request : data = requests.get(f'https://edge.api.brightcove.com/playback/v1/accounts/{account_id}/videos/{videoid}', headers=headers).json()
    Getting error. Maybe Widevine was updated?

    Code:
    AAAAVnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADYIARIQFVg4mQ3JSsmNNJnpBf5P4BoNd2lkZXZpbmVfdGVzdCIIMTIzNDU2NzgyB2RlZmF1bHQ=
    https://manifest.prod.boltdns.net/license/v1/cenc/widevine/6415643985001/a1b08073-4a55-4e85-9ef5-2d7ba3907c7a/15583899-0dc9-4ac9-8d34-99e905fe4fe0?fastly_token=NjY4NGY2MDVfYTJkMjNiMDYzZDk4ZDVmYTI5NWQ5ZmNhM2EzYjI1MWMyNjlkNTY4ZTY4MjY5OTJkZDJhNmI4MjMzMGE4MDM0Ng%3D%3D
    Failed to load Widevine CDM: expected b'WVD' but parsed b'MZx'
        parsing -> signature
    N_m3u8DL-RE "https://manifest.prod.boltdns.net/manifest/v1/dash/live-baseurl/bccenc/6415643985001/a1b08073-4a55-4e85-9ef5-2d7ba3907c7a/6s/manifest.mpd?fastly_token=NjY4NGY2MDVfMWJmZWExZjQ1MDVjZjBlODhlNTJiMGRhY2JiYmEyYmI0ZWU4OWY2MTY2YzlmYzFhYTRkYWMwOGI2NDRiMDlkMQ%3D%3D" --save-name "Press Conference (with Subtitles) | 6/16/2024 NEW JAPAN SOUL 2023" --select-video best --select-audio all --select-subtitle all -mt -M format=mkv  --log-level*OFF*--key
    Quote Quote  
  9. Originally Posted by Obo View Post
    Originally Posted by doughnuts View Post
    I want to know how this decryption works. I have some leads PSSH + License Response = Decryption Key. I don't know how to extract the key from these. Please don't point me to some website that generates the key using PSSH and License server URL. I want to understand how it works. Thanks for your time.
    But that's exactly how it works. Your browser/app/... generates a license request (the "challenge") with the PSSH (which contains the key id), signed with a local CDM (which you usually are not supposed to have access to). The license server validates the signature, and if valid replies with the license response. The reponse again is encrypted by the certificate from your local CDM and contains the keys. As you are not supposed to have access to the local CDM (at least not the CDM that your browser uses), you simply cannot decrypt the response.

    This is where the extracted CDM's come into play: your script can generate a challenge for a license request, and the response for this request can be decrypted. This is basically asymmetric cryptography.

    The practical details are explained in the stickies series by A_n_g_e_l_a - please take a look at these threads.

    Thanks, I will look into it
    Quote Quote  



Similar Threads

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