Skip to content

[Webos] Fails to play multikey PlayReady stream with singleLicensePer: "content" setting #1759

@TomaszKowalik

Description

@TomaszKowalik

As stated in the title, for some reason WebOS is unable to stream multi-key content. When I remove the singleLicensePer: "content" setting, it plays the PlayReady stream correctly. When I switch to Widevine and keep the singleLicensePer: "content" setting, it also plays correctly. The server is configured to include multiple keys in the license response. Perhaps Im missing something ? Tizen works fine with that setup.
It immediately throws the NO_PLAYABLE_REPRESENTATION error on Webos6, but eg on Webos 4 it fetched the license, started downloading and appending segments, but only black screen without audio was visible

Webos6 logs:

API: Calling loadvideo https://y dash
API: Initializing MediaSource mode in the main thread
XHR: Sending GET https://cuery type=arraybuffer to=30 cto=15
Locking `contentLock` to clean-up the current content.
DRM: Clearing-up DRM session.
API: current media element state tick event init position 0 seeking 0 internalSeek false rebuffering false freezing false ended false paused true playbackRate 1 readyState 0 pendingPosition undefined
API: playerStateChange event LOADING
DRM: Nothing to clear. Returning right away. No state = true
API: DRM session cleaned-up with success!
Unlocking `contentLock`. Next content can begin.
Init: Creating ContentDecryptor
DRM: Starting ContentDecryptor logic.
DRM: Searching for compatible MediaKeySystemAccess
DRM: Request keysystem access com.microsoft.playready.recommendation,1 of 4
DRM: Rejected access to keysystem com.microsoft.playready.recommendation 1 0
DRM: Rejected access to keysystem com.microsoft.playready.recommendation 1 1
DRM: Request keysystem access com.microsoft.playready,2 of 4
DRM: Found compatible keysystem com.microsoft.playready 2
DRM: Calling createMediaKeys on the MediaKeySystemAccess
DRM: MediaKeys created with success
DRM: Waiting for attachment.
Init: Creating MediaSource
MTCI: Attaching MediaSource URL to the media element
DASH: WASM MPD Parser not initialized. Running JS one.
XHR: Sending GET https://ti
DASH Parser: merging "switchable" AdaptationSets 5 4
MF: Manifest parsed in 232.28499999981432ms
MUS: Manifest update rythm is too frequent. Postponing next request. 1561.4550000000236 2561.4550000000236
Init: MediaSource opened
DRM: disabling MediaKeys attachment lock. Ready for content
DRM: Attaching current MediaKeys
DRM: Attaching MediaKeys to the media element
Init: Calculating initial time
Init: clock offset found for a live content, checking if we can start close to it
Init: 1760432712.0876434 defined as the live time, applying a live gap of 10
Init: Initial time calculated: 1760432702.0876434
HTD: Creating HTMLTextDisplayer
API: current media element state tick event manual position 0 seeking 0 internalSeek false rebuffering false freezing false ended false paused true playbackRate 1 readyState 0 pendingPosition 1760432702.0876434
API: current playback timeline:

^0 
manual
Init: Resume playback speed 1
Init: Updating duration 4294967296
Stream: Creating new Stream for video 0
TS: Adding Track Reference video 1
Stream: Creating new Stream for audio 0
TS: Adding Track Reference audio 1
Stream: Creating new Stream for text 0
TS: Adding Track Reference text 1
Stream: Updating audio adaptation A: 1 P: 0
SB: Adding native SegmentSink with codec audio/mp4;codecs="mp4a.40.2"
AVSB: calling `mediaSource.addSourceBuffer` audio/mp4;codecs="mp4a.40.2"
Stream: Updating video adaptation A: 4 P: 0
SB: Adding native SegmentSink with codec video/mp4;codecs="avc1.640029"
AVSB: calling `mediaSource.addSourceBuffer` video/mp4;codecs="avc1.640029"
Stream: Set no text Adaptation. P: 0
ABR: Creating new BandwidthEstimator for  audio
Stream: changing representation audio audio_112034_cze=112000 112000
Stream: Creating RepresentationStream audio 112000
SQ: Media segments now need to be requested. Starting queue. audio 6
SF: Beginning request audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1760432700.4993124-1.92
XHR: Sending GET https://cz-bkh type=arraybuffer to=30 cto=15
SF: Beginning request audio P: 1 A: 1 R: audio_112034_cze=112000 S: init
XHR: Sending GET https://type=arraybuffer to=30 cto=15
ABR: Creating new BandwidthEstimator for  video
ABR: Steps for buffer based chooser. bufferLevel: 4, bitrate: 443600 ,bufferLevel: 10.802896272800929, bitrate: 648000 ,bufferLevel: 15.170013884595148, bitrate: 1066800 ,bufferLevel: 19.37290154586124, bitrate: 1444800 ,bufferLevel: 23.79331093099003, bitrate: 2671200 ,bufferLevel: 28.658858230343256, bitrate: 3590400 ,bufferLevel: 31.554458168122714, bitrate: 4714400
ABR: enter starvation mode.
ABR: Choosing representation with bandwidth estimation. 1444800 video=1444800
ABR: Steps for buffer based chooser. bufferLevel: 4, bitrate: 443600 ,bufferLevel: 10.802896272800929, bitrate: 648000 ,bufferLevel: 15.170013884595148, bitrate: 1066800 ,bufferLevel: 19.37290154586124, bitrate: 1444800 ,bufferLevel: 23.79331093099003, bitrate: 2671200 ,bufferLevel: 28.658858230343256, bitrate: 3590400 ,bufferLevel: 31.554458168122714, bitrate: 4714400
ABR: Choosing representation with bandwidth estimation. 1444800 video=1444800
Stream: changing representation video video=1444800 1444800
Stream: Creating RepresentationStream video 1444800
SQ: Media segments now need to be requested. Starting queue. video 6
SF: Beginning request video P: 1 A: 4 R: video=1444800 S: 1760432700.4883332-1.92
XHR: Sending GET https://r to=30 cto=15
SF: Beginning request video P: 1 A: 4 R: video=1444800 S: init
XHR: Sending GET https://type=arraybuffer to=30 cto=15
SF: Segment request ended with success audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1760432700.4993124-1.92
AVSB: receiving order to push data to the SourceBuffer audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: init
AVSB: pushing segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: init
SBI: receiving order to push data to the SourceBuffer audio
SBI: pushing segment audio
SQ: no more init segment to request. Cancelling queue. audio
SF: Segment request cancelled audio P: 1 A: 1 R: audio_112034_cze=112000 S: init
ABR: New last stable representation 112000
AVSB: receiving order to push data to the SourceBuffer audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1760432700.4993124-1.92
AVSB: pushing segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1760432700.4993124-1.92
SBI: receiving order to push data to the SourceBuffer audio
SF: Beginning request audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1760432702.4193125-1.92
XHR: Sending GET https://csh type=arraybuffer to=30 cto=15
SF: Segment request ended with success audio P: 1 A: 1 R: audio_112034_cze=112000 S: init
Compat: MediaKeys updated with success
DRM: MediaKeys attached with success
DRM: processing init data audio 112000 4ebe6762b59743d9ba59e5ff378fdda9
DRM: Creating a new temporary session
DRM-LSS: calling `createSession` temporary
DRM-LSS: MediaKeySession added temporary 1
DRM: Binding session events 
DRM: transmitting current keystatuses 
Compat: Calling generateRequest on the MediaKeySession
Compat: Trying to move CENC PSSH from init data at the end of it.
AVSB: receiving order to push data to the SourceBuffer video video P: 1 A: 4 R: video=1444800 S: init
AVSB: pushing segment video video P: 1 A: 4 R: video=1444800 S: init
SBI: receiving order to push data to the SourceBuffer video
SBI: pushing segment video
SQ: no more init segment to request. Cancelling queue. video
SF: Segment request cancelled video P: 1 A: 4 R: video=1444800 S: init
SF: Segment request ended with success video P: 1 A: 4 R: video=1444800 S: init
AVSB: receiving order to push data to the SourceBuffer audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1760432702.4193125-1.92
AVSB: pushing segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1760432702.4193125-1.92
SBI: receiving order to push data to the SourceBuffer audio
SF: Segment request ended with success audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1760432702.4193125-1.92
MMSI: Merging 2 segments together for perf audio
SBI: pushing segment audio
SI: synchronizing unknown buffered ranges: 
AVSB: receiving order to push data to the SourceBuffer video video P: 1 A: 4 R: video=1444800 S: 1760432700.4883332-1.92
AVSB: pushing segment video video P: 1 A: 4 R: video=1444800 S: 1760432700.4883332-1.92
SBI: receiving order to push data to the SourceBuffer video
SF: Segment request ended with success video P: 1 A: 4 R: video=1444800 S: 1760432700.4883332-1.92
ABR: New last stable representation 1444800
SF: Beginning request video P: 1 A: 4 R: video=1444800 S: 1760432702.4083333-1.92
XHR: Sending GET https:// type=arraybuffer to=30 cto=15
DRM: Received message event, type license-request EfTlLrMC1nOPzA52yT0VIw==
DRM: Calling `getLicense` license-request
API: current media element state tick event timeupdate position 0 seeking 0 internalSeek false rebuffering false freezing false ended false paused true playbackRate 1 readyState 0 pendingPosition 1760432702.0876434
API: current playback timeline:

^0 
timeupdate
2SI: synchronizing unknown buffered ranges: 
ABR: Choosing representation with bandwidth estimation. 3590400 video=3590400
Stream: new video bitrate estimate 6266182.519797347
Stream: slow Representation switch video
SBI: pushing segment video
SI: synchronizing unknown buffered ranges: 
ABR: Incrementing blocking raise in BufferBasedChooser due to unstable quality 9000
ABR: Choosing representation with bandwidth estimation. 3590400 video=3590400
Stream: slow Representation switch video
SI: first segment pushed audio 1760432700.4993124 1760432702.4193125
SI: synchronizing audio buffered ranges: 1760432700.499312-1760432704.339312
SI: found true buffered start audio 1760432700.499312 1760432700.4993124
SI: range end too far from expected end audio 1760432704.339312 1760432702.4193125
SI: Pushing segment strictly after previous one. audio 1760432702.4193125 1760432702.4193125
SI: synchronizing audio buffered ranges: 1760432700.499312-1760432704.339312
SI: found true buffered end audio 1760432704.339312 1760432704.3393126
SI: current audio inventory timeline:
1760432700.50|A|1760432704.34
[A] P: 1 || R: audio_112034_cze=112000(112000)
API: current media element state tick event loadedmetadata position 0 seeking 0 internalSeek false rebuffering false freezing false ended false paused true playbackRate 1 readyState 1 pendingPosition 1760432702.0876434
API: current playback timeline:

^0 
loadedmetadata
SI: synchronizing unknown buffered ranges: 
SI: synchronizing audio buffered ranges: 1760432700.499312-1760432704.339312
SI: current audio inventory timeline:
1760432700.50|A|1760432704.34
[A] P: 1 || R: audio_112034_cze=112000(112000)
ABR: Choosing representation with bandwidth estimation. 3590400 video=3590400
Stream: slow Representation switch video
API: Seeking internally 1760432702.0876434
API: current media element state tick event internal-seeking position 1760432702.087643 seeking 1 internalSeek true rebuffering true freezing false ended false paused true playbackRate 1 readyState 1 pendingPosition null
API: current playback timeline:
1760432700.57|==0.68==|1760432701.25
                                    ^1760432702.087643 
seeking
SI: synchronizing unknown buffered ranges: 1760432700.568333-1760432701.248333
SI: synchronizing audio buffered ranges: 1760432700.499312-1760432704.339312
SI: current audio inventory timeline:
1760432700.50|A|1760432704.34
[A] P: 1 || R: audio_112034_cze=112000(112000)
ABR: Choosing representation with bandwidth estimation. 3590400 video=3590400
Stream: slow Representation switch video
Init: Pause playback to build buffer
AVSB: receiving order to push data to the SourceBuffer video video P: 1 A: 4 R: video=1444800 S: 1760432702.4083333-1.92
AVSB: pushing segment video video P: 1 A: 4 R: video=1444800 S: 1760432702.4083333-1.92
SBI: receiving order to push data to the SourceBuffer video
SF: Segment request ended with success video P: 1 A: 4 R: video=1444800 S: 1760432702.4083333-1.92
Stream: No request left, terminate video
Stream: changing representation video video=3590400 3590400
Stream: Creating RepresentationStream video 3590400
SQ: Media segments now need to be requested. Starting queue. video 4
SF: Beginning request audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1760432704.3393126-1.92
XHR: Sending GET https://cdash type=arraybuffer to=30 cto=15
SF: Beginning request video P: 1 A: 4 R: video=3590400 S: 1760432704.3283334-1.92
XHR: Sending GET https://csh type=arraybuffer to=30 cto=15
SF: Beginning request video P: 1 A: 4 R: video=3590400 S: init
XHR: Sending GET https://csh type=arraybuffer to=30 cto=15
API: current media element state tick event ratechange position 1760432702.087643 seeking 1 internalSeek true rebuffering true freezing false ended false paused true playbackRate 0 readyState 1 pendingPosition null
API: current playback timeline:
1760432700.57|==1.64==|1760432702.21
                  ^1760432702.087643 
ratechange
SI: synchronizing unknown buffered ranges: 1760432700.568333-1760432702.208333
SI: synchronizing audio buffered ranges: 1760432700.499312-1760432704.339312
SI: current audio inventory timeline:
1760432700.50|A|1760432704.34
[A] P: 1 || R: audio_112034_cze=112000(112000)
ABR: Choosing representation with bandwidth estimation. 4714400 video=4714400
Stream: new video bitrate estimate 8011081.823406923
Stream: slow Representation switch video
DRM: Updating MediaKeySession with message
AVSB: receiving order to push data to the SourceBuffer audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1760432704.3393126-1.92
AVSB: pushing segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1760432704.3393126-1.92
SBI: receiving order to push data to the SourceBuffer audio
SBI: pushing segment audio
SF: Segment request ended with success audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1760432704.3393126-1.92
SBI: pushing segment video
SI: first segment pushed video 1760432700.4883332 1760432702.4083333
SI: synchronizing video buffered ranges: 1760432700.568333-1760432702.488333
SI: found true buffered start video 1760432700.568333 1760432700.4883332
SI: found true buffered end video 1760432702.488333 1760432702.4083333
ABR: Incrementing blocking raise in BufferBasedChooser due to unstable quality 12000
ABR: Choosing representation with bandwidth estimation. 4714400 video=4714400
Stream: slow Representation switch video
DRM: MediaKeySession update succeeded.
AVSB: receiving order to push data to the SourceBuffer video video P: 1 A: 4 R: video=3590400 S: init
AVSB: pushing segment video video P: 1 A: 4 R: video=3590400 S: init
SBI: receiving order to push data to the SourceBuffer video
SQ: no more init segment to request. Cancelling queue. video
SF: Segment request cancelled video P: 1 A: 4 R: video=3590400 S: init
SF: Segment request ended with success video P: 1 A: 4 R: video=3590400 S: init
DRM: keystatuseschange event received EfTlLrMC1nOPzA52yT0VIw==
DRM: key status update (4ebe6762b59743d9ba59e5ff378fdda9): usable
Decipherability changed for "audio_112034_cze=112000" (112000) true
Decipherability changed for "audio_112035_qaa=112000" (112000) true
Decipherability changed for "video=443600" (443600) false
Decipherability changed for "video=648000" (648000) false
Decipherability changed for "video=1066800" (1066800) false
Decipherability changed for "video=1444800" (1444800) false
Decipherability changed for "video=2671200" (2671200) false
Decipherability changed for "video=3590400" (3590400) false
Decipherability changed for "video=4714400" (4714400) false
SF: Segment request cancelled video P: 1 A: 4 R: video=3590400 S: 1760432704.3283334-1.92
SB: Aborting SegmentSink audio
AVSB: Calling `dispose` on the SourceBufferInterface
SB: Aborting SegmentSink video
AVSB: Calling `dispose` on the SourceBufferInterface
HTD: Stopping HTMLTextDisplayer
Init: Clearing HTMLMediaElement's src
Init: Revoking previous URL
Locking `contentLock` to clean-up the current content.
DRM: Clearing-up DRM session.
API: The player stopped because of an error MediaError: NO_PLAYABLE_REPRESENTATION: No video Representation can be played
    at Array.forEach (<anonymous>)
    at go.trigger 
    at go.i [as refresh] 
    at ho.onDecipherabilityUpdates 
    at Kt._priv_onDecipherabilityUpdate
    at Array.forEach (<anonymous>)
_priv_onFatalError @ (anonymous) @ (anonymous) @ trigger @ (anonymous) @ (anonymous) @ trigger @ i @ onDecipherabilityUpdates @ _priv_onDecipherabilityUpdate @ (anonymous) @ (anonymous) @ trigger @ (anonymous) @ (anonymous) @ trigger @ updateRepresentationsDeciperability @ oy @ (anonymous) @ step @ (anonymous) @ asyncGeneratorStep @ _next @ (anonymous) @ (anonymous) @ onKeyIdsCompatibilityUpdate @ (anonymous) @ (anonymous) @ trigger @ onKeyUpdate @ s @ (anonymous) @ Show 2 more frames
API: playerStateChange event STOPPED
(anonymous) @ DRM: closing all current sessions.
DRM-LSS: Closing all current MediaKeySessions 1
DRM: Trying to close a MediaKeySession EfTlLrMC1nOPzA52yT0VIw==
SI: Pushing segment strictly after previous one. audio 1760432704.3393126 1760432704.339312
SI: buffered range not known after sync. Skipping history. 1760432704.3393126 1760432706.2593126
SI: Pushing segment strictly after previous one. video 1760432702.4083333 1760432702.4083333
SI: buffered range not known after sync. Skipping history. 1760432702.4083333 1760432704.3283334
SF: Segment request aborted video P: 1 A: 4 R: video=3590400 S: 1760432704.3283334-1.92
DRM-LSS: session was closed, removing it. EfTlLrMC1nOPzA52yT0VIw==
DRM: Succeeded to close MediaKeySession
API: DRM session cleaned-up with success!
Unlocking `contentLock`. Next content can begin.

In the manifest Im receiving :
<AdaptationSet id="4" group="2" contentType="video" par="16:9" minBandwidth="443600" maxBandwidth="3590400" maxWidth="1280" maxHeight="720" segmentAlignment="true" frameRate="25" mimeType="video/mp4" codecs="avc1.640029" startWithSAP="1">
With representations:

 <Representation id="video=443600" bandwidth="443600" width="426" height="240" sar="640:639" scanType="progressive">
      </Representation>
      <Representation id="video=648000" bandwidth="648000" width="512" height="288" sar="1:1" scanType="progressive">
      </Representation>
      <Representation id="video=1066800" bandwidth="1066800" width="682" height="384" sar="1024:1023" scanType="progressive">
      </Representation>
      <Representation id="video=1444800" bandwidth="1444800" width="850" height="480" sar="256:255" scanType="progressive">
      </Representation>
      <Representation id="video=2671200" bandwidth="2671200" width="1024" height="576" sar="1:1" scanType="progressive">
      </Representation>
      <Representation id="video=3590400" bandwidth="3590400" width="1280" height="720" sar="1:1" scanType="progressive">
      </Representation>

And:
<AdaptationSet id="5" group="2" contentType="video" par="16:9" segmentAlignment="true" width="1920" height="1080" sar="1:1" frameRate="25" mimeType="video/mp4" codecs="avc1.640029" startWithSAP="1">

With:

<Representation id="video=4714400" bandwidth="4714400" scanType="progressive">
      </Representation>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions