From e04ca9fc9e36a8a7938c3925b78cb6f6e543a1bf Mon Sep 17 00:00:00 2001 From: sungju Yun Date: Tue, 21 Nov 2023 07:45:02 +0900 Subject: [PATCH] added LicenseCipherError --- .../android/build.gradle | 2 +- .../models/EventType.kt | 3 +- .../sdk/PallyConSdk.kt | 44 ++++++++++++------- .../pallycon_drm_sdk_android/pubspec.yaml | 6 +-- .../lib/src/enums/pallycon_event_type.dart | 2 + .../lib/src/models/pallycon_event.dart | 6 +++ .../advanced/android/app/build.gradle | 3 +- .../advanced/assets/user_content.json | 4 +- .../controllers/drm_movie_controller.dart | 2 + 9 files changed, 45 insertions(+), 27 deletions(-) diff --git a/pallycon-drm-sdk/pallycon_drm_sdk_android/android/build.gradle b/pallycon-drm-sdk/pallycon_drm_sdk_android/android/build.gradle index 5b5084a..1db11d3 100644 --- a/pallycon-drm-sdk/pallycon_drm_sdk_android/android/build.gradle +++ b/pallycon-drm-sdk/pallycon_drm_sdk_android/android/build.gradle @@ -8,7 +8,7 @@ buildscript { ext.coroutines_version = '1.6.0' ext.gson_version = '2.10' ext.crypto_ktx_verion = '1.1.0-alpha03' - ext.pallycon_version = '3.4.4' + ext.pallycon_version = '3.4.5' ext.data_binding_version = '3.5.0' repositories { google() diff --git a/pallycon-drm-sdk/pallycon_drm_sdk_android/android/src/main/kotlin/com/pallycon/pallycon_drm_sdk_android/models/EventType.kt b/pallycon-drm-sdk/pallycon_drm_sdk_android/android/src/main/kotlin/com/pallycon/pallycon_drm_sdk_android/models/EventType.kt index e2d67b3..fd900ea 100644 --- a/pallycon-drm-sdk/pallycon_drm_sdk_android/android/src/main/kotlin/com/pallycon/pallycon_drm_sdk_android/models/EventType.kt +++ b/pallycon-drm-sdk/pallycon_drm_sdk_android/android/src/main/kotlin/com/pallycon/pallycon_drm_sdk_android/models/EventType.kt @@ -13,9 +13,10 @@ enum class EventType(private var type: String) { NetworkConnectedError("networkConnectedError"), DetectedDeviceTimeModifiedError("detectedDeviceTimeModifiedError"), MigrationError("migrationError"), + LicenseCipherError("licenseCipherError"), UnknownError("unknownError"); override fun toString(): String { return type } -} \ No newline at end of file +} diff --git a/pallycon-drm-sdk/pallycon_drm_sdk_android/android/src/main/kotlin/com/pallycon/pallycon_drm_sdk_android/sdk/PallyConSdk.kt b/pallycon-drm-sdk/pallycon_drm_sdk_android/android/src/main/kotlin/com/pallycon/pallycon_drm_sdk_android/sdk/PallyConSdk.kt index 893b25f..8d329fa 100644 --- a/pallycon-drm-sdk/pallycon_drm_sdk_android/android/src/main/kotlin/com/pallycon/pallycon_drm_sdk_android/sdk/PallyConSdk.kt +++ b/pallycon-drm-sdk/pallycon_drm_sdk_android/android/src/main/kotlin/com/pallycon/pallycon_drm_sdk_android/sdk/PallyConSdk.kt @@ -88,7 +88,12 @@ class PallyConSdk constructor(val context: Context) { EventType.MigrationError, e.msg ) - + is PallyConException.PallyConLicenseCipherException -> + instance?.pallyConEvent?.sendPallyConEvent( + url, + EventType.LicenseCipherError, + e.msg + ) else -> instance?.pallyConEvent?.sendPallyConEvent( url, EventType.UnknownError, @@ -151,6 +156,9 @@ class PallyConSdk constructor(val context: Context) { fun setPallyConEvent(pallyConEvent: PallyConEvent?) { this.pallyConEvent = pallyConEvent + if (wvSDKList.isNotEmpty()) { + wvSDKList.entries.first()?.value.setPallyConEventListener(listener) + } } fun setDownloadProgressEvent(downloadProgressEvent: DownloadProgressEvent?) { @@ -212,7 +220,7 @@ class PallyConSdk constructor(val context: Context) { suspend fun getObjectForContent(config: PallyConContentConfiguration): String { return suspendCancellableCoroutine { continuation -> - if (wvSDKList[config.contentId] != null) { + if (wvSDKList[config.contentId] != null && config.contentUrl != null) { wvSDKList[config.contentId]!!.updateSecure({ print("update secure time") val index = @@ -221,11 +229,11 @@ class PallyConSdk constructor(val context: Context) { val gson = Gson().toJson(contentDataList[index]) continuation.resume(gson, null) } else { - continuation.resume(config.contentUrl, null) + continuation.resume(config.contentUrl!!, null) } }, { e -> pallyConEvent?.sendPallyConEvent( - config.contentUrl, + config.contentUrl!!, EventType.DetectedDeviceTimeModifiedError, e.msg ) @@ -257,21 +265,18 @@ class PallyConSdk constructor(val context: Context) { fun addStartDownload(config: PallyConContentConfiguration) { val data = createContentData(config) + if (!contentDataList.contains(data)) { contentDataList.add(data) } - if (!wvSDKList.containsKey(config.contentId)) { - wvSDKList[config.contentId] = PallyConWvSDK.createPallyConWvSDK( + if (!wvSDKList.containsKey(config.contentId) && config.contentId != null) { + wvSDKList[config.contentId!!] = PallyConWvSDK.createPallyConWvSDK( context, data ) } - if (wvSDKList.size == 1) { - wvSDKList.entries.first()?.value.setPallyConEventListener(listener) - } - wvSDKList[config.contentId]?.also { sdk -> sdk.updateSecure({ print("update secure time") @@ -286,21 +291,21 @@ class PallyConSdk constructor(val context: Context) { when (e) { is PallyConException.NetworkConnectedException -> pallyConEvent?.sendPallyConEvent( - config.contentUrl, + config.contentUrl ?: "", EventType.NetworkConnectedError, e.msg ) is PallyConException.ContentDataException -> pallyConEvent?.sendPallyConEvent( - config.contentUrl, + config.contentUrl ?: "", EventType.ContentDataError, e.msg ) else -> pallyConEvent?.sendPallyConEvent( - config.contentUrl, + config.contentUrl ?: "", EventType.DownloadError, e.msg ) @@ -322,12 +327,12 @@ class PallyConSdk constructor(val context: Context) { sdk.download(tracks) } catch (e: PallyConException.ContentDataException) { pallyConEvent?.sendPallyConEvent( - config.contentUrl, + config.contentUrl ?: "", EventType.ContentDataError, e.msg ) } catch (e: PallyConException.DownloadException) { - pallyConEvent?.sendPallyConEvent(config.contentUrl, EventType.DownloadError, e.msg) + pallyConEvent?.sendPallyConEvent(config.contentUrl ?: "", EventType.DownloadError, e.msg) } } } @@ -427,8 +432,12 @@ class PallyConSdk constructor(val context: Context) { } var isOK = true + if (config.contentId == null) { + return false + } + wvSDKList[config.contentId]?.let { - isOK = it.migrateDownloadedContent(config.contentId, null) + isOK = it.migrateDownloadedContent(config.contentId!!, null) } return isOK @@ -528,7 +537,8 @@ class PallyConSdk constructor(val context: Context) { url = config.contentUrl, localPath = "", drmConfig = drmConfig, - cookie = config.contentCookie + cookie = config.contentCookie, + httpHeaders = contentHeaders ) } } diff --git a/pallycon-drm-sdk/pallycon_drm_sdk_android/pubspec.yaml b/pallycon-drm-sdk/pallycon_drm_sdk_android/pubspec.yaml index 76c8945..e81a498 100644 --- a/pallycon-drm-sdk/pallycon_drm_sdk_android/pubspec.yaml +++ b/pallycon-drm-sdk/pallycon_drm_sdk_android/pubspec.yaml @@ -12,9 +12,9 @@ dependencies: flutter: sdk: flutter plugin_platform_interface: ^2.0.2 -# pallycon_drm_sdk_interface: -# path: ../pallycon_drm_sdk_interface - pallycon_drm_sdk_interface: ^1.1.0 + pallycon_drm_sdk_interface: + path: ../pallycon_drm_sdk_interface +# pallycon_drm_sdk_interface: ^1.1.0 dev_dependencies: flutter_test: diff --git a/pallycon-drm-sdk/pallycon_drm_sdk_interface/lib/src/enums/pallycon_event_type.dart b/pallycon-drm-sdk/pallycon_drm_sdk_interface/lib/src/enums/pallycon_event_type.dart index 673275a..f1cadea 100644 --- a/pallycon-drm-sdk/pallycon_drm_sdk_interface/lib/src/enums/pallycon_event_type.dart +++ b/pallycon-drm-sdk/pallycon_drm_sdk_interface/lib/src/enums/pallycon_event_type.dart @@ -27,6 +27,8 @@ enum PallyConEventType { detectedDeviceTimeModifiedError, /// Error that occurs when migrating from SDK migrationError, + /// Error that occurs when a license cipher from SDK + licenseCipherError, /// Unknown error type unknown } diff --git a/pallycon-drm-sdk/pallycon_drm_sdk_interface/lib/src/models/pallycon_event.dart b/pallycon-drm-sdk/pallycon_drm_sdk_interface/lib/src/models/pallycon_event.dart index 6406434..9f15bf4 100644 --- a/pallycon-drm-sdk/pallycon_drm_sdk_interface/lib/src/models/pallycon_event.dart +++ b/pallycon-drm-sdk/pallycon_drm_sdk_interface/lib/src/models/pallycon_event.dart @@ -128,6 +128,12 @@ class PallyConEvent { url: pallyConEvent['url'], message: pallyConEvent['message'] ); + case 'licenseCipherError': + return PallyConEvent( + eventType: PallyConEventType.licenseCipherError, + url: pallyConEvent['url'], + message: pallyConEvent['message'] + ); default: return PallyConEvent( eventType: PallyConEventType.unknown, diff --git a/player-samples/advanced/android/app/build.gradle b/player-samples/advanced/android/app/build.gradle index 5fd4cda..9fa587d 100644 --- a/player-samples/advanced/android/app/build.gradle +++ b/player-samples/advanced/android/app/build.gradle @@ -84,8 +84,7 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9" // 3rd library -// implementation files('/Users/sungjuyun/inka/pallycon-drm-sdk-flutter/player-samples/advanced/android/app/libs/PallyConLicenseCipher.aar') - implementation (name:"PallyConLicenseCipher", ext:"aar") +// implementation (name:"PallyConLicenseCipher", ext:"aar") // Gson implementation "com.google.code.gson:gson:2.9.1" diff --git a/player-samples/advanced/assets/user_content.json b/player-samples/advanced/assets/user_content.json index 7cad0ef..9798c5a 100644 --- a/player-samples/advanced/assets/user_content.json +++ b/player-samples/advanced/assets/user_content.json @@ -14,9 +14,7 @@ "media_type": "video", "stream_format": "dash", "video_profile": "Main", - "token": "eyJrZXlfcm90YXRpb24iOmZhbHNlLCJyZXNwb25zZV9mb3JtYXQiOiJvcmlnaW5hbCIsInVzZXJfaWQiOiJ0ZXN0VXNlciIsImRybV90eXBlIjoid2lkZXZpbmUiLCJzaXRlX2lkIjoiREVNTyIsImhhc2giOiIzMEZkbGxpWndcL1wvVCs3ajBrQWFCZW9pUGQ3cVIyVmVRWjR2aUowcEdMUms9IiwiY2lkIjoibXVsdGl0cmFja3MiLCJwb2xpY3kiOiI5V3FJV2tkaHB4VkdLOFBTSVljbkpzY3Z1QTlzeGd1YkxzZCthanVcL2Jva0M5UzIreEFQWVJibWZ6OHRvRUIzOFBkcjNCanh2SHdCdVpQNllLbWNONnR5RUltemtOc0NSNmZZZFJVbzBvYnpVZHVYTXUwMnY5cXpmRDF3c1FpZHRCbXVGVDYzSnNNSk83Q2dsclljMlpEWnlrdHR0UDVtRXp0eTJvWjlnRWlVZGFxQkxROUpubDZWUDJKN0x5WUFXSTZiNWtIN2lHQTFxOFgxNjFRXC9leThaNVB6amQ0YXNnMFFUSWl1MG91bjM3RnNGT28xcmJGXC9xQXNCM2FJRFA3UHNhY0xOVnNpeGxlQkhFelo2VFhFU3pVRXVrTVdJd0dvU3Y3QitXdWFub051SCtEVUYrWWpQck1ORm45NU5cL0N4SXlGOXp0OVJaZU9ENlRwOFA4R2hGSEZUU0lxUlhFT0pHSjE0VGJWekxCN1JqbTNrVmlGSERnbk42NTZLNEt0cTBsbjZLV21kWnE4aGxrTDVFQ1NtQlVDc2Q4eWt5RlwvdnJBZ0tlZ1laa2p4ZmdFZk9PekE2V2FxSWl5elU4dWFscVdURk9ISk1QK2N4S0pDXC9oMndmNzFVR0FPb0xaclM0QzhHMWJudXNZalJJSVRKZ2V6c3krXC9JM1l3UVpmYmpoUEVGWkhkcjhzbUhEcnZhNHFzc1ZPXC9CVHJIbG9SQ1k0UUJ0Vmc2YmtoODFEZXh5UVYzTWRMcllTeUV6MnA5anFPaGNraTQrRDB0XC9FYVEzVDgwZGR3SXRGQnlrSmhiOTJhRTRGSXNPcFN1bjVYKzVJVURoMnE0b2pyN3ExTSszRmlNaHBWdE1qRkpuelBOSVdDaksrZDdURzJ0SmR0YU5waEx3N25NXC9TSWZUVDR3eGVVMUE5OXdxNWRNYlVjZkxnenVmbk5CSkhQNUZ2NmdSMW5jWFgxZ1VoMkFIZVR6T1FOQ2JJeEpZZjgrME5LK0VVSVFmVXA0Nk1hSHJCOE1xUk5BbE1EK0dIM0R6bTF6TlJTN2xTR0pEQktWMGVTUWNVdHhBWVdHREl1WGwzQWp0anVvNWFNcFpVd3N4RkpvQlRjRWRzVE1qYWNpODJoTDluSW5LNEZwTjFscUJRXC9BZFZqbEUzc3U0TkdXbXJrOFltUlZrb3pZSml2TmFwZklwT3d0ek5OcU1QNThlbjZkeVphaHBPbml4VmZ4eVFQYmpwb2Z0UHRBVWQxNFlKRUtiY2JQZE5ybFl1bHNQbVwvZ0gxZTRpMTlGV2dEM2NSUWtyZHdaMjc0czdcL3NKQXluOWhVRE5KeUx1bGcrTT0iLCJ0aW1lc3RhbXAiOiIyMDIzLTEwLTI3VDA2OjM4OjQxWiJ9", - "license_server_url": "https://license-staging.pallycon.com/ri/licenseManager.do", - "license_cipher_path": "tables.bin" + "token": "eyJrZXlfcm90YXRpb24iOmZhbHNlLCJyZXNwb25zZV9mb3JtYXQiOiJvcmlnaW5hbCIsInVzZXJfaWQiOiJ0ZXN0VXNlciIsImRybV90eXBlIjoid2lkZXZpbmUiLCJzaXRlX2lkIjoiREVNTyIsImhhc2giOiJpSGlpQmM3U1QrWTR1T0h1VnVPQVNmNU1nTDVibDJMb1FuNzNHREtcLzltbz0iLCJjaWQiOiJtdWx0aXRyYWNrcyIsInBvbGljeSI6IjlXcUlXa2RocHhWR0s4UFNJWWNuSnNjdnVBOXN4Z3ViTHNkK2FqdVwvYm9tUVpQYnFJK3hhZVlmUW9jY2t2dUVmQWFxZFc1aFhnSk5nY1NTM2ZTN284TnNqd3N6ak11dnQrMFF6TGtaVlZObXgwa2VmT2Uyd0NzMlRJVGdkVTRCdk45YWJoZDByUWtNSXJtb0llb0pIcUllSGNSdlZmNlQxNFJtVEFERXBDWTQ2NHdxamNzWjA0Uk82Zm90Nm5yZjhXSGZ3QVNjek9kV1d6QStFRlRadDhRTWw5SFRueWVYK1g3YXp1Y2VmQjJBd2V0XC9hQm0rZXpmUERodFZuaUhsSiIsInRpbWVzdGFtcCI6IjIwMjItMDgtMDVUMDY6MDM6MjJaIn0=" }, { "video_codec": "AVC", diff --git a/player-samples/advanced/lib/features/advanced/presentation/controllers/drm_movie_controller.dart b/player-samples/advanced/lib/features/advanced/presentation/controllers/drm_movie_controller.dart index 0d082cb..672708d 100644 --- a/player-samples/advanced/lib/features/advanced/presentation/controllers/drm_movie_controller.dart +++ b/player-samples/advanced/lib/features/advanced/presentation/controllers/drm_movie_controller.dart @@ -77,6 +77,8 @@ class DrmMovieController extends SuperController> { break; case PallyConEventType.migrationError: break; + case PallyConEventType.licenseCipherError: + break; case PallyConEventType.unknown: break; }