Description
Reproduction Steps
Set SimpleExoPlayer to play a MediaItem configured to play using Widevine, with M3U8 mimetype.
Email coming with replacements for <snip>
values.
Exoplayer version: 2.13.2
Android Version: 11
Devices
- Samsung S20 FE 5G (Qualcomm and Exynos chipsets both repro)
- Samsung Notes - (tablet)
- Samsung Galaxy Note - (phone)
- Samsung Galaxy Note Ultra OS
Basic Reproduction Case:
val player = SimpleExoPlayer.Builder(applicationContext).build()
val mediaItem = MediaItem.Builder()
.setUri(<snip>)
.setMimeType(MimeTypes.APPLICATION_M3U8)
.setDrmUuid(C.WIDEVINE_UUID)
.setDrmLicenseUri(<snip>)
.setDrmLicenseRequestHeaders(mutableMapOf(
<snip>
))
.build()
player.addMediaItem(mediaItem)
player.prepare()
player.play()
The content piece is a 45-second snippet of a live playlist setup as VOD.
It is 30 seconds of the content which is Widevine CTR encrypted content with a 15-second ad. On the switch to the ad, there is a discontinuity and switch to unencrypted content.
On the failure case:
I/ACodec: [OMX.Exynos.avc.dec] Now Loaded
D/SurfaceUtils: connecting to surface 0x71e621ca70, reason connectToSurface
E/SurfaceUtils: Failed to connect to surface 0x71e621ca70, err -22
E/MediaCodec: nativeWindowConnect returned an error: Invalid argument (-22)
When it does not fail, there is no failure to connect the surface with the code -22
.
This does not occur on all Android 11 devices. And even on the Samsung devices we have seen it occur on, not all of them have a 100% reproduction rate. On a device with a high reproduction rate, we've also discovered that setting a logging breakpoint in SynchronousMediaCodecAdapter on the codec.configure
line eliminates the issue.
Additionally, calling setDrmSessionForClearPeriods(true)
on the MediaItem does resolve the error. But raises the question of what other issues this will potentially cause.
Content to follow in email, along with complete Logcat output from both successful and failure cases.