Giter VIP home page Giter VIP logo

Comments (16)

peijkelhardt avatar peijkelhardt commented on June 3, 2024 1

Nice, thanks!

I compared with some user-agents seen on the web and I've been more broad, catching [Pp]anasonic on the user agent (LG's WebOS made me skeptical of vendor's documentations, plain wrong in their case!) when the device is not detected as another platform.

I updated the branch to try to make it "mergable", can you test its new form and tell me if everything still works?

I've just completed another test round, and it's still working nicely πŸ˜„

from rx-player.

peijkelhardt avatar peijkelhardt commented on June 3, 2024

In addition to above I've set LogLevel to DEBUG, which showed me this info:

DRM: Starting ContentDecryptor logic.
DRM: Searching for compatible MediaKeySystemAccess
DRM: Request keysystem access com.widevine.alpha,1 of 1
DRM: Rejected access to keysystem com.widevine.alpha 1

from rx-player.

peaBerberian avatar peaBerberian commented on June 3, 2024

Hi,

The INCOMPATIBLE_KEYSYSTEMS error is thrown when the given keySystems configuration is not compatible with the device.

Are you sure that widevine is available on this device? Perhaps the key system string is slightly different? It could also be the MediaKeySystemConfiguration which is not compatible but I do not see anything too out there here.

In the end, we could be looking at what the shaka is asking for by monkey-patching the navigator.requestMediaKeySystemAccess API.

from rx-player.

peijkelhardt avatar peijkelhardt commented on June 3, 2024

Hi,

The INCOMPATIBLE_KEYSYSTEMS error is thrown when the given keySystems configuration is not compatible with the device.

Are you sure that widevine is available on this device? Perhaps the key system string is slightly different? It could also be the MediaKeySystemConfiguration which is not compatible but I do not see anything too out there here.

In the end, we could be looking at what the shaka is asking for by monkey-patching the navigator.requestMediaKeySystemAccess API.

According to the documentation from Panasonic, Widevine is supported:

  • 2017-: Widevine Modular version 3.0.5
  • Supported with security level L1

Furthermore, when monkey-patching the referenced API, I noticed that Shaka Player has empty values for robustness in both videoCapabilities & audioCapabilities. When comparing this to RxPlayer, these contain values like HW_SECURE_ALL, HW_SECURE_DECODE, HW_SECURE_CRYPTO, SW_SECURE_DECODE & SW_SECURE_CRYPTO.

I also saw that RxPlayer has undocumented loadVideo options for both videoRobustnesses & audioRobustnesses. When setting these to an empty array, I was able to play content for a single time. Every second attempt ended up with a new type of error message:
EncryptedMediaError (KEY_GENERATE_REQUEST_ERROR) NotSupportedError: Cdm is nothing

from rx-player.

peaBerberian avatar peaBerberian commented on June 3, 2024

Ok thanks!

Interesting, so despite announcing L1 support, it seems that they don't accept any of the widevine robustness levels...
We could try adding a supplementary undefined video and audio robustness when checking for widevine support to better handle those devices.

Every second attempt ended up with a new type of error message

Every second attempt on the same given content or just any second call to loadVideo?

We've seen an issue at the end of last year on LG TVs where playing an already-played encrypted content on the same RxPlayer instance could lead there to infinite rebuffering. We found a work-around for them, we could also try that same work-around here.


I can try creating a branch with both work-arounds. If I do, do you know how to test it on your side?

from rx-player.

peijkelhardt avatar peijkelhardt commented on June 3, 2024

Every second attempt on the same given content or just any second call to loadVideo?

Just any second call, it doesn't matter whether it's the same content or not.

BTW, after setting RxPlayer.LogLevel = "DEBUG"; again I noticed the initial error is thrown right after this log message:
DRM: Trying to close a MediaKeySession

After some digging I ended up disabling the closeSessionsOnStop option (setting it to false), which resulted in a working player for all scenario's!

However, I'm not sure whether this is a good option to use as the documentation mentions:
This might be required by your key system implementation (most often, it is not).

I can try creating a branch with both work-arounds. If I do, do you know how to test it on your side?

That should be fine, yes.

from rx-player.

peaBerberian avatar peaBerberian commented on June 3, 2024

OK I just pushed on the compat/panasonic2019 branch the two work-arounds.

This branch isn't built so you will probably want to build it before performing your tests.
Which build script to use depend on how to rely on the rx-player, you can call npm run build:all for all type of builds (do not forget to call npm install first). You can then rely on this local build of the RxPlayer, for example through npm link or yarn link commands.

from rx-player.

peijkelhardt avatar peijkelhardt commented on June 3, 2024

OK I just pushed on the compat/panasonic2019 branch the two work-arounds.

This branch isn't built so you will probably want to build it before performing your tests. Which build script to use depend on how to rely on the rx-player, you can call npm run build:all for all type of builds (do not forget to call npm install first). You can then rely on this local build of the RxPlayer, for example through npm link or yarn link commands.

I've build the project using npm run build:all, and I do see these warnings now:
It is recommended that a robustness level be specified. Not specifying the robustness level could result in unexpected behavior in the future, potentially including failure to play.

So, the robustness setting should be working.

However, now I get these kind of warnings/errors:
EncryptedMediaError: (intermediate value).finally is not a function

from rx-player.

peaBerberian avatar peaBerberian commented on June 3, 2024

Weird this seems like the code that breaks is here:

Which would mean that you are in an environment where Promise.prototype.finally does not exist...
Are you polyfilling Promises in your application?

from rx-player.

peijkelhardt avatar peijkelhardt commented on June 3, 2024

We do polyfill Promises (using https://github.com/stefanpenner/es6-promise), but this appears to have an issue when Promise is (partially) implemented.

I've also tested the solution on a webOS 3.9, which has a native Promise implementation, but it lacks support for finally() as well. So, this device also throws the previously listed error.

We didn't have any issues with this yet, so was this added recently?

from rx-player.

peaBerberian avatar peaBerberian commented on June 3, 2024

Yes that code was just added in the for now unreleased v3.30.0. I thought that finally had a higher support than that.

I may have to replace all occurences of it, I'm looking at if it can be done elegantly without needing to repeat the same boilerplate everywhere.

from rx-player.

peijkelhardt avatar peijkelhardt commented on June 3, 2024

Yes that code was just added in the for now unreleased v3.30.0. I thought that finally had a higher support than that.

I may have to replace all occurences of it, I'm looking at if it can be done elegantly without needing to repeat the same boilerplate everywhere.

BTW, your initial changes seem to work! I've hacked the polyfill a bit in order to support finally() at all times.

from rx-player.

peaBerberian avatar peaBerberian commented on June 3, 2024

Ah that's nice!

I updated the branch so it does not use finally anymore.

Also, to merge that fix, can you give me the user-agent of panasonic TVs (or a way to detect all of them)? For now the work-around is done generally for tests so cannot be merged as is.

from rx-player.

peijkelhardt avatar peijkelhardt commented on June 3, 2024

From their documentation:

2.4 HTTP User Agent Header

All outgoing HTTP requests shall include a user agent header as specified by [HbbTV 2.0.1] chapter 7.3.2.4:

HbbTV/1.4.1 (<capabilities>; <vendorName>; <modelName>;<softwareVersion>; [< hardwareVersion>]; <familyName>; <reserved>)

where
<capabilities> is an empty string , 
<vendorName> matches Panasonic , and
<modelName> matches VIERA 2017

In order to allow service providers to differentiate between the different launch points (from broadcast or from Pana sonic Apps portal), the Panasonic HbbTV(OTT) SDK client will append following suffix at the end of this User Agent string for the latter case:

PanasonicSDK/<version>

where <version> shall be 2017 for devices conforming to this specification.

A valid example of the syntax above is
User-Agent: HbbTV/1.4.1 (;Panasonic;VIERA 2017;3.017;2b01 0003 0002-0000;) PanasonicSDK/2017

from rx-player.

peaBerberian avatar peaBerberian commented on June 3, 2024

Nice, thanks!

I compared with some user-agents seen on the web and I've been more broad, catching [Pp]anasonic on the user agent (LG's WebOS made me skeptical of vendor's documentations, plain wrong in their case!) when the device is not detected as another platform.

I updated the branch to try to make it "mergable", can you test its new form and tell me if everything still works?

from rx-player.

peaBerberian avatar peaBerberian commented on June 3, 2024

Now that the v3.30.0 is officially released, you should have panasonic 2019 DRM support, through a stable version.

I'm closing this issue, do not hesitate to re-open it if you still have a problem

from rx-player.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.