shaka-project / shaka-player

JavaScript player library / DASH & HLS client / MSE-EME player
Apache License 2.0
7.2k stars 1.34k forks source link

6001 error with DRM protected DASH stream on Tizen 5.5 TV #5433

Closed thomthomgo closed 1 year ago

thomthomgo commented 1 year ago

What version of Shaka Player are you using? 4.3.8 and reproduced on 4.3.6

Can you reproduce the issue with our latest release version? Yes

Can you reproduce the issue with the latest code from main? Not tried.

Are you using the demo app or your own custom app? Custom

If custom app, can you reproduce the issue using our demo app? Using the demo app on desktop, I can't reproduce. The problem is specific to the samsung environment.

What browser and OS are you using? Mozilla/5.0 (SMART-TV; LINUX; Tizen 5.5) AppleWebKit/537.36 (KHTML, like Gecko) 69.0.3497.106/5.5 TV Safari/537.36

For embedded devices (smart TVs, etc.), what model and firmware version are you using? Samsung The Frame QE50LS03T QLED 4K UHD Smart TV 50’’ 2020 Firmware T-NKMDEUC-2401.1

What are the manifest and license server URIs? Sending through e-mail

What configuration are you using? What is the output of player.getConfiguration()? Sending through e-mail

What did you do? I configured a DRM license server and I'm trying to play a protected DASH Live stream. The same code base manages to run DASH unencrypted streams on my Samsung TV. Also, the same code base manages to run DRM protected streams on my desktop (Chrome 114).

What did you expect to happen? The stream should play.

What actually happened? Shaka raises an error 6001 - "DRM.REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE". I was assuming we had polyfills for older Chrome versions but they don't seem to be working here.

thomthomgo commented 1 year ago

Hi, I managed to reproduce on desktop with Chrome 79.0.3910.2, which is the closest I could get to the Chrome embedded in Tizen 5.5 (Chromium M69 - see https://developer.samsung.com/smarttv/develop/specifications/web-engine-specifications.html) I see on the README that Shaka is actively supported/tested on Tizen 2017 and Widevine is supported on Tizen. Could you confirm this is a bug? Thomas

thomthomgo commented 1 year ago

I did some additional testing with previous versions and the bug seems to appear from v3.2.0.

3.1.8 is able to play the stream as expected.

thomthomgo commented 1 year ago

Hi ! I'm still facing the issue, could someone have a look? Thanks!

joeyparrish commented 1 year ago

Error 6001 (REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE) in general means that either DRM is not available or doesn't support some specific aspect of the content (codec, encryption scheme, etc).

However, since the content plays in v3.1.8, but not in v3.2, that's concerning. It's also good to have the information that the issue persists in v4.3, which is an actively-maintained branch (unlike v3.1 and v3.2).

First I'm going to investigate the changelog and code diffs between v3.1.8 and v3.2, and see if there's anything obvious that might impact DRM. It's possible that we changed some part of the way we form the query for the EME API to determine DRM support.

joeyparrish commented 1 year ago

I see some differences between v3.1.8 and v3.2.0 in two significant areas:

One other detail I see is that we don't trust the MediaCapabilities implementation on Tizen, and force Shaka Player to use our polyfill. Is the application correctly installing Shaka Player's polyfills before instantiating the player? (shaka.polyfill.installAll())

The MediaCapabilities polyfill wasn't forced into use for Tizen until v3.2.10, v3.3.9, v4.0.5, v4.1.3, and v4.2.0. So any version before these would not be representative of what we are doing on Tizen today.


I'm unable to test on Tizen 5.5, since I don't have a device, so I'll need you to give us some feedback on these:


Moving back to the latest code from main, please try these things:

In lib/polyfill/media_capabilities.js, there is a section particular to Tizen that looks like this:

        } else if (shaka.util.Platform.isTizen()) {
          let extendedType = videoConfig.contentType;
          if (videoConfig.width && videoConfig.height) {
            extendedType += `; width=${videoConfig.width}`;
            extendedType += `; height=${videoConfig.height}`;
          }
          if (videoConfig.framerate) {
            extendedType += `; framerate=${videoConfig.framerate}`;
          }
          if (videoConfig.bitrate) {
            extendedType += `; bitrate=${videoConfig.bitrate}`;
          }
          isSupported = Capabilities.isTypeSupported(extendedType);

If you disable this by changing:

        } else if (shaka.util.Platform.isTizen()) {

to:

        } else if (shaka.util.Platform.isTizen() && false) {

Does this change your results on Tizen 5.5? If so, that would point to the platform rejecting some extended parameter of your content, such as resolution, framerate, or bitrate, and might make the failure a legitimate one. That check didn't exist until v3.2.20, v3.3.18, v4.2.9, and v4.3.5.

There is one other thing specific to Tizen you could change. If you change this section of the same file:

    let canUseNativeMCap = true;
    if (shaka.util.Platform.isApple() ||
        shaka.util.Platform.isPS5() ||
        shaka.util.Platform.isPS4() ||
        shaka.util.Platform.isWebOS() ||
        shaka.util.Platform.isTizen() ||
        shaka.util.Platform.isChromecast() ||
        shaka.util.Platform.isEOS() ||
        shaka.util.Platform.isHisense()) {
      canUseNativeMCap = false;
    }

by commenting out the line with shaka.util.Platform.isTizen(), does this change your results on Tizen 5.5? If so, that would indicate some unknown bug in our polyfill, or that the polyfill isn't needed any more on Tizen 5+.

thomthomgo commented 1 year ago

Thanks for looking into this Joey. I'll try these changes and report back in the next few days.

thomthomgo commented 1 year ago

Hi Joey, Installing polyfills with shaka.polyfill.installAll(); did the trick, I'm now able to play the DRM stream with v3.2 and the latest (v4.3.9). Given that, are the remaining tests required ? Thomas

shaka-bot commented 1 year ago

Closing due to inactivity. If this is still an issue for you or if you have further questions, the OP can ask shaka-bot to reopen it by including @shaka-bot reopen in a comment.