inputstream.adaptive icon indicating copy to clipboard operation
inputstream.adaptive copied to clipboard

[OQEE] - Decrypt failed with error: 2 and key: 00000000000000000000000000000000

Open Nitorac opened this issue 8 months ago • 6 comments

Bug report

Describe the bug

Here is a clear and concise description of what the problem is:

Disclaimer: I'm kinda new to all of this Widevine madness, I could possibly miss something.

I'm trying to support a French TV provider (OQEE from Free (a French ISP)).

The stream starts on Kodi but I have what seems a failed decryption (green artifacts, unusable image, no sound). The logs are mentionning failed decryption. It seems that the license_key I provide is correct (no more complaining in logs about an invalid response).

Here is my test addon that starts the stream:

listitem = xbmcgui.ListItem(path='https://api-proxad.dc2.oqee.net/playlist/v1/live/201/1/live.mpd', offscreen=True)

# These two lines are needed to prevent the HTTP HEAD request from Kodi core, used to determine the mimetype
listitem.setMimeType('application/dash+xml')
listitem.setContentLookup(False)

listitem.setProperty('inputstream', 'inputstream.adaptive')
listitem.setProperty('inputstream.adaptive.license_type', 'com.widevine.alpha')

license_headers = {
    'Content-Type': 'application/json',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0', #"web_utils.get_random_windows_ua(),
    'authorization': 'Bearer <REDACTED>',
    'Origin': 'https://oqee.tv',
    'Referer': 'https://oqee.tv',
    'Priority': 'u=4',
    'x-oqee-account-provider': 'free',
    'x-oqee-customization': 1,
    'x-oqee-platform': 'web',
    'x-oqee-profile': '<REDACTED>',
    'x-fbx-rights-token': '<REDACTED>',
}

from urllib.parse import urlencode
license_config = { 
    'license_server_url': "https://license.oqee.net/api/v1/live/license/widevine",
    'headers': urlencode(license_headers),
    'post_data': '%7B%22licenseRequest%22%3A%22b{SSM}%22%7D',
    'response_data': 'JBlicense;expiration'
}
listitem.setProperty('inputstream.adaptive.license_key', '|'.join(license_config.values()))


# Pass the item to the Kodi player.
xbmcplugin.setResolvedUrl(HANDLE, True, listitem=listitem)

Expected Behavior

Here is a clear and concise description of what was expected to happen:

The stream should display an unencrypted video data with sound.

Actual Behavior

The stream shows what seems to be an encrypted video stream.

Possible Fix

None that I have found (I tried to tweak around some things but always the same issue)

To Reproduce

Steps to reproduce the behavior:

Hard to reproduce because you should have my account credentials or tokens (if needed I can send them in PM but I don't know if it works outside France)

  1. Create a ListItem with the MPD URL of any channels OQEE provides
  2. Configure inputstream.adaptative license stuff as stated above in the bug description
  3. Start the addon and witness a greenny stuff

Debuglog

The debuglog can be found here: https://paste.kodi.tv/mayoceqotu.kodi

MPD/M3U8s/ISM

An example or copy of a manifest (or manifests for HLS - master and variants) can be found here:

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="dynamic" publishTime="2024-05-29T10:19:15Z" availabilityStartTime="1970-01-01T00:00:00Z" minimumUpdatePeriod="PT2S" minBufferTime="PT6.4S" timeShiftBufferDepth="PT14400S" suggestedPresentationDelay="PT9.6S">
	<UTCTiming schemeIdUri="urn:mpeg:dash:utc:http-iso:2014" value="https://time.akamai.com/?iso" />
	<Period id="0" start="PT0S">
		<AdaptationSet id="0" group="1" segmentAlignment="true" startWithSAP="1" contentType="video">
			<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"><cenc:pssh>AAAAiHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAGgIARIQocf9FUFCoGm775zPIBr3HRIQV1Z+z9RXSbgW1m2ubAU79BIQ/pKJ1nsD0fi3pXUMM+s6MxIQBUPt0jMQHBv88X604SEGTBIQUls9kMYGQ/Slzaq7eDsaJBoAKgAyADgASABQAA==</cenc:pssh></ContentProtection>
			<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="a1c7fd15-4142-a069-bbef-9ccf201af71d"/>
			<SupplementalProperty schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016" value="1,2,3"/>
			<Representation id="379" bandwidth="400000" codecs="avc1.64000d" mimeType="video/mp4" width="384" height="216" frameRate="25">
				<SegmentTemplate timescale="90000" initialization="https://media.stream.proxad.net/media/0_1_379_init" media="https://media.stream.proxad.net/media/0_1_379_$Time$">
					<SegmentTimeline>
						<S t="154526719082794" d="288000" r="4501"/>
					</SegmentTimeline>
				</SegmentTemplate>
			</Representation><Representation id="380" bandwidth="800000" codecs="avc1.64001e" mimeType="video/mp4" width="640" height="360" frameRate="25">
				<SegmentTemplate timescale="90000" initialization="https://media.stream.proxad.net/media/0_1_380_init" media="https://media.stream.proxad.net/media/0_1_380_$Time$">
					<SegmentTimeline>
						<S t="154526719082794" d="288000" r="4501"/>
					</SegmentTimeline>
				</SegmentTemplate>
			</Representation><Representation id="381" bandwidth="1600000" codecs="avc1.64001f" mimeType="video/mp4" width="896" height="504" frameRate="25">
				<SegmentTemplate timescale="90000" initialization="https://media.stream.proxad.net/media/0_1_381_init" media="https://media.stream.proxad.net/media/0_1_381_$Time$">
					<SegmentTimeline>
						<S t="154526719082794" d="288000" r="4501"/>
					</SegmentTimeline>
				</SegmentTemplate>
			</Representation><Representation id="3517" bandwidth="1600000" codecs="hvc1.1.2.L93" mimeType="video/mp4" width="896" height="504" frameRate="50">
				<SegmentTemplate timescale="90000" initialization="https://media.stream.proxad.net/media/0_1_3517_init" media="https://media.stream.proxad.net/media/0_1_3517_$Time$">
					<SegmentTimeline>
						<S t="154526719154794" d="288000" r="4501"/>
					</SegmentTimeline>
				</SegmentTemplate>
			</Representation>
		</AdaptationSet>
		<AdaptationSet id="1" group="1" segmentAlignment="true" startWithSAP="1" contentType="video">
			<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"><cenc:pssh>AAAAiHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAGgIARIQocf9FUFCoGm775zPIBr3HRIQV1Z+z9RXSbgW1m2ubAU79BIQ/pKJ1nsD0fi3pXUMM+s6MxIQBUPt0jMQHBv88X604SEGTBIQUls9kMYGQ/Slzaq7eDsaJBoAKgAyADgASABQAA==</cenc:pssh></ContentProtection>
			<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="0543edd2-3310-1c1b-fcf1-7eb4e121064c"/>
			<SupplementalProperty schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016" value="0,2,3"/>
			<Representation id="382" bandwidth="3000000" codecs="avc1.64001f" mimeType="video/mp4" width="1280" height="720" frameRate="25">
				<SegmentTemplate timescale="90000" initialization="https://media.stream.proxad.net/media/0_1_382_init" media="https://media.stream.proxad.net/media/0_1_382_$Time$">
					<SegmentTimeline>
						<S t="154526719082794" d="288000" r="4501"/>
					</SegmentTimeline>
				</SegmentTemplate>
			</Representation>
		</AdaptationSet>
		<AdaptationSet id="2" group="1" segmentAlignment="true" startWithSAP="1" contentType="video">
			<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"><cenc:pssh>AAAAiHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAGgIARIQocf9FUFCoGm775zPIBr3HRIQV1Z+z9RXSbgW1m2ubAU79BIQ/pKJ1nsD0fi3pXUMM+s6MxIQBUPt0jMQHBv88X604SEGTBIQUls9kMYGQ/Slzaq7eDsaJBoAKgAyADgASABQAA==</cenc:pssh></ContentProtection>
			<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="525b3d90-c606-43f4-a5cd-aabb783b1a24"/>
			<SupplementalProperty schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016" value="0,1,3"/>
			<Representation id="3518" bandwidth="4800000" codecs="hvc1.1.2.L123" mimeType="video/mp4" width="1920" height="1080" frameRate="50">
				<SegmentTemplate timescale="90000" initialization="https://media.stream.proxad.net/media/0_1_3518_init" media="https://media.stream.proxad.net/media/0_1_3518_$Time$">
					<SegmentTimeline>
						<S t="154526719154794" d="288000" r="4501"/>
					</SegmentTimeline>
				</SegmentTemplate>
			</Representation>
		</AdaptationSet>
		<AdaptationSet id="3" group="1" segmentAlignment="true" startWithSAP="1" contentType="video">
			<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"><cenc:pssh>AAAAiHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAGgIARIQocf9FUFCoGm775zPIBr3HRIQV1Z+z9RXSbgW1m2ubAU79BIQ/pKJ1nsD0fi3pXUMM+s6MxIQBUPt0jMQHBv88X604SEGTBIQUls9kMYGQ/Slzaq7eDsaJBoAKgAyADgASABQAA==</cenc:pssh></ContentProtection>
			<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="57567ecf-d457-49b8-16d6-6dae6c053bf4"/>
			<SupplementalProperty schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016" value="0,1,2"/>
			<Representation id="3519" bandwidth="14800000" codecs="hvc1.1.2.L123" mimeType="video/mp4" width="1920" height="1080" frameRate="50">
				<SegmentTemplate timescale="90000" initialization="https://media.stream.proxad.net/media/0_1_3519_init" media="https://media.stream.proxad.net/media/0_1_3519_$Time$">
					<SegmentTimeline>
						<S t="154526719154794" d="288000" r="4501"/>
					</SegmentTimeline>
				</SegmentTemplate>
			</Representation>
		</AdaptationSet>
		<AdaptationSet id="376" group="2" segmentAlignment="true" startWithSAP="1" contentType="audio" lang="fra">
			<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"><cenc:pssh>AAAAiHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAGgIARIQocf9FUFCoGm775zPIBr3HRIQV1Z+z9RXSbgW1m2ubAU79BIQ/pKJ1nsD0fi3pXUMM+s6MxIQBUPt0jMQHBv88X604SEGTBIQUls9kMYGQ/Slzaq7eDsaJBoAKgAyADgASABQAA==</cenc:pssh></ContentProtection>
			<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="fe9289d6-7b03-d1f8-b7a5-750c33eb3a33"/>
			<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
			<Representation id="376" bandwidth="64000" codecs="mp4a.40.2" mimeType="audio/mp4">
				<SegmentTemplate timescale="90000" initialization="https://media.stream.proxad.net/media/0_1_376_init" media="https://media.stream.proxad.net/media/0_1_376_$Time$">
					<SegmentTimeline>
						<S t="154526719105950" d="288000" r="4501"/>
					</SegmentTimeline>
				</SegmentTemplate>
			</Representation>
		</AdaptationSet>
		<AdaptationSet id="377" group="2" segmentAlignment="true" startWithSAP="1" contentType="audio" lang="und">
			<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"><cenc:pssh>AAAAiHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAGgIARIQocf9FUFCoGm775zPIBr3HRIQV1Z+z9RXSbgW1m2ubAU79BIQ/pKJ1nsD0fi3pXUMM+s6MxIQBUPt0jMQHBv88X604SEGTBIQUls9kMYGQ/Slzaq7eDsaJBoAKgAyADgASABQAA==</cenc:pssh></ContentProtection>
			<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="fe9289d6-7b03-d1f8-b7a5-750c33eb3a33"/>
			<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
			<Representation id="377" bandwidth="64000" codecs="mp4a.40.2" mimeType="audio/mp4">
				<SegmentTemplate timescale="90000" initialization="https://media.stream.proxad.net/media/0_1_377_init" media="https://media.stream.proxad.net/media/0_1_377_$Time$">
					<SegmentTimeline>
						<S t="154526719105950" d="288000" r="4502"/>
					</SegmentTimeline>
				</SegmentTemplate>
			</Representation>
		</AdaptationSet>
		<AdaptationSet id="455" group="3" segmentAlignment="true" startWithSAP="1" contentType="text" lang="fra">
			<Role schemeIdUri="urn:mpeg:dash:role:2011" value="caption"/>
			<Representation id="455" bandwidth="64000" codecs="stpp" mimeType="application/mp4">
				<SegmentTemplate timescale="90000" initialization="https://media.stream.proxad.net/media/0_1_455_init" media="https://media.stream.proxad.net/media/0_1_455_$Time$">
					<SegmentTimeline>
						<S t="154526719104000" d="288000" r="4501"/>
					</SegmentTimeline>
				</SegmentTemplate>
			</Representation>
		</AdaptationSet>
		<AdaptationSet id="461" group="3" segmentAlignment="true" startWithSAP="1" contentType="text" lang="fra">
			<Role schemeIdUri="urn:mpeg:dash:role:2011" value="subtitle"/>
			<Representation id="461" bandwidth="64000" codecs="stpp" mimeType="application/mp4">
				<SegmentTemplate timescale="90000" initialization="https://media.stream.proxad.net/media/0_1_461_init" media="https://media.stream.proxad.net/media/0_1_461_$Time$">
					<SegmentTimeline>
						<S t="154526719104000" d="288000" r="4501"/>
					</SegmentTimeline>
				</SegmentTemplate>
			</Representation>
		</AdaptationSet>
		<AdaptationSet id="463" group="2" segmentAlignment="true" startWithSAP="1" contentType="audio" lang="fra">
			<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"><cenc:pssh>AAAAiHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAGgIARIQocf9FUFCoGm775zPIBr3HRIQV1Z+z9RXSbgW1m2ubAU79BIQ/pKJ1nsD0fi3pXUMM+s6MxIQBUPt0jMQHBv88X604SEGTBIQUls9kMYGQ/Slzaq7eDsaJBoAKgAyADgASABQAA==</cenc:pssh></ContentProtection>
			<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="fe9289d6-7b03-d1f8-b7a5-750c33eb3a33"/>
			<Role schemeIdUri="urn:mpeg:dash:role:2011" value="description"/>
			<Representation id="463" bandwidth="64000" codecs="mp4a.40.2" mimeType="audio/mp4">
				<SegmentTemplate timescale="90000" initialization="https://media.stream.proxad.net/media/0_1_463_init" media="https://media.stream.proxad.net/media/0_1_463_$Time$">
					<SegmentTimeline>
						<S t="154526719105950" d="288000" r="4502"/>
					</SegmentTimeline>
				</SegmentTemplate>
			</Representation>
		</AdaptationSet>
	</Period>
</MPD>

Screenshots

Here are some links or screenshots to help explain the problem:

A screenshot of the resulting playing stream: image

Additional context or screenshots (if appropriate)

Here is some additional context or explanation that might help:

Your Environment

Used Operating system:

  • [ ] Android

  • [ ] iOS

  • [ ] tvOS

  • [x] Linux (LibreELEC 12.0.0 on RPi4.aarch64)

  • [ ] OSX

  • [x] Windows

  • [ ] Windows UWP

  • Operating system version/name:

  • Kodi version: 21.0.0

  • inputstream.adaptive version: 21.4.9

note: Once the issue is made we require you to update it with new information should that be required. Team Kodi will consider your problem report however, we will not make any promises the problem will be solved.

Nitorac avatar May 29 '24 10:05 Nitorac