Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LG Webos 6: changing live channels can cause PIPELINE_ERROR_DECODE #1196

Open
TomaszKowalik opened this issue Jan 5, 2023 · 6 comments
Open

Comments

@TomaszKowalik
Copy link

We found an issue on LG Webos 6 device when using rxPlayer 3.29.0. I couldnt reproduce it on the devices with lower Webos. This is randomly happening after starting the live stream, sometimes it can happen after the first 5 zaps, sometimes user needs to zap through the channels 20 times or more. If this error is not occuring on the start, streams are playing fine. Speed of changing channels seems that doesnt matter, we could reproduce it when changing channels slowly and quickly.
After starting the channel black screen is observed, and when this will happen, user needs to restart the app because any consecutive play request will throw an error. Looks like the live channels are triggering it, but after recieving such error there is no possibility of running any other asset (replay, vod, etc.).

Parameters we are using when starting stream:

{
autoPlay: true
enableFastSwitching: false,
keySystems: [{type: "widevine", ... }],
onCodecSwitch: "reload",
textTrackElement: div.rxp-texttrack-cont,
textTrackMode: "html",
transport: "dash",
url: "https://{redacted}/index.mpd",
}

During debugging session I found out this in the logs:

SB: Aborting SegmentBuffer image
ISB: disposing image SegmentBuffer
API: Sending warning: OtherError: OtherError (PIPELINE_PARSE_ERROR) Error: Invalid BIF file

there is a BIF parse error, but I was able to reproduce this issue also with channels where there was no such error. Then these logs were printed:

API: current media element state tick event timeupdate position 0 seeking false internalSeek null rebuffering false freezing false ended false paused true playbackRate 1 readyState 0
API: current playback timeline:

^0 
timeupdate
ABR: Choosing representation with bandwidth estimation. 1444800 video=1444800
AVSB: receiving order to push data to the SourceBuffer audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924039.6982918-1.92
SF: Segment request ended with success audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924039.6982918-1.92
AVSB: receiving order for validating end of segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924039.6982918-1.92
AVSB: Acknowledging complete segment video P: 1 A: 4 R: video=1444800 S: init
ABR: Choosing representation with bandwidth estimation. 1444800 video=1444800
AVSB: receiving order to push data to the SourceBuffer video video P: 1 A: 4 R: video=1444800 S: 1672924037.7716668-1.92
AVSB: pushing segment video video P: 1 A: 4 R: video=1444800 S: 1672924037.7716668-1.92
SF: Segment request ended with success video P: 1 A: 4 R: video=1444800 S: 1672924037.7716668-1.92
AVSB: receiving order for validating end of segment video video P: 1 A: 4 R: video=1444800 S: 1672924037.7716668-1.92
ABR: New last stable representation 1444800
SF: Beginning request video P: 1 A: 4 R: video=1444800 S: 1672924039.6916666-1.92
AVSB: Acknowledging complete segment 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: 1672924037.7782917-1.92
API: current media element state tick event loadedmetadata position 0 seeking false internalSeek null rebuffering false freezing false ended false paused true playbackRate 1 readyState 1
API: current playback timeline:
1672924037.85|==1.04==|1672924038.89
                  ^0 
loadedmetadata
ABR: Choosing representation with bandwidth estimation. 1444800 video=1444800
Stream: new video bitrate estimate 2988462.5549644744
Init: Set initial time 1672924039.3107867
Init: Can begin to play content
SI: first segment pushed audio 1672924037.7782917 1672924039.6982918
AVSB: Acknowledging complete segment audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924037.7782917-1.92
SI: found true buffered start audio 1672924037.778291 1672924037.7782917
SI: found true buffered end audio 1672924039.698291 1672924039.6982918
AVSB: pushing segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924039.6982918-1.92
API: current media element state tick event internal-seeking position 1672924039.310786 seeking true internalSeek 1672924039.3107867 rebuffering true freezing false ended false paused false playbackRate 1 readyState 1
API: current playback timeline:
1672924037.85|==1.56==|1672924039.41
                  ^1672924039.310786 
seeking
ABR: Choosing representation with bandwidth estimation. 1444800 video=1444800
Init: Pause playback to build buffer
API: current media element state tick event play position 1672924039.310786 seeking true internalSeek 1672924039.3107867 rebuffering true freezing false ended false paused false playbackRate 0 readyState 1
API: current playback timeline:
1672924037.85|==1.56==|1672924039.41
                  ^1672924039.310786 
play
ABR: Choosing representation with bandwidth estimation. 1444800 video=1444800
DRM: Received message event, type license-request ksidDADB393B
DRM: Received message event, type license-request ksid01A6FDE1
API: current media element state tick event ratechange position 1672924039.310786 seeking true internalSeek 1672924039.3107867 rebuffering true freezing false ended false paused false playbackRate 0 readyState 1
API: current playback timeline:
1672924037.85|==1.92==|1672924039.77
                  ^1672924039.310786 
ratechange
ABR: Choosing representation with bandwidth estimation. 1444800 video=1444800
SI: first segment pushed video 1672924037.7716668 1672924039.6916668
AVSB: Acknowledging complete segment video P: 1 A: 4 R: video=1444800 S: 1672924037.7716668-1.92
SI: found true buffered start video 1672924037.851666 1672924037.7716668
SI: found true buffered end video 1672924039.771666 1672924039.6916668
ABR: Choosing representation with bandwidth estimation. 1444800 video=1444800
SI: Pushing segment strictly after previous one. audio 1672924039.6982918 1672924039.698291
AVSB: Acknowledging complete segment audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924039.6982918-1.92
SI: found true buffered end audio 1672924041.618291 1672924041.6182919
SI: current audio inventory timeline:
1672924037.78|A|1672924041.62
[A] P: 1 || R: audio_112034_cze=112000(112000)
AVSB: receiving order to push data to the SourceBuffer video video P: 1 A: 4 R: video=1444800 S: 1672924039.6916666-1.92
AVSB: pushing segment video video P: 1 A: 4 R: video=1444800 S: 1672924039.6916666-1.92
SF: Segment request ended with success video P: 1 A: 4 R: video=1444800 S: 1672924039.6916666-1.92
AVSB: receiving order for validating end of segment video video P: 1 A: 4 R: video=1444800 S: 1672924039.6916666-1.92
SF: Beginning request audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924041.6182916-1.92
SF: Beginning request video P: 1 A: 4 R: video=1444800 S: 1672924041.6116667-1.92
AVSB: receiving order to push data to the SourceBuffer audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924041.6182916-1.92
AVSB: pushing segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924041.6182916-1.92
SF: Segment request ended with success audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924041.6182916-1.92
AVSB: receiving order for validating end of segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924041.6182916-1.92
SI: Pushing segment strictly after previous one. audio 1672924041.6182916 1672924041.618291
AVSB: Acknowledging complete segment audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924041.6182916-1.92
SI: found true buffered end audio 1672924043.538291 1672924043.5382917
SI: current audio inventory timeline:
1672924037.78|A|1672924043.54
[A] P: 1 || R: audio_112034_cze=112000(112000)
SI: Segment pushed updates end of previous one video 1672924039.6916666 1672924041.6116667 1672924037.851666 1672924039.771666
AVSB: Acknowledging complete segment video P: 1 A: 4 R: video=1444800 S: 1672924039.6916666-1.92
SI: calculating buffered end of contiguous segment video 1672924039.6916666 1672924039.6916666
SI: found true buffered end video 1672924041.691666 1672924041.6116667
SI: current video inventory timeline:
1672924037.85|A|1672924041.69
[A] P: 1 || R: video=1444800(1444800)
ABR: Choosing representation with bandwidth estimation. 2671200 video=2671200
Stream: slow Representation switch video
SI: current video inventory timeline:
1672924037.85|A|1672924041.69
[A] P: 1 || R: video=1444800(1444800)
Stream: new video bitrate estimate 4633328.06305683
AVSB: receiving order to push data to the SourceBuffer video video P: 1 A: 4 R: video=1444800 S: 1672924041.6116667-1.92
AVSB: pushing segment video video P: 1 A: 4 R: video=1444800 S: 1672924041.6116667-1.92
SF: Segment request ended with success video P: 1 A: 4 R: video=1444800 S: 1672924041.6116667-1.92
AVSB: receiving order for validating end of segment video video P: 1 A: 4 R: video=1444800 S: 1672924041.6116667-1.92
SI: current video inventory timeline:
1672924037.85|A|1672924041.69
[A] P: 1 || R: video=1444800(1444800)
Stream: No request left, terminate video

And after this message:

Stream: changing representation video video=2671200 2671200
SI: current video inventory timeline:
1672924037.85|A|1672924041.69
[A] P: 1 || R: video=1444800(1444800)
DRM: Init data already processed. Skipping it.
SF: Beginning request audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924043.5382917-1.92
SF: Beginning request video P: 1 A: 4 R: video=2671200 S: init
SF: Beginning request video P: 1 A: 4 R: video=2671200 S: 1672924043.5316668-1.92
DRM: Updating MediaKeySession with message
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: 1672924043.5382917-1.92
AVSB: pushing segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924043.5382917-1.92
SF: Segment request ended with success audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924043.5382917-1.92
AVSB: receiving order for validating end of segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924043.5382917-1.92
SF: Beginning request audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924045.4582918-1.92
AVSB: receiving order to push data to the SourceBuffer video 
SF: Segment request ended with success video P: 1 A: 4 R: video=2671200 S: init
AVSB: receiving order for validating end of segment video video P: 1 A: 4 R: video=2671200 S: init
SI: current video inventory timeline:
1672924037.85|A|1672924041.69
[A] P: 1 || R: video=1444800(1444800)
SI: Pushing segment strictly after previous one. audio 1672924043.5382917 1672924043.538291
AVSB: Acknowledging complete segment audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924043.5382917-1.92
SI: found true buffered end audio 1672924045.458291 1672924045.4582918
SI: current audio inventory timeline:
1672924037.78|A|1672924045.46
[A] P: 1 || R: audio_112034_cze=112000(112000)
SI: Segment pushed updates end of previous one video 1672924041.6116667 1672924043.5316668 1672924039.6916666 1672924041.691666
AVSB: Acknowledging complete segment video P: 1 A: 4 R: video=1444800 S: 1672924041.6116667-1.92
SI: calculating buffered end of contiguous segment video 1672924041.6116667 1672924041.6116667
SI: found true buffered end video 1672924043.611666 1672924043.5316668
SI: current video inventory timeline:
1672924037.85|A|1672924043.61
[A] P: 1 || R: video=1444800(1444800)
AVSB: pushing segment video 
ABR: Choosing representation with bandwidth estimation. 3590400 video=3590400
Stream: slow Representation switch video
SI: current video inventory timeline:
1672924037.85|A|1672924043.61
[A] P: 1 || R: video=1444800(1444800)
Stream: new video bitrate estimate 5879171.340588991
DRM: keystatuseschange event received ksidDADB393B
DRM: MediaKeySession update succeeded.
SF: Segment request cancelled video P: 1 A: 4 R: video=2671200 S: 1672924043.5316668-1.92
SO: Destroying Stream for video 0
SF: Segment request cancelled audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924045.4582918-1.92
SO: Destroying Stream for audio 0
SO: Creating new Stream for video 0
Stream: Updating video adaptation A: 4 P: 0
Stream: Reusing a previous SegmentBuffer for the type video
SI: current video inventory timeline:
1672924037.85|A|1672924043.61
[A] P: 1 || R: video=1444800(1444800)
ABR: Steps for buffer based chooser. bufferLevel: 0, bitrate: 443600 ,bufferLevel: 6.802896272800928, bitrate: 648000 ,bufferLevel: 11.170013884595148, bitrate: 1066800 ,bufferLevel: 15.37290154586124, bitrate: 1444800 ,bufferLevel: 19.79331093099003, bitrate: 2671200 ,bufferLevel: 24.658858230343256, bitrate: 3590400 ,bufferLevel: 27.554458168122714, bitrate: 4714400
ABR: enter starvation mode.
ABR: Choosing representation with bandwidth estimation. 3590400 video=3590400
SO: Creating new Stream for audio 0
Stream: Updating audio adaptation A: 1 P: 0
Stream: Reusing a previous SegmentBuffer for the type audio
SI: current audio inventory timeline:
1672924037.78|A|1672924045.46
[A] P: 1 || R: audio_112034_cze=112000(112000)
Stream: changing representation video video=3590400 3590400
SI: current video inventory timeline:
1672924037.85|A|1672924043.61
[A] P: 1 || R: video=1444800(1444800)
SF: Beginning request video P: 1 A: 4 R: video=3590400 S: init
SF: Beginning request video P: 1 A: 4 R: video=3590400 S: 1672924043.5316668-1.92
DRM: Init data already processed. Skipping it.
Stream: new video bitrate estimate 5879171.340588991
Stream: New active period 0
Stream: changing representation audio audio_112034_cze=112000 112000
SI: current audio inventory timeline:
1672924037.78|A|1672924045.46
[A] P: 1 || R: audio_112034_cze=112000(112000)
SF: Beginning request audio P: 1 A: 1 R: audio_112034_cze=112000 S: init
SF: Beginning request audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924045.4582918-1.92
DRM: Init data already processed. Skipping it.
SF: Segment request aborted video P: 1 A: 4 R: video=2671200 S: 1672924043.5316668-1.92
SF: Segment request aborted audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924045.4582918-1.92
AVSB: receiving order to push data to the SourceBuffer video 
SF: Segment request ended with success video P: 1 A: 4 R: video=3590400 S: init
AVSB: receiving order for validating end of segment video video P: 1 A: 4 R: video=3590400 S: init
SI: current video inventory timeline:
1672924037.85|A|1672924043.61
[A] P: 1 || R: video=1444800(1444800)
AVSB: 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: init
AVSB: receiving order for validating end of segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: init
AVSB: Acknowledging complete segment audio P: 1 A: 1 R: audio_112034_cze=112000 S: init
SI: current audio inventory timeline:
1672924037.78|A|1672924045.46
[A] P: 1 || R: audio_112034_cze=112000(112000)
API: current media element state tick event timeupdate position 1672924039.310786 seeking true internalSeek 1672924039.3107867 rebuffering true freezing false ended false paused false playbackRate 0 readyState 1
API: current playback timeline:
1672924037.85|==5.76==|1672924043.61
                  ^1672924039.310786 
timeupdate
ABR: Choosing representation with bandwidth estimation. 3590400 video=3590400
SI: current video inventory timeline:
1672924037.85|A|1672924043.61
[A] P: 1 || R: video=1444800(1444800)
SI: current audio inventory timeline:
1672924037.78|A|1672924045.46
[A] P: 1 || R: audio_112034_cze=112000(112000)
AVSB: pushing segment video 
DRM: keystatuseschange event received ksid01A6FDE1
DRM: MediaKeySession update succeeded.
AVSB: receiving order to push data to the SourceBuffer audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924045.4582918-1.92
AVSB: pushing segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924045.4582918-1.92
SF: Segment request ended with success audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924045.4582918-1.92
AVSB: receiving order for validating end of segment audio audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924045.4582918-1.92
ABR: New last stable representation 112000
DASH: WASM MPD Parser not initialized. Running JS one.
MF: Manifest parsed in 32.22499999901629ms
SF: Segment request cancelled video P: 1 A: 4 R: video=3590400 S: 1672924043.5316668-1.92
SF: Beginning request audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924047.3782916-1.92
SF: Segment request cancelled audio P: 1 A: 1 R: audio_112034_cze=112000 S: 1672924047.3782916-1.92
SB: Aborting SegmentBuffer audio
SB: Aborting SegmentBuffer video
2Init: Removing SourceBuffer from mediaSource
Init: Revoking previous URL
Locking `contentLock` to clean-up the current content.
DRM: Clearing-up DRM session.
DRM: closing all current sessions.
DRM-LSS: Closing all current MediaKeySessions 2
DRM: Trying to close a MediaKeySession ksid01A6FDE1
DRM: Trying to close a MediaKeySession ksidDADB393B
API: The player stopped because of an error MediaError: MediaError (MEDIA_ERR_DECODE) PIPELINE_ERROR_DECODE
API: playerStateChange event STOPPED

Any consecutive play request leads to the API: The player stopped because of an error MediaError: MediaError (MEDIA_ERR_DECODE) PIPELINE_ERROR_DECODE error
In the network tab I can see cancelled request for audio (and as I can see there is always at least one cancelled request for audio):

Screenshot 2023-01-05 143838

What might be causing this issue? Please let me know if you need any additional information.

@peaBerberian
Copy link
Collaborator

Hi @TomaszKowalik,

For the BIF error, I guess that the RxPlayer wrongly believe that the MPD contains a URL to a .bif thumbnail file but fails to parse it (it may not actually be a bif file?). It's curious to have it here, but should not be the source of the bigger issue we're seeing here.

A MEDIA_ERR_DECODE with the PIPELINE_ERROR_DECODE error message means that the browser encountered an error while decoding the content. It's kind of generic so difficult to debug. Do you reproduce it only on some video / audio quality?
Only on some contents?

Can you try just playing audio (e.g. by calling disableVideoTrack or by calling player.setPreferredVideoTracks([null]) before playback) and see if you reproduce it?

It's weird that it completely blocks further contents from being played also :/
Does it play if you create another media element with another player instance linked to it?

A huge source of bugs on such devices are linked to DRM. I see you're relying on widevine here, does the device have PlayReady? Can you try with that key system?


Sadly this is a difficult error to debug, all this tells us is that the device is not able to decode it and we now have to guess what went wrong...

@TomaszKowalik
Copy link
Author

@peaBerberian thank you for your answer

According to your questions:

  • "Do you reproduce it only on some video / audio quality? Only on some contents?"

We were able to reproduce it for livestreams only so far (but it migh be because we are able to zap through channels only with live streams), I've noticed now that we are using also:

initialVideoBitrate: 2500000,
initialAudioBitrate: 64000

params (didnt mentioned it before, sorry). But removing these parameters is not fixing the issue, looks like it can happen for every quality.
It is happening with streams from at least two providers, looks like to be random, in consecutive app sessions same stream might be playing fine or cause the crash. It can happen after first channel switch or after 20th.
Today I saw also this error:

[ER]Rx Player error error: MediaError (MEDIA_ERR_DECODE) PIPELINE_ERROR_DECODE: DecryptingDemuxerStream: decrypt error 3stack: MediaError: MediaError (MEDIA_ERR_DECODE) PIPELINE_ERROR_DECODE: DecryptingDemuxerStream: decrypt error 3

  • "Can you try just playing audio (e.g. by calling disableVideoTrack or by calling player.setPreferredVideoTracks([null]) before playback) and see if you reproduce it?"

With audio only (I've used player.setPreferredVideoTracks([null]) call) I wasnt able to reproduce it anymore (I could hear the audio and I didnt seen any errors, tried switching channels many times)

  • "Does it play if you create another media element with another player instance linked to it?"

No, creating new player instance with new media element after crash is not fixing it. App has to be closed and run again. (I saw few times that TV was completely freezed, and has restarted itself)

  • "A huge source of bugs on such devices are linked to DRM. I see you're relying on widevine here, does the device have PlayReady? Can you try with that key system?"

Unfortunately, we are using only DASH streams with Widevine for rxPlayer, but we tried to reproduce this issue with other player that is also using widevine for the same content, and this bug seem to occur only with RX.

Additional note:
In manifests of affected streams I found such adaptations and representations (these are from two different providers):

        <AdaptationSet id="0" mimeType="video/mp4" contentType="video" segmentAlignment="true" startWithSAP="1">
	<Representation id="0" bandwidth="4800000" width="1280" height="720" codecs="avc1.4d4020" frameRate="50"/>
	<Representation id="1" bandwidth="2800000" width="1280" height="720" codecs="avc1.4d401f" frameRate="25"/>
	<Representation id="2" bandwidth="1300000" width="768" height="432" codecs="avc1.4d401e" frameRate="25"/>
        <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">
      	<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>
   <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">
	<Representation id="video=4714400" bandwidth="4714400" scanType="progressive">
      	</Representation>

in the manifests of streams from provider for which I couldnt reproduce this issue:

<AdaptationSet id="3" mimeType="video/mp4" contentType="video" maxWidth="1280" maxHeight="720" 
         par="1280:720"  maxFrameRate="25" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" 
         subsegmentStartsWithSAP="1">
	<Representation id="tracks-v1" width="1280" height="720" sar="1:1" frameRate="25" bandwidth="4023000" 
        codecs="avc1.4d001f">
	<Representation id="tracks-v2" width="1024" height="576" sar="1:1" frameRate="25" bandwidth="2414000" 
        codecs="avc1.4d001f">
	<Representation id="tracks-v3" width="850" height="480" sar="1:1" frameRate="25" bandwidth="1204000" 
        codecs="avc1.4d001e">
	<Representation id="tracks-v4" width="682" height="384" sar="1:1" frameRate="25" bandwidth="806000" 
        codecs="avc1.4d001e">
	<Representation id="tracks-v5" width="512" height="288" sar="1:1" frameRate="25" bandwidth="400000" 
        codecs="avc1.4d0015">
	<Representation id="tracks-v6" width="426" height="240" sar="1:1" frameRate="25" bandwidth="200000" 
        codecs="avc1.4d0015">

@TomaszKowalik
Copy link
Author

@peaBerberian I've used RX 3.30.0 version to see if it will solve this issue, but sadly it still occurs.
it still randomly starts throwing MediaError (MEDIA_ERR_DECODE) PIPELINE_ERROR_DECODE, and once it occur, then app has to be killed to make it possible to play any content again...
I peeked in the rx min code, from where this error comes from and its from:

case 3:
                            return a = null != a ? a : "An error occurred while trying to decode the media resource",
                            t(new r.Z("MEDIA_ERR_DECODE",a));

Sometimes I can see some other errors as the first error, like:

MediaError (MEDIA_ERR_DECODE) PIPELINE_ERROR_DECODE: DecryptingDemuxerStream: decrypt error 3stack: MediaError: MediaError (MEDIA_ERR_DECODE) PIPELINE_ERROR_DECODE: DecryptingDemuxerStream: decrypt error 3 at HTMLVideoElement.a

Or once I saw error about buffer appending

but every consecutive error is this MediaError (MEDIA_ERR_DECODE) PIPELINE_ERROR_DECODE

@peaBerberian
Copy link
Collaborator

Hi,

OK, as that second error do refer to decryption, I'm even more under the impression that this is DRM-related.

Do you have multiple keys depending on the quality of the content (e.g. other more restrictions for higher qualities)?

Do the issue still appears if you lock the lowest video bitrate in place before any playback (for example by setting player.setVideoBitrate(0) before the first loadVideo call)?

Do you set some widevine robustnesses? We could try with forcing the less restrictive Widevine L3 security level. In your keySystems objects (alongside for example the getLicense callback and type property), can you add the following two properties:

  • videoRobustnesses: ['SW_SECURE_DECODE', 'SW_SECURE_CRYPTO']
  • audioRobustnesses: ['SW_SECURE_DECODE', 'SW_SECURE_CRYPTO']
    Can you check if the issue still appears in that security level?

@TomaszKowalik
Copy link
Author

TomaszKowalik commented Mar 23, 2023

Hi.
I've tried setting player.setVideoBitrate(0), also I've added these properties to keySystems, but the issue still exist :(
Today I was getting:
MediaError (MEDIA_ERR_DECODE) PIPELINE_ERROR_DECODE: DecryptingDemuxerStream: decrypt error 3
or
MediaError (BUFFER_APPEND_ERROR) InvalidStateError: Failed to execute 'appendBuffer' on 'SourceBuffer': The HTMLMediaElement.error attribute is not null
or
MediaError (MEDIA_ERR_DECODE) PIPELINE_ERROR_DECODE
as the first error, and app was freezing completly
in the keysystems we have:

                type: "widevine",
                getLicense: getLicense, // get license implementation
                getLicenseConfig: {
                    retry: 5,
                    timeout: 30000,
                },
                fallbackOn: {
                    keyInternalError: true,
                    keyOutputRestricted: true,
                },
                disableMediaKeysAttachmentLock: true,
                closeSessionsOnStop: true,
                serverCertificate: serverCert //  get server cert implementation

@TomaszKowalik
Copy link
Author

And yes, we indeed support multi-key drm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants