Exoplayer: Live DRM Playback fails on Pixel 3 and OnePlus Android 9

Created on 26 Mar 2019  路  29Comments  路  Source: google/ExoPlayer

Hi,

We have DRM stream which fails to display video frame only on Pixel 3 device Android 9
other DRM content plays on this Pixel 3 and the same content plays fine on other devices
We can see in logs (attached):

DrmLibHdcpSrm: Service_Initialize: Loading app failed, ret = -1

Do you have any idea for the reason it can happen?

10x
Gilad Nadav

Black_screen_on_Pixel_3.txt

Device Info:

{
    "meta": {
        "versionName": "1.4.1",
        "versionCode": 18,
        "timestamp": "2019-02-28T14:34:40Z"
    },
    "system": {
        "RELEASE": "9",
        "SDK_INT": 28,
        "BRAND": "google",
        "MODEL": "Pixel 3",
        "MANUFACTURER": "Google",
        "DEVICE": "blueline",
        "BOARD": "sdm845",
        "TAGS": "release-keys",
        "FINGERPRINT": "google/blueline/blueline:9/PQ2A.190205.001/5163636:user/release-keys",
        "ARCH": {
            "os.arch": "aarch64",
            "SUPPORTED_ABIS": [
                "arm64-v8a",
                "armeabi-v7a",
                "armeabi"
            ],
            "SUPPORTED_32_BIT_ABIS": [
                "armeabi-v7a",
                "armeabi"
            ],
            "SUPPORTED_64_BIT_ABIS": [
                "arm64-v8a"
            ]
        }
    },
    "drm": {
        "modular": {
            "widevine": {
                "properties": {
                    "vendor": "Google",
                    "version": "14.0.0",
                    "description": "Widevine CDM",
                    "algorithms": "AES/CBC/NoPadding,HmacSHA256",
                    "securityLevel": "L1",
                    "systemId": "8522",
                    "privacyMode": "disable",
                    "sessionSharing": "disable",
                    "usageReportingSupport": "True",
                    "appId": "",
                    "origin": "",
                    "hdcpLevel": "Disconnected",
                    "maxHdcpLevel": "HDCP-2.2",
                    "maxNumberOfSessions": "50",
                    "numberOfOpenSessions": "1",
                    "deviceUniqueId": "1c19k9hWQzCkD73wCak43Y99mfXd7QTvCmW42HpP6KI=",
                    "provisioningUniqueId": "KjKCbCepvM9b8EIP9lbHInCCZgoiEvsQ9ZpHJ4WwF10=",
                    "serviceCertificate": ""
                },
                "events": []
            }
        },
        "classic": {
            "engines": [
                "OMA V1 Forward Lock"
            ]
        }
    },
    "display": {
        "metrics": "DisplayMetrics{density=2.75, width=1080, height=2028, scaledDensity=2.75, xdpi=442.451, ydpi=442.451}"
    },
    "media": {
        "decoders": {
            "c2.android.aac.decoder": {
                "supportedTypes": [
                    "audio/mp4a-latm"
                ]
            },
            "c2.android.amrnb.decoder": {
                "supportedTypes": [
                    "audio/3gpp"
                ]
            },
            "c2.android.amrwb.decoder": {
                "supportedTypes": [
                    "audio/amr-wb"
                ]
            },
            "c2.android.g711.alaw.decoder": {
                "supportedTypes": [
                    "audio/g711-alaw"
                ]
            },
            "c2.android.g711.mlaw.decoder": {
                "supportedTypes": [
                    "audio/g711-mlaw"
                ]
            },
            "c2.android.mp3.decoder": {
                "supportedTypes": [
                    "audio/mpeg"
                ]
            },
            "c2.android.vorbis.decoder": {
                "supportedTypes": [
                    "audio/vorbis"
                ]
            },
            "c2.android.opus.decoder": {
                "supportedTypes": [
                    "audio/opus"
                ]
            },
            "c2.android.raw.decoder": {
                "supportedTypes": [
                    "audio/raw"
                ]
            },
            "c2.android.flac.decoder": {
                "supportedTypes": [
                    "audio/flac"
                ]
            },
            "c2.android.gsm.decoder": {
                "supportedTypes": [
                    "audio/gsm"
                ]
            },
            "OMX.google.aac.decoder": {
                "supportedTypes": [
                    "audio/mp4a-latm"
                ]
            },
            "OMX.google.amrnb.decoder": {
                "supportedTypes": [
                    "audio/3gpp"
                ]
            },
            "OMX.google.amrwb.decoder": {
                "supportedTypes": [
                    "audio/amr-wb"
                ]
            },
            "OMX.google.g711.alaw.decoder": {
                "supportedTypes": [
                    "audio/g711-alaw"
                ]
            },
            "OMX.google.g711.mlaw.decoder": {
                "supportedTypes": [
                    "audio/g711-mlaw"
                ]
            },
            "OMX.google.mp3.decoder": {
                "supportedTypes": [
                    "audio/mpeg"
                ]
            },
            "OMX.google.vorbis.decoder": {
                "supportedTypes": [
                    "audio/vorbis"
                ]
            },
            "OMX.google.opus.decoder": {
                "supportedTypes": [
                    "audio/opus"
                ]
            },
            "OMX.google.raw.decoder": {
                "supportedTypes": [
                    "audio/raw"
                ]
            },
            "OMX.google.flac.decoder": {
                "supportedTypes": [
                    "audio/flac"
                ]
            },
            "OMX.google.gsm.decoder": {
                "supportedTypes": [
                    "audio/gsm"
                ]
            },
            "OMX.qcom.video.decoder.avc": {
                "supportedTypes": [
                    "video/avc"
                ]
            },
            "OMX.qcom.video.decoder.avc.secure": {
                "supportedTypes": [
                    "video/avc"
                ]
            },
            "OMX.qcom.video.decoder.hevc": {
                "supportedTypes": [
                    "video/hevc"
                ]
            },
            "OMX.qcom.video.decoder.hevc.secure": {
                "supportedTypes": [
                    "video/hevc"
                ]
            },
            "OMX.qcom.video.decoder.vp8": {
                "supportedTypes": [
                    "video/x-vnd.on2.vp8"
                ]
            },
            "OMX.qcom.video.decoder.vp9": {
                "supportedTypes": [
                    "video/x-vnd.on2.vp9"
                ]
            },
            "OMX.qcom.video.decoder.vp9.secure": {
                "supportedTypes": [
                    "video/x-vnd.on2.vp9"
                ]
            },
            "c2.android.avc.decoder": {
                "supportedTypes": [
                    "video/avc"
                ]
            },
            "c2.android.hevc.decoder": {
                "supportedTypes": [
                    "video/hevc"
                ]
            },
            "c2.android.h263.decoder": {
                "supportedTypes": [
                    "video/3gpp"
                ]
            },
            "c2.android.mpeg4.decoder": {
                "supportedTypes": [
                    "video/mp4v-es"
                ]
            },
            "c2.android.vp8.decoder": {
                "supportedTypes": [
                    "video/x-vnd.on2.vp8"
                ]
            },
            "c2.android.vp9.decoder": {
                "supportedTypes": [
                    "video/x-vnd.on2.vp9"
                ]
            },
            "OMX.google.h264.decoder": {
                "supportedTypes": [
                    "video/avc"
                ]
            },
            "OMX.google.hevc.decoder": {
                "supportedTypes": [
                    "video/hevc"
                ]
            },
            "OMX.google.h263.decoder": {
                "supportedTypes": [
                    "video/3gpp"
                ]
            },
            "OMX.google.mpeg4.decoder": {
                "supportedTypes": [
                    "video/mp4v-es"
                ]
            },
            "OMX.google.vp8.decoder": {
                "supportedTypes": [
                    "video/x-vnd.on2.vp8"
                ]
            },
            "OMX.google.vp9.decoder": {
                "supportedTypes": [
                    "video/x-vnd.on2.vp9"
                ]
            },
            "c2.qti.avc.decoder": {
                "supportedTypes": [
                    "video/avc"
                ]
            }
        }
    },
    "root": {
        "existingFiles": []
    }
}
device specific closed-by-bot need more info stale

All 29 comments

Thanks for reporting.

This sounds like a problem with the codec on that specific device with a DRM feature which is specific to that stream.

If you want us to look into this more closely, please take a bug report right after this happened and attach it to this issue. If you have a test stream with which we can repro the issue this would be even better; just attach it here as well or send it to dev.[email protected].

This issue template gives a good idea of what makes investigating content issues possible or easier.

@marcbaechinger

sending media and bug report to exo gmail
having this issue reproduced on OnePlus device

{
"meta": {
"versionName": "1.4.1",
"versionCode": 18,
"timestamp": "2019-05-16T11:33:10Z"
},
"system": {
"RELEASE": "9",
"SDK_INT": 28,
"BRAND": "OnePlus",
"MODEL": "ONEPLUS A6013",
"MANUFACTURER": "OnePlus",
"DEVICE": "OnePlus6T",
"BOARD": "sdm845",
"TAGS": "release-keys",
"FINGERPRINT": "OnePlus/OnePlus6T/OnePlus6T:9/PKQ1.180716.001/1904032100:user/release-keys",
"ARCH": {
"os.arch": "aarch64",
"SUPPORTED_ABIS": [
"arm64-v8a",
"armeabi-v7a",
"armeabi"
],
"SUPPORTED_32_BIT_ABIS": [
"armeabi-v7a",
"armeabi"
],
"SUPPORTED_64_BIT_ABIS": [
"arm64-v8a"
]
}
},
"drm": {
"modular": {
"widevine": {
"properties": {
"vendor": "Google",
"version": "14.0.0",
"description": "Widevine CDM",
"algorithms": "AES/CBC/NoPadding,HmacSHA256",
"securityLevel": "L1",
"systemId": "9937",
"privacyMode": "disable",
"sessionSharing": "disable",
"usageReportingSupport": "True",
"appId": "",
"origin": "",
"hdcpLevel": "Disconnected",
"maxHdcpLevel": "HDCP-2.2",
"maxNumberOfSessions": "50",
"numberOfOpenSessions": "1",
"deviceUniqueId": "No5L54zpkK3xL7lU2JIR2fubG6/OKZ7OSMNekHJqBYo=",
"provisioningUniqueId": "yXG0GHMWb1IO0EarJ23uJgRk5FAx1mExtzyhb42V+nU=",
"serviceCertificate": ""
},
"events": []
}
},
"classic": {
"engines": [
"OMA V1 Forward Lock"
]
}
},
"display": {
"metrics": "DisplayMetrics{density=2.625, width=1080, height=2135, scaledDensity=2.625, xdpi=403.411, ydpi=409.903}"
},

10x
Gilad

I don't really understand why this issue and #5590 both exist, given the same test stream has been provided for both. The provided stream is not accessible for me. I'm going to duplicate the two issues together until we at least have a working stream for us to look at. Closing this one as duplicate.

@ojw28

There a 2 issues

  1. the black screen (This issue) for video and audio is working fine for some Android 9 devices
  2. same stream but in that stream the bitrate switching is not possible ( #5590)

I have provided 2 bugreports for each of the problems where the ( #5590) issue for same stream but on device where video playback is fine so I am not considering it same issue.

Regarding stream 403 seems like it is GEO issue I guess and I will check if we can remove the geo blocking fir this stream for a while.

10x
Gilad

@ojw28
If we enable UK for the GEO does it work for you?

If we enable UK for the GEO does it work for you?

Probably. Although it would be highly preferable, in general, if you could just setup proper non-restricted test streams. Other streaming service providers are able to do this.

@ojw28
Hi
I have sent a mail with the media with new license to exoplayer gmail and geo blocking disabled on it

10x
Gilad.

The streams are still inaccessible, as per my email response.

We are facing the same issue on devices with the Qualcomm Snapdragon 845 chipset with stock android or LineageOS.
Only streams which are encoded with BT.601 color space are affected, other streams with BT.709 work fine. That鈥檚 why we assume this is the same problem as in #3596.

@ojw28

Seems like GEO block is removed now sending the mpd and license.
10x

@fredgc @jt64 - Could you take a look at this? A working stream has been provided to ExoPlayer's dev email address. Thanks!

@fredgc - Please could someone from Widevine take a look at this whilst the stream is available? Thanks!

The license service still seems inaccessible from the United States. Can you check?

06-19 11:26:16.957 15157 15283 E ExoPlayerImplInternal: Playback error.
06-19 11:26:16.957 15157 15283 E ExoPlayerImplInternal: com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.drm.DrmSession$DrmSessionException: com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 403
06-19 11:26:16.957 15157 15283 E ExoPlayerImplInternal: at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.shouldWaitForKeys(MediaCodecRenderer.java:1121)

I am checking this

@rrfrias
@fredgc

attaching here a new license url, media url has not changed

    "drm_license_url": "https:\\/\\/udrm.kaltura.com\\/cenc\\/widevine\\/license?custom_data=eyJjYV9zeXN0ZW0iOiJodHRwczovL3Jlc3R2NC1hcy5vdHQua2FsdHVyYS5jb20vYXBpX3YzL3NlcnZpY2UvYXNzZXRGaWxlL2FjdGlvbi9nZXRDb250ZXh0P2tzPWRqSjhNekEyTlh4TWJVaDc2TC1wUDNWWGw4WmRtdnZDMHBYclJsbUNwMmVSWlRiQjBydnQ1a2luUVJUX2N2TGpYRjB5VVRmeEJ4akRCUlRSQThkMmo2b1hxVlhlUTQ4bGFJYWlTSS1pRk5CbGIzajRSckR1ZVRxb0ltbDA1SW4wRTRGeVJoQXFLd1ZvMmo5MTh0M2dYZldQVURUZnB0bmUmY29udGV4dFR5cGU9bm9uZSZpZD04MDQ3NjI0IiwiYWNjb3VudF9pZCI6MjQ1NTQ3MSwiY29udGVudF9pZCI6IlZoMV9EQVNIX1NEXzEiLCJmaWxlcyI6IiIsInVzZXJfdG9rZW4iOiJkako4TXpBMk5YeE1iVWg3NkwtcFAzVlhsOFpkbXZ2QzBwWHJSbG1DcDJlUlpUYkIwcnZ0NWtpblFSVF9jdkxqWEYweVVUZnhCeGpEQlJUUkE4ZDJqNm9YcVZYZVE0OGxhSWFpU0ktaUZOQmxiM2o0UnJEdWVUcW9JbWwwNUluMEU0RnlSaEFxS3dWbzJqOTE4dDNnWGZXUFVEVGZwdG5lIiwidWRpZCI6IiIsImFkZGl0aW9uYWxfY2FzX3N5c3RlbSI6MzA2NX0%3d&signature=yq1MIgetQ86b8Wbg3CUOBkntZUk%3d"

10x
Gilad.

Thanks. We were able to test this once on a Pixel 3 XL before we ran into 404's. Can you check?

06-20 12:33:08.819 10230 12842 12842 E EventLogger: internalError [4.02, 0.00, window=0, period=0, loadError]
06-20 12:33:08.819 10230 12842 12842 E EventLogger: com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 404
06-20 12:33:08.825 10230 12842 12896 E ExoPlayerImplInternal: Source error.
06-20 12:33:08.825 10230 12842 12896 E ExoPlayerImplInternal: com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 404

On the attempt that was successful, playback skipped to the four minute mark, played for about 30 seconds and kept looping back and playing from the 4 minute mark. We need to investigate this but at least were able to have content render.

Is it possible to email dev.[email protected] with a bugreport/logcat that covers the playback attempt. There is information that is not captured in Black_screen_on_Pixel_3.txt that might be useful.

@ojw28
@rrfrias

Issue is reproduced on our OnePlus6T
bug report was sent
Please try seems like it has expired.

    "drm_license_url": "https://udrm.kaltura.com/cenc/widevine/license?custom_data=eyJjYV9zeXN0ZW0iOiJodHRwczovL3Jlc3R2NC1hcy5vdHQua2FsdHVyYS5jb20vYXBpX3YzL3NlcnZpY2UvYXNzZXRGaWxlL2FjdGlvbi9nZXRDb250ZXh0P2tzPWRqSjhNekEyTlh3c2VTMFhmTU9LejFFcGYwZVdTbkFVZ2JpY1FzRzNQMzBzNU5nbG1UMy16d1IxN2VzWlpreU1neS1Hb1NYZlN0QnRSZFRvM21mNTA1U3FtM19EejNJTUFRY2xlS3VOb0pPYy1aZ29hemQ5RHkydUdVdHBKZE5Mb0x2dGxJeWFia3pZY1pXcTFMSDI5Q1YwN3B4NW1mTDQmY29udGV4dFR5cGU9bm9uZSZpZD04MDQ3NjI0IiwiYWNjb3VudF9pZCI6MjQ1NTQ3MSwiY29udGVudF9pZCI6IlZoMV9EQVNIX1NEXzEiLCJmaWxlcyI6IiIsInVzZXJfdG9rZW4iOiJkako4TXpBMk5Yd3NlUzBYZk1PS3oxRXBmMGVXU25BVWdiaWNRc0czUDMwczVOZ2xtVDMtendSMTdlc1paa3lNZ3ktR29TWGZTdEJ0UmRUbzNtZjUwNVNxbTNfRHozSU1BUWNsZUt1Tm9KT2MtWmdvYXpkOUR5MnVHVXRwSmROTG9MdnRsSXlhYmt6WWNaV3ExTEgyOUNWMDdweDVtZkw0IiwidWRpZCI6IiIsImFkZGl0aW9uYWxfY2FzX3N5c3RlbSI6MzA2NX0%3d&signature=Wu23oR1rAZ4TncUcd%2fA01NSIogc%3d"

Attaching the bug report I have sent

https://drive.google.com/file/d/0B1DW_alQ_N1UZWFzcGNXcDJKbGcxVkZOenE1Mi1xb1dTM29N/view?usp=drivesdk

Thanks. We are able to reproduce and are investigating.

@rrfrias
issue mostly seems to occur on live + dash scenarios

though it might happen on vod + dash as well.

@rrfrias any update on this?
10x

This looks like a codec problem because it no longer happens in a newer release which uses a different codec. Is there anything unusual about the way the content is encoded. Does the non-encrypted content play okay on these devices?

@rrfrias
could you explain bit more in which version it works?
currently we have Android 9 OS running on OnePlusT that cannot decode the video tracks in the live dash DRM and same stream on different device it works just fine
I do not have this stream unencrypted
on VOD DRM works fine.

the content is encoded by elemental.
the encryption is done the same way for live and vod

@rrfrias please explain

Widevine was able to reproduce the problem on Android 9, but when we upgraded to Android 10, the video played OK. We did not see any DRM errors in the logs, or anything that indicates it is an encryption/decryption problem. This looks like there is a problem with how this particular content is interacting with the Android 9 codec on Pixel 3. The codec is different on Android 10.

@giladna, is the problem only seen on piece of content, or is it all content that you encode?

@marcbaechinger, do you know who can track down codec problems?

If it's a codec problem then the best thing to do would be to get the unencrypted stream corresponding to one of the DRM protected streams that we know is affected. We can then verify it has the same issue, and then route that to the Android Media team (it'll probably need to be further routed to the system-on-chip vendor for diagnosis).

@giladna - Is it possible for you to obtain an unencrypted test stream with this problem? I see above that you don't have one for the particular DRM protected stream you've provided, but they must be generated at some point during the transcoding process (i.e. they're theoretically possible to obtain).

I'm also facing the same issue on OnePlus6. The high-resolution stream is working fine but low quality and medium quality stream creating the problem and showing black screen while audio is working fine. Any update on this.

Prashant, can you share both the encrypted and the unencrypted stream that is causing problems?


Hey @giladna. We need more information to resolve this issue but there hasn't been an update in 14 days. I'm marking the issue as stale and if there are no new updates in the next 7 days I will close it automatically.

If you have more information that will help us get to the bottom of this, just add a comment!


Since there haven't been any recent updates here, I am going to close this issue.

@giladna if you're still experiencing this problem and want to continue the discussion just leave a comment here and we are happy to re-open this.

Was this page helpful?
0 / 5 - 0 ratings