Skip to content

Commit 845c397

Browse files
authored
Merge pull request #53 from scribd/kabliz/APT-10650-3-try-to-play
[APT-10650] Better DrmInfo Resilience
2 parents d38093f + f1d892f commit 845c397

File tree

3 files changed

+27
-16
lines changed

3 files changed

+27
-16
lines changed

Armadillo/src/main/java/com/scribd/armadillo/playback/ExoPlaybackExceptionExt.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ import com.google.android.exoplayer2.ExoPlaybackException.TYPE_RENDERER
66
import com.google.android.exoplayer2.ExoPlaybackException.TYPE_SOURCE
77
import com.google.android.exoplayer2.ParserException
88
import com.google.android.exoplayer2.audio.AudioSink
9+
import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException
910
import com.google.android.exoplayer2.drm.MediaDrmCallbackException
1011
import com.google.android.exoplayer2.upstream.DataSpec
1112
import com.google.android.exoplayer2.upstream.HttpDataSource
1213
import com.scribd.armadillo.error.ArmadilloException
1314
import com.scribd.armadillo.error.ArmadilloIOException
1415
import com.scribd.armadillo.error.ConnectivityException
16+
import com.scribd.armadillo.error.DrmPlaybackException
1517
import com.scribd.armadillo.error.HttpResponseCodeException
1618
import com.scribd.armadillo.error.ParsingException
1719
import com.scribd.armadillo.error.RendererConfigurationException
@@ -39,6 +41,9 @@ internal fun ExoPlaybackException.toArmadilloException(context: Context): Armadi
3941
HttpResponseCodeException(httpCause?.responseCode
4042
?: 0, httpCause?.dataSpec?.uri.toString(), source, source.dataSpec.toAnalyticsMap(context))
4143
}
44+
is DrmSessionException -> {
45+
DrmPlaybackException(cause = this)
46+
}
4247

4348
is UnknownHostException,
4449
is SocketTimeoutException -> ConnectivityException(source)

Armadillo/src/main/java/com/scribd/armadillo/playback/mediasource/DrmMediaSourceHelper.kt

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,28 @@ internal class DrmMediaSourceHelperImpl @Inject constructor(private val secureSt
3131
MediaItem.Builder()
3232
.setUri(request.url)
3333
.apply {
34-
// Apply DRM config if content is DRM-protected
35-
request.drmInfo?.let { drmInfo ->
36-
MediaItem.DrmConfiguration.Builder(drmInfo.drmType.toExoplayerConstant())
37-
.setLicenseUri(drmInfo.licenseServer)
38-
.setLicenseRequestHeaders(drmInfo.drmHeaders)
39-
.apply {
40-
// If the content is a download content, use the saved offline DRM key id.
41-
// This ID is needed to retrieve the local DRM license for content decryption.
42-
if (isDownload) {
43-
secureStorage.getDrmDownload(context = context, id = id, drmType = drmInfo.drmType)?.let { drmDownload ->
44-
setKeySetId(drmDownload.drmKeyId)
45-
} ?: throw DrmPlaybackException(IllegalStateException("No DRM key id saved for download content"))
34+
try {
35+
// Apply DRM config if content is DRM-protected
36+
request.drmInfo?.let { drmInfo ->
37+
MediaItem.DrmConfiguration.Builder(drmInfo.drmType.toExoplayerConstant())
38+
.setLicenseUri(drmInfo.licenseServer)
39+
.setLicenseRequestHeaders(drmInfo.drmHeaders)
40+
.apply {
41+
// If the content is a download content, use the saved offline DRM key id.
42+
// This ID is needed to retrieve the local DRM license for content decryption.
43+
if (isDownload) {
44+
secureStorage.getDrmDownload(context = context, id = id, drmType = drmInfo.drmType)?.let { drmDownload ->
45+
setKeySetId(drmDownload.drmKeyId)
46+
} ?: throw DrmPlaybackException(IllegalStateException("No DRM key id saved for download content"))
47+
}
4648
}
47-
}
48-
.build()
49-
}?.let { drmConfig ->
50-
setDrmConfiguration(drmConfig)
49+
.build()
50+
}?.let { drmConfig ->
51+
setDrmConfiguration(drmConfig)
52+
}
53+
} catch (ex: DrmPlaybackException) {
54+
//attempt to load unencrypted, there's a chance the user supplied excessive DRMInfo. An exception will
55+
// be raised elsewhere if this content can't be decrypted.
5156
}
5257
}
5358
.build()

RELEASE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## 1.6.8
44
- Fixes an app startup crash to EncryptedSharedPreference faults.
5+
- Adds resilience to playing unencrypted content if it is optionally drm enabled.
56

67
## 1.6.7
78
- Adds additional data in audio player errors: HttpResponseCodeException, DownloadFailed

0 commit comments

Comments
 (0)