react-native-theoplayer 1.6.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/android/build.gradle +70 -25
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/4.3.0/ads-wrapper-4.3.0.aar +0 -0
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/4.3.0/ads-wrapper-4.3.0.pom +9 -0
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml +13 -0
- package/android/src/main/java/com/theoplayer/PlayerConfigHelper.java +40 -0
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerPackage.java +8 -3
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerView.java +131 -28
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerViewManager.java +14 -1
- package/android/src/main/java/com/theoplayer/SourceHelper.java +137 -86
- package/android/src/main/java/com/theoplayer/VideoEventEmitter.java +44 -12
- package/android/src/main/java/com/theoplayer/abr/ABRConfigurationAdapter.kt +72 -0
- package/android/src/main/java/com/theoplayer/ads/AdEventAdapter.java +92 -0
- package/android/src/main/java/com/theoplayer/ads/AdInfo.java +168 -0
- package/android/src/main/java/com/theoplayer/ads/AdsModule.java +152 -0
- package/android/src/main/java/com/theoplayer/drm/ContentProtectionAdapter.kt +143 -0
- package/android/src/main/java/com/theoplayer/drm/ContentProtectionModule.kt +269 -0
- package/android/src/main/java/com/theoplayer/drm/KeySystemAdapter.kt +22 -0
- package/android/src/main/java/com/theoplayer/drm/ProxyContentProtectionIntegration.kt +33 -0
- package/android/src/main/java/com/theoplayer/drm/ProxyContentProtectionIntegrationFactory.kt +19 -0
- package/android/src/main/java/com/theoplayer/drm/RequestMethodAdapter.kt +28 -0
- package/android/src/main/java/com/theoplayer/track/QualityListAdapter.java +54 -0
- package/android/src/main/java/com/theoplayer/track/QualityListFilter.java +40 -0
- package/android/src/main/java/com/theoplayer/track/TrackListInfo.java +10 -2
- package/android/src/main/java/com/theoplayer/util/TypeUtils.kt +17 -0
- package/android/src/main/java/com/theoplayer/util/ViewResolver.java +42 -0
- package/ios/THEOplayerRCTAdAggregator.swift +158 -0
- package/ios/THEOplayerRCTAdsAPI.swift +296 -0
- package/ios/THEOplayerRCTBridge.m +65 -0
- package/ios/THEOplayerRCTContentProtectionAPI.swift +359 -0
- package/ios/THEOplayerRCTContentProtectionAggregator.swift +119 -0
- package/ios/THEOplayerRCTDebug.swift +11 -5
- package/ios/THEOplayerRCTMetadataAggregator.swift +1 -1
- package/ios/THEOplayerRCTNetworkUtils.swift +54 -0
- package/ios/THEOplayerRCTProxyContentProtectionIntegration.swift +155 -0
- package/ios/THEOplayerRCTProxyContentProtectionIntegrationFactory.swift +32 -0
- package/ios/THEOplayerRCTSourceDescriptionBuilder.swift +223 -30
- package/ios/THEOplayerRCTTypeUtils.swift +18 -0
- package/ios/THEOplayerRCTView.swift +109 -49
- package/ios/THEOplayerRCTViewAdEventHandler.swift +238 -0
- package/ios/{THEOplayerRCTViewEventHandler.swift → THEOplayerRCTViewMainEventHandler.swift} +7 -119
- package/ios/THEOplayerRCTViewTextTrackEventHandler.swift +134 -0
- package/ios/Theoplayer-Bridging-Header.h +3 -1
- package/ios/custom/Frameworks/ios/put_custom_ios_xcframework_here.txt +2 -0
- package/ios/custom/react-native-theoplayer_custom_ios.podspec +36 -0
- package/ios/custom/theofeatures.sh +14 -0
- package/lib/commonjs/api/THEOplayerView.js.map +1 -1
- package/lib/commonjs/api/abr/ABRConfiguration.js +2 -0
- package/lib/commonjs/api/abr/ABRConfiguration.js.map +1 -0
- package/lib/commonjs/api/abr/barrel.js +19 -0
- package/lib/commonjs/api/abr/barrel.js.map +1 -0
- package/lib/commonjs/api/ads/Ad.js +6 -0
- package/lib/commonjs/api/ads/Ad.js.map +1 -0
- package/lib/commonjs/api/ads/AdBreak.js +6 -0
- package/lib/commonjs/api/ads/AdBreak.js.map +1 -0
- package/lib/commonjs/api/ads/AdsAPI.js +6 -0
- package/lib/commonjs/api/ads/AdsAPI.js.map +1 -0
- package/lib/commonjs/api/ads/AdsConfiguration.js +6 -0
- package/lib/commonjs/api/ads/AdsConfiguration.js.map +1 -0
- package/lib/commonjs/api/ads/CompanionAd.js +2 -0
- package/lib/commonjs/api/ads/CompanionAd.js.map +1 -0
- package/lib/commonjs/api/ads/GoogleDai.js +2 -0
- package/lib/commonjs/api/ads/GoogleDai.js.map +1 -0
- package/lib/commonjs/api/ads/GoogleImaAd.js +6 -0
- package/lib/commonjs/api/ads/GoogleImaAd.js.map +1 -0
- package/lib/commonjs/api/ads/GoogleImaConfiguration.js +2 -0
- package/lib/commonjs/api/ads/GoogleImaConfiguration.js.map +1 -0
- package/lib/commonjs/api/ads/barrel.js +110 -0
- package/lib/commonjs/api/ads/barrel.js.map +1 -0
- package/lib/commonjs/api/barrel.js +58 -6
- package/lib/commonjs/api/barrel.js.map +1 -1
- package/lib/commonjs/api/config/PlayerConfiguration.js +4 -0
- package/lib/commonjs/api/config/PlayerConfiguration.js.map +1 -1
- package/lib/commonjs/api/drm/ContentProtectionAPI.js +6 -0
- package/lib/commonjs/api/drm/ContentProtectionAPI.js.map +1 -0
- package/lib/commonjs/api/drm/ContentProtectionIntegration.js +6 -0
- package/lib/commonjs/api/drm/ContentProtectionIntegration.js.map +1 -0
- package/lib/commonjs/api/drm/ContentProtectionIntegrationFactory.js +6 -0
- package/lib/commonjs/api/drm/ContentProtectionIntegrationFactory.js.map +1 -0
- package/lib/commonjs/api/drm/ContentProtectionRequest.js +2 -0
- package/lib/commonjs/api/drm/ContentProtectionRequest.js.map +1 -0
- package/lib/commonjs/api/drm/ContentProtectionResponse.js +6 -0
- package/lib/commonjs/api/drm/ContentProtectionResponse.js.map +1 -0
- package/lib/commonjs/api/drm/barrel.js +71 -0
- package/lib/commonjs/api/drm/barrel.js.map +1 -0
- package/lib/commonjs/api/event/AdEvent.js +89 -0
- package/lib/commonjs/api/event/AdEvent.js.map +1 -0
- package/lib/commonjs/api/event/barrel.js +13 -0
- package/lib/commonjs/api/event/barrel.js.map +1 -1
- package/lib/commonjs/api/source/SourceDescription.js.map +1 -1
- package/lib/commonjs/api/source/ads/FreeWheelAdDescription.js +6 -0
- package/lib/commonjs/api/source/ads/FreeWheelAdDescription.js.map +1 -0
- package/lib/commonjs/api/source/ads/IMAAdDescription.js +6 -0
- package/lib/commonjs/api/source/ads/IMAAdDescription.js.map +1 -0
- package/lib/commonjs/api/source/ads/SpotXAdDescription.js +6 -0
- package/lib/commonjs/api/source/ads/SpotXAdDescription.js.map +1 -0
- package/lib/commonjs/api/source/ads/THEOplayerAdDescription.js +6 -0
- package/lib/commonjs/api/source/ads/THEOplayerAdDescription.js.map +1 -0
- package/lib/commonjs/api/source/ads/barrel.js +84 -0
- package/lib/commonjs/api/source/ads/barrel.js.map +1 -0
- package/lib/commonjs/api/source/ads/ssai/GoogleDAIConfiguration.js +6 -0
- package/lib/commonjs/api/source/ads/ssai/GoogleDAIConfiguration.js.map +1 -0
- package/lib/commonjs/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.js +6 -0
- package/lib/commonjs/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.js.map +1 -0
- package/lib/commonjs/api/source/ads/ssai/ServerSideAdInsertionConfiguration.js +6 -0
- package/lib/commonjs/api/source/ads/ssai/ServerSideAdInsertionConfiguration.js.map +1 -0
- package/lib/commonjs/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.js +6 -0
- package/lib/commonjs/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.js.map +1 -0
- package/lib/commonjs/api/source/ads/ssai/barrel.js +58 -0
- package/lib/commonjs/api/source/ads/ssai/barrel.js.map +1 -0
- package/lib/commonjs/api/source/barrel.js +16 -3
- package/lib/commonjs/api/source/barrel.js.map +1 -1
- package/lib/commonjs/api/source/drm/DRMConfiguration.js.map +1 -1
- package/lib/commonjs/api/track/MediaTrack.js +29 -0
- package/lib/commonjs/api/track/MediaTrack.js.map +1 -1
- package/lib/commonjs/api/utils/TypeUtils.js +62 -0
- package/lib/commonjs/api/utils/TypeUtils.js.map +1 -0
- package/lib/commonjs/api/utils/barrel.js +19 -0
- package/lib/commonjs/api/utils/barrel.js.map +1 -0
- package/lib/commonjs/index.js +10 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/internal/THEOplayerView.js +42 -3
- package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
- package/lib/commonjs/internal/THEOplayerView.web.js +41 -2
- package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
- package/lib/commonjs/internal/ads/THEOplayerNativeAdsAPI.js +54 -0
- package/lib/commonjs/internal/ads/THEOplayerNativeAdsAPI.js.map +1 -0
- package/lib/commonjs/internal/ads/THEOplayerNativeGoogleDAI.js +34 -0
- package/lib/commonjs/internal/ads/THEOplayerNativeGoogleDAI.js.map +1 -0
- package/lib/commonjs/internal/ads/THEOplayerWebAdsAPI.js +78 -0
- package/lib/commonjs/internal/ads/THEOplayerWebAdsAPI.js.map +1 -0
- package/lib/commonjs/internal/ads/THEOplayerWebGoogleDAI.js +32 -0
- package/lib/commonjs/internal/ads/THEOplayerWebGoogleDAI.js.map +1 -0
- package/lib/commonjs/internal/drm/ContentProtectionRegistry.js +214 -0
- package/lib/commonjs/internal/drm/ContentProtectionRegistry.js.map +1 -0
- package/lib/commonjs/internal/drm/ContentProtectionRegistry.web.js +20 -0
- package/lib/commonjs/internal/drm/ContentProtectionRegistry.web.js.map +1 -0
- package/lib/commonjs/internal/drm/NativeCertificateRequest.js +41 -0
- package/lib/commonjs/internal/drm/NativeCertificateRequest.js.map +1 -0
- package/lib/commonjs/internal/drm/NativeCertificateResponse.js +41 -0
- package/lib/commonjs/internal/drm/NativeCertificateResponse.js.map +1 -0
- package/lib/commonjs/internal/drm/NativeContentProtectionEvent.js +2 -0
- package/lib/commonjs/internal/drm/NativeContentProtectionEvent.js.map +1 -0
- package/lib/commonjs/internal/drm/NativeLicenseRequest.js +44 -0
- package/lib/commonjs/internal/drm/NativeLicenseRequest.js.map +1 -0
- package/lib/commonjs/internal/drm/NativeLicenseResponse.js +41 -0
- package/lib/commonjs/internal/drm/NativeLicenseResponse.js.map +1 -0
- package/lib/commonjs/internal/utils/TypeUtils.js +41 -0
- package/lib/commonjs/internal/utils/TypeUtils.js.map +1 -0
- package/lib/commonjs/internal/web/TrackUtils.js +19 -0
- package/lib/commonjs/internal/web/TrackUtils.js.map +1 -1
- package/lib/module/api/THEOplayerView.js.map +1 -1
- package/lib/module/api/abr/ABRConfiguration.js +2 -0
- package/lib/module/api/abr/ABRConfiguration.js.map +1 -0
- package/lib/module/api/abr/barrel.js +2 -0
- package/lib/module/api/abr/barrel.js.map +1 -0
- package/lib/module/api/ads/Ad.js +2 -0
- package/lib/module/api/ads/Ad.js.map +1 -0
- package/lib/module/api/ads/AdBreak.js +2 -0
- package/lib/module/api/ads/AdBreak.js.map +1 -0
- package/lib/module/api/ads/AdsAPI.js +2 -0
- package/lib/module/api/ads/AdsAPI.js.map +1 -0
- package/lib/module/api/ads/AdsConfiguration.js +2 -0
- package/lib/module/api/ads/AdsConfiguration.js.map +1 -0
- package/lib/module/api/ads/CompanionAd.js +2 -0
- package/lib/module/api/ads/CompanionAd.js.map +1 -0
- package/lib/module/api/ads/GoogleDai.js +2 -0
- package/lib/module/api/ads/GoogleDai.js.map +1 -0
- package/lib/module/api/ads/GoogleImaAd.js +2 -0
- package/lib/module/api/ads/GoogleImaAd.js.map +1 -0
- package/lib/module/api/ads/GoogleImaConfiguration.js +2 -0
- package/lib/module/api/ads/GoogleImaConfiguration.js.map +1 -0
- package/lib/module/api/ads/barrel.js +9 -0
- package/lib/module/api/ads/barrel.js.map +1 -0
- package/lib/module/api/barrel.js +5 -1
- package/lib/module/api/barrel.js.map +1 -1
- package/lib/module/api/config/PlayerConfiguration.js +1 -1
- package/lib/module/api/config/PlayerConfiguration.js.map +1 -1
- package/lib/module/api/drm/ContentProtectionAPI.js +2 -0
- package/lib/module/api/drm/ContentProtectionAPI.js.map +1 -0
- package/lib/module/api/drm/ContentProtectionIntegration.js +2 -0
- package/lib/module/api/drm/ContentProtectionIntegration.js.map +1 -0
- package/lib/module/api/drm/ContentProtectionIntegrationFactory.js +2 -0
- package/lib/module/api/drm/ContentProtectionIntegrationFactory.js.map +1 -0
- package/lib/module/api/drm/ContentProtectionRequest.js +2 -0
- package/lib/module/api/drm/ContentProtectionRequest.js.map +1 -0
- package/lib/module/api/drm/ContentProtectionResponse.js +2 -0
- package/lib/module/api/drm/ContentProtectionResponse.js.map +1 -0
- package/lib/module/api/drm/barrel.js +6 -0
- package/lib/module/api/drm/barrel.js.map +1 -0
- package/lib/module/api/event/AdEvent.js +82 -0
- package/lib/module/api/event/AdEvent.js.map +1 -0
- package/lib/module/api/event/barrel.js +1 -0
- package/lib/module/api/event/barrel.js.map +1 -1
- package/lib/module/api/source/SourceDescription.js.map +1 -1
- package/lib/module/api/source/ads/FreeWheelAdDescription.js +2 -0
- package/lib/module/api/source/ads/FreeWheelAdDescription.js.map +1 -0
- package/lib/module/api/source/ads/IMAAdDescription.js +2 -0
- package/lib/module/api/source/ads/IMAAdDescription.js.map +1 -0
- package/lib/module/api/source/ads/SpotXAdDescription.js +2 -0
- package/lib/module/api/source/ads/SpotXAdDescription.js.map +1 -0
- package/lib/module/api/source/ads/THEOplayerAdDescription.js +2 -0
- package/lib/module/api/source/ads/THEOplayerAdDescription.js.map +1 -0
- package/lib/module/api/source/ads/barrel.js +7 -0
- package/lib/module/api/source/ads/barrel.js.map +1 -0
- package/lib/module/api/source/ads/ssai/GoogleDAIConfiguration.js +2 -0
- package/lib/module/api/source/ads/ssai/GoogleDAIConfiguration.js.map +1 -0
- package/lib/module/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.js +2 -0
- package/lib/module/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.js.map +1 -0
- package/lib/module/api/source/ads/ssai/ServerSideAdInsertionConfiguration.js +2 -0
- package/lib/module/api/source/ads/ssai/ServerSideAdInsertionConfiguration.js.map +1 -0
- package/lib/module/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.js +2 -0
- package/lib/module/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.js.map +1 -0
- package/lib/module/api/source/ads/ssai/barrel.js +5 -0
- package/lib/module/api/source/ads/ssai/barrel.js.map +1 -0
- package/lib/module/api/source/barrel.js +1 -0
- package/lib/module/api/source/barrel.js.map +1 -1
- package/lib/module/api/source/drm/DRMConfiguration.js.map +1 -1
- package/lib/module/api/track/MediaTrack.js +23 -1
- package/lib/module/api/track/MediaTrack.js.map +1 -1
- package/lib/module/api/utils/TypeUtils.js +36 -0
- package/lib/module/api/utils/TypeUtils.js.map +1 -0
- package/lib/module/api/utils/barrel.js +2 -0
- package/lib/module/api/utils/barrel.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/internal/THEOplayerView.js +40 -3
- package/lib/module/internal/THEOplayerView.js.map +1 -1
- package/lib/module/internal/THEOplayerView.web.js +42 -4
- package/lib/module/internal/THEOplayerView.web.js.map +1 -1
- package/lib/module/internal/ads/THEOplayerNativeAdsAPI.js +43 -0
- package/lib/module/internal/ads/THEOplayerNativeAdsAPI.js.map +1 -0
- package/lib/module/internal/ads/THEOplayerNativeGoogleDAI.js +24 -0
- package/lib/module/internal/ads/THEOplayerNativeGoogleDAI.js.map +1 -0
- package/lib/module/internal/ads/THEOplayerWebAdsAPI.js +68 -0
- package/lib/module/internal/ads/THEOplayerWebAdsAPI.js.map +1 -0
- package/lib/module/internal/ads/THEOplayerWebGoogleDAI.js +23 -0
- package/lib/module/internal/ads/THEOplayerWebGoogleDAI.js.map +1 -0
- package/lib/module/internal/drm/ContentProtectionRegistry.js +188 -0
- package/lib/module/internal/drm/ContentProtectionRegistry.js.map +1 -0
- package/lib/module/internal/drm/ContentProtectionRegistry.web.js +9 -0
- package/lib/module/internal/drm/ContentProtectionRegistry.web.js.map +1 -0
- package/lib/module/internal/drm/NativeCertificateRequest.js +31 -0
- package/lib/module/internal/drm/NativeCertificateRequest.js.map +1 -0
- package/lib/module/internal/drm/NativeCertificateResponse.js +30 -0
- package/lib/module/internal/drm/NativeCertificateResponse.js.map +1 -0
- package/lib/module/internal/drm/NativeContentProtectionEvent.js +2 -0
- package/lib/module/internal/drm/NativeContentProtectionEvent.js.map +1 -0
- package/lib/module/internal/drm/NativeLicenseRequest.js +34 -0
- package/lib/module/internal/drm/NativeLicenseRequest.js.map +1 -0
- package/lib/module/internal/drm/NativeLicenseResponse.js +30 -0
- package/lib/module/internal/drm/NativeLicenseResponse.js.map +1 -0
- package/lib/module/internal/utils/TypeUtils.js +24 -0
- package/lib/module/internal/utils/TypeUtils.js.map +1 -0
- package/lib/module/internal/web/TrackUtils.js +15 -0
- package/lib/module/internal/web/TrackUtils.js.map +1 -1
- package/lib/typescript/lib/commonjs/api/abr/ABRConfiguration.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/abr/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/ads/Ad.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/ads/AdBreak.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/ads/AdsAPI.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/ads/AdsConfiguration.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/ads/CompanionAd.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/ads/GoogleDai.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/ads/GoogleImaAd.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/ads/GoogleImaConfiguration.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/ads/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/config/PlayerConfiguration.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/drm/ContentProtectionAPI.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/drm/ContentProtectionIntegration.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/drm/ContentProtectionIntegrationFactory.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/drm/ContentProtectionRequest.d.ts +0 -0
- package/lib/typescript/lib/commonjs/api/drm/ContentProtectionResponse.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/drm/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/event/AdEvent.d.ts +2 -0
- package/lib/typescript/lib/commonjs/api/source/ads/FreeWheelAdDescription.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/ads/IMAAdDescription.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/ads/SpotXAdDescription.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/ads/THEOplayerAdDescription.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/ads/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/ads/ssai/GoogleDAIConfiguration.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/ads/ssai/ServerSideAdInsertionConfiguration.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/source/ads/ssai/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/api/track/MediaTrack.d.ts +8 -0
- package/lib/typescript/lib/commonjs/api/utils/TypeUtils.d.ts +13 -0
- package/lib/typescript/lib/commonjs/api/utils/barrel.d.ts +1 -0
- package/lib/typescript/lib/commonjs/index.d.ts +2 -0
- package/lib/typescript/lib/commonjs/internal/THEOplayerView.d.ts +5 -0
- package/lib/typescript/lib/commonjs/internal/THEOplayerView.web.d.ts +4 -0
- package/lib/typescript/lib/commonjs/internal/ads/THEOplayerNativeAdsAPI.d.ts +14 -0
- package/lib/typescript/lib/commonjs/internal/ads/THEOplayerNativeGoogleDAI.d.ts +9 -0
- package/lib/typescript/lib/commonjs/internal/ads/THEOplayerWebAdsAPI.d.ts +14 -0
- package/lib/typescript/lib/commonjs/internal/ads/THEOplayerWebGoogleDAI.d.ts +9 -0
- package/lib/typescript/lib/commonjs/internal/drm/ContentProtectionRegistry.d.ts +14 -0
- package/lib/typescript/lib/commonjs/internal/drm/ContentProtectionRegistry.web.d.ts +5 -0
- package/lib/typescript/lib/commonjs/internal/drm/NativeCertificateRequest.d.ts +18 -0
- package/lib/typescript/lib/commonjs/internal/drm/NativeCertificateResponse.d.ts +21 -0
- package/lib/typescript/lib/commonjs/internal/drm/NativeContentProtectionEvent.d.ts +0 -0
- package/lib/typescript/lib/commonjs/internal/drm/NativeLicenseRequest.d.ts +20 -0
- package/lib/typescript/lib/commonjs/internal/drm/NativeLicenseResponse.d.ts +22 -0
- package/lib/typescript/lib/commonjs/internal/utils/TypeUtils.d.ts +6 -0
- package/lib/typescript/lib/commonjs/internal/web/TrackUtils.d.ts +2 -0
- package/lib/typescript/lib/module/api/abr/ABRConfiguration.d.ts +0 -0
- package/lib/typescript/lib/module/api/abr/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/api/ads/Ad.d.ts +1 -0
- package/lib/typescript/lib/module/api/ads/AdBreak.d.ts +1 -0
- package/lib/typescript/lib/module/api/ads/AdsAPI.d.ts +1 -0
- package/lib/typescript/lib/module/api/ads/AdsConfiguration.d.ts +1 -0
- package/lib/typescript/lib/module/api/ads/CompanionAd.d.ts +0 -0
- package/lib/typescript/lib/module/api/ads/GoogleDai.d.ts +0 -0
- package/lib/typescript/lib/module/api/ads/GoogleImaAd.d.ts +1 -0
- package/lib/typescript/lib/module/api/ads/GoogleImaConfiguration.d.ts +0 -0
- package/lib/typescript/lib/module/api/ads/barrel.d.ts +5 -0
- package/lib/typescript/lib/module/api/barrel.d.ts +5 -1
- package/lib/typescript/lib/module/api/config/PlayerConfiguration.d.ts +1 -0
- package/lib/typescript/lib/module/api/config/barrel.d.ts +1 -1
- package/lib/typescript/lib/module/api/drm/ContentProtectionAPI.d.ts +1 -0
- package/lib/typescript/lib/module/api/drm/ContentProtectionIntegration.d.ts +1 -0
- package/lib/typescript/lib/module/api/drm/ContentProtectionIntegrationFactory.d.ts +1 -0
- package/lib/typescript/lib/module/api/drm/ContentProtectionRequest.d.ts +0 -0
- package/lib/typescript/lib/module/api/drm/ContentProtectionResponse.d.ts +1 -0
- package/lib/typescript/lib/module/api/drm/barrel.d.ts +4 -0
- package/lib/typescript/lib/module/api/event/AdEvent.d.ts +1 -0
- package/lib/typescript/lib/module/api/event/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/ads/FreeWheelAdDescription.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/ads/IMAAdDescription.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/ads/SpotXAdDescription.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/ads/THEOplayerAdDescription.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/ads/barrel.d.ts +5 -0
- package/lib/typescript/lib/module/api/source/ads/ssai/GoogleDAIConfiguration.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/ads/ssai/ServerSideAdInsertionConfiguration.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.d.ts +1 -0
- package/lib/typescript/lib/module/api/source/ads/ssai/barrel.d.ts +4 -0
- package/lib/typescript/lib/module/api/source/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/api/track/MediaTrack.d.ts +8 -1
- package/lib/typescript/lib/module/api/utils/TypeUtils.d.ts +12 -0
- package/lib/typescript/lib/module/api/utils/barrel.d.ts +1 -0
- package/lib/typescript/lib/module/index.d.ts +1 -0
- package/lib/typescript/lib/module/internal/THEOplayerView.d.ts +8 -0
- package/lib/typescript/lib/module/internal/THEOplayerView.web.d.ts +4 -0
- package/lib/typescript/lib/module/internal/ads/THEOplayerNativeAdsAPI.d.ts +13 -0
- package/lib/typescript/lib/module/internal/ads/THEOplayerNativeGoogleDAI.d.ts +8 -0
- package/lib/typescript/lib/module/internal/ads/THEOplayerWebAdsAPI.d.ts +13 -0
- package/lib/typescript/lib/module/internal/ads/THEOplayerWebGoogleDAI.d.ts +8 -0
- package/lib/typescript/lib/module/internal/drm/ContentProtectionRegistry.d.ts +13 -0
- package/lib/typescript/lib/module/internal/drm/ContentProtectionRegistry.web.d.ts +4 -0
- package/lib/typescript/lib/module/internal/drm/NativeCertificateRequest.d.ts +17 -0
- package/lib/typescript/lib/module/internal/drm/NativeCertificateResponse.d.ts +20 -0
- package/lib/typescript/lib/module/internal/drm/NativeContentProtectionEvent.d.ts +0 -0
- package/lib/typescript/lib/module/internal/drm/NativeLicenseRequest.d.ts +19 -0
- package/lib/typescript/lib/module/internal/drm/NativeLicenseResponse.d.ts +21 -0
- package/lib/typescript/lib/module/internal/utils/TypeUtils.d.ts +5 -0
- package/lib/typescript/lib/module/internal/web/TrackUtils.d.ts +2 -0
- package/lib/typescript/src/api/THEOplayerView.d.ts +25 -4
- package/lib/typescript/src/api/abr/ABRConfiguration.d.ts +95 -0
- package/lib/typescript/src/api/abr/barrel.d.ts +1 -0
- package/lib/typescript/src/api/ads/Ad.d.ts +238 -0
- package/lib/typescript/src/api/ads/AdBreak.d.ts +39 -0
- package/lib/typescript/src/api/ads/AdsAPI.d.ts +46 -0
- package/lib/typescript/src/api/ads/AdsConfiguration.d.ts +69 -0
- package/lib/typescript/src/api/ads/CompanionAd.d.ts +59 -0
- package/lib/typescript/src/api/ads/GoogleDai.d.ts +29 -0
- package/lib/typescript/src/api/ads/GoogleImaAd.d.ts +78 -0
- package/lib/typescript/src/api/ads/GoogleImaConfiguration.d.ts +13 -0
- package/lib/typescript/src/api/ads/barrel.d.ts +8 -0
- package/lib/typescript/src/api/barrel.d.ts +5 -1
- package/lib/typescript/src/api/config/PlayerConfiguration.d.ts +5 -0
- package/lib/typescript/src/api/drm/ContentProtectionAPI.d.ts +5 -0
- package/lib/typescript/src/api/drm/ContentProtectionIntegration.d.ts +86 -0
- package/lib/typescript/src/api/drm/ContentProtectionIntegrationFactory.d.ts +15 -0
- package/lib/typescript/src/api/drm/ContentProtectionRequest.d.ts +56 -0
- package/lib/typescript/src/api/drm/ContentProtectionResponse.d.ts +56 -0
- package/lib/typescript/src/api/drm/barrel.d.ts +5 -0
- package/lib/typescript/src/api/event/AdEvent.d.ts +13 -0
- package/lib/typescript/src/api/event/barrel.d.ts +1 -0
- package/lib/typescript/src/api/source/SourceDescription.d.ts +8 -0
- package/lib/typescript/src/api/source/ads/FreeWheelAdDescription.d.ts +85 -0
- package/lib/typescript/src/api/source/ads/IMAAdDescription.d.ts +25 -0
- package/lib/typescript/src/api/source/ads/SpotXAdDescription.d.ts +115 -0
- package/lib/typescript/src/api/source/ads/THEOplayerAdDescription.d.ts +32 -0
- package/lib/typescript/src/api/source/ads/barrel.d.ts +6 -0
- package/lib/typescript/src/api/source/ads/ssai/GoogleDAIConfiguration.d.ts +130 -0
- package/lib/typescript/src/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.d.ts +27 -0
- package/lib/typescript/src/api/source/ads/ssai/ServerSideAdInsertionConfiguration.d.ts +26 -0
- package/lib/typescript/src/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.d.ts +46 -0
- package/lib/typescript/src/api/source/ads/ssai/barrel.d.ts +4 -0
- package/lib/typescript/src/api/source/barrel.d.ts +1 -0
- package/lib/typescript/src/api/source/drm/DRMConfiguration.d.ts +0 -30
- package/lib/typescript/src/api/track/MediaTrack.d.ts +5 -2
- package/lib/typescript/src/api/utils/TypeUtils.d.ts +20 -0
- package/lib/typescript/src/api/utils/barrel.d.ts +1 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/internal/THEOplayerView.d.ts +10 -4
- package/lib/typescript/src/internal/THEOplayerView.web.d.ts +7 -2
- package/lib/typescript/src/internal/ads/THEOplayerNativeAdsAPI.d.ts +17 -0
- package/lib/typescript/src/internal/ads/THEOplayerNativeGoogleDAI.d.ts +10 -0
- package/lib/typescript/src/internal/ads/THEOplayerWebAdsAPI.d.ts +15 -0
- package/lib/typescript/src/internal/ads/THEOplayerWebGoogleDAI.d.ts +10 -0
- package/lib/typescript/src/internal/drm/ContentProtectionRegistry.d.ts +19 -0
- package/lib/typescript/src/internal/drm/ContentProtectionRegistry.web.d.ts +5 -0
- package/lib/typescript/src/internal/drm/NativeCertificateRequest.d.ts +13 -0
- package/lib/typescript/src/internal/drm/NativeCertificateResponse.d.ts +18 -0
- package/lib/typescript/src/internal/drm/NativeContentProtectionEvent.d.ts +5 -0
- package/lib/typescript/src/internal/drm/NativeLicenseRequest.d.ts +14 -0
- package/lib/typescript/src/internal/drm/NativeLicenseResponse.d.ts +18 -0
- package/lib/typescript/src/internal/utils/TypeUtils.d.ts +5 -0
- package/lib/typescript/src/internal/web/TrackUtils.d.ts +3 -1
- package/package.json +4 -3
- package/src/api/THEOplayerView.ts +29 -4
- package/src/api/abr/ABRConfiguration.ts +103 -0
- package/src/api/abr/barrel.ts +1 -0
- package/src/api/ads/Ad.ts +267 -0
- package/src/api/ads/AdBreak.ts +44 -0
- package/src/api/ads/AdsAPI.ts +53 -0
- package/src/api/ads/AdsConfiguration.ts +76 -0
- package/src/api/ads/CompanionAd.ts +65 -0
- package/src/api/ads/GoogleDai.ts +32 -0
- package/src/api/ads/GoogleImaAd.ts +86 -0
- package/src/api/ads/GoogleImaConfiguration.ts +13 -0
- package/src/api/ads/barrel.ts +8 -0
- package/src/api/barrel.ts +5 -1
- package/src/api/config/PlayerConfiguration.ts +7 -0
- package/src/api/drm/ContentProtectionAPI.ts +6 -0
- package/src/api/drm/ContentProtectionIntegration.ts +93 -0
- package/src/api/drm/ContentProtectionIntegrationFactory.ts +16 -0
- package/src/api/drm/ContentProtectionRequest.ts +60 -0
- package/src/api/drm/ContentProtectionResponse.ts +62 -0
- package/src/api/drm/barrel.ts +5 -0
- package/src/api/event/AdEvent.ts +117 -0
- package/src/api/event/barrel.ts +1 -0
- package/src/api/source/SourceDescription.ts +9 -0
- package/src/api/source/ads/FreeWheelAdDescription.ts +97 -0
- package/src/api/source/ads/IMAAdDescription.ts +26 -0
- package/src/api/source/ads/SpotXAdDescription.ts +126 -0
- package/src/api/source/ads/THEOplayerAdDescription.ts +34 -0
- package/src/api/source/ads/barrel.ts +6 -0
- package/src/api/source/ads/ssai/GoogleDAIConfiguration.ts +145 -0
- package/src/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.ts +30 -0
- package/src/api/source/ads/ssai/ServerSideAdInsertionConfiguration.ts +28 -0
- package/src/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.ts +51 -0
- package/src/api/source/ads/ssai/barrel.ts +4 -0
- package/src/api/source/barrel.ts +1 -0
- package/src/api/source/drm/DRMConfiguration.ts +0 -35
- package/src/api/track/MediaTrack.ts +22 -2
- package/src/api/utils/TypeUtils.ts +39 -0
- package/src/api/utils/barrel.ts +1 -0
- package/src/index.tsx +1 -0
- package/src/internal/THEOplayerView.tsx +49 -8
- package/src/internal/THEOplayerView.web.tsx +37 -7
- package/src/internal/ads/THEOplayerNativeAdsAPI.ts +44 -0
- package/src/internal/ads/THEOplayerNativeGoogleDAI.ts +23 -0
- package/src/internal/ads/THEOplayerWebAdsAPI.ts +51 -0
- package/src/internal/ads/THEOplayerWebGoogleDAI.ts +22 -0
- package/src/internal/drm/ContentProtectionRegistry.ts +173 -0
- package/src/internal/drm/ContentProtectionRegistry.web.ts +10 -0
- package/src/internal/drm/NativeCertificateRequest.ts +41 -0
- package/src/internal/drm/NativeCertificateResponse.ts +45 -0
- package/src/internal/drm/NativeContentProtectionEvent.ts +5 -0
- package/src/internal/drm/NativeLicenseRequest.ts +39 -0
- package/src/internal/drm/NativeLicenseResponse.ts +45 -0
- package/src/internal/utils/TypeUtils.ts +39 -0
- package/src/internal/web/TrackUtils.ts +22 -1
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
package com.theoplayer.drm
|
|
2
|
+
|
|
3
|
+
import android.os.Handler
|
|
4
|
+
import android.os.Looper
|
|
5
|
+
import android.util.Base64
|
|
6
|
+
import android.util.Log
|
|
7
|
+
import com.facebook.react.bridge.*
|
|
8
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter
|
|
9
|
+
import com.theoplayer.BuildConfig
|
|
10
|
+
import com.theoplayer.android.api.THEOplayerGlobal
|
|
11
|
+
import com.theoplayer.android.api.contentprotection.*
|
|
12
|
+
import com.theoplayer.android.api.error.ErrorCode
|
|
13
|
+
import com.theoplayer.android.api.error.THEOplayerException
|
|
14
|
+
import com.theoplayer.android.api.source.drm.DRMConfiguration
|
|
15
|
+
import com.theoplayer.drm.ContentProtectionAdapter.fromDRMConfiguration
|
|
16
|
+
|
|
17
|
+
data class BridgeRequest(
|
|
18
|
+
val onResult: HashMap<String, (result: ReadableMap) -> Unit>,
|
|
19
|
+
val onError: (exception: THEOplayerException) -> Unit,
|
|
20
|
+
val onTimeout: Runnable
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
private const val TAG = "ContentProtectionModule"
|
|
24
|
+
|
|
25
|
+
private const val EVENT_CERTIFICATE_REQUEST = "onCertificateRequest"
|
|
26
|
+
private const val EVENT_CERTIFICATE_REQUEST_PROCESSED_AS_REQUEST = "onCertificateRequestProcessedAsRequest"
|
|
27
|
+
private const val EVENT_CERTIFICATE_REQUEST_PROCESSED_AS_CERTIFICATE = "onCertificateRequestProcessedAsCertificate"
|
|
28
|
+
private const val EVENT_CERTIFICATE_RESPONSE = "onCertificateResponse"
|
|
29
|
+
private const val EVENT_CERTIFICATE_RESPONSE_PROCESSED = "onCertificateResponseProcessed"
|
|
30
|
+
private const val EVENT_BUILD_INTEGRATION = "onBuildIntegration"
|
|
31
|
+
private const val EVENT_BUILD_PROCESSED = "onBuildProcessed"
|
|
32
|
+
private const val EVENT_LICENSE_REQUEST = "onLicenseRequest"
|
|
33
|
+
private const val EVENT_LICENSE_REQUEST_PROCESSED_AS_REQUEST = "onLicenseRequestProcessedAsRequest"
|
|
34
|
+
private const val EVENT_LICENSE_REQUEST_PROCESSED_AS_LICENSE = "onLicenseRequestProcessedAsLicense"
|
|
35
|
+
private const val EVENT_LICENSE_RESPONSE = "onLicenseResponse"
|
|
36
|
+
private const val EVENT_LICENSE_RESPONSE_PROCESSED = "onLicenseResponseProcessed"
|
|
37
|
+
|
|
38
|
+
class ContentProtectionModule(private val context: ReactApplicationContext) :
|
|
39
|
+
ReactContextBaseJavaModule(context) {
|
|
40
|
+
|
|
41
|
+
companion object {
|
|
42
|
+
const val REQUEST_TIMEOUT_MS = 10000L
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private val handler = Handler(Looper.getMainLooper())
|
|
46
|
+
|
|
47
|
+
private var requestId: Int = 0
|
|
48
|
+
|
|
49
|
+
private val requestQueue: HashMap<String, BridgeRequest> = HashMap()
|
|
50
|
+
|
|
51
|
+
override fun getName(): String {
|
|
52
|
+
return TAG
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@ReactMethod
|
|
56
|
+
fun registerContentProtectionIntegration(integrationId: String, keySystemIdStr: String) {
|
|
57
|
+
val keySystemId = KeySystemAdapter.fromString(keySystemIdStr)
|
|
58
|
+
if (keySystemId != null) {
|
|
59
|
+
handler.post {
|
|
60
|
+
val factory = ProxyContentProtectionIntegrationFactory(integrationId, keySystemId, this)
|
|
61
|
+
THEOplayerGlobal.getSharedInstance(context.applicationContext)
|
|
62
|
+
.registerContentProtectionIntegration(integrationId, keySystemId, factory)
|
|
63
|
+
}
|
|
64
|
+
} else {
|
|
65
|
+
Log.e(TAG, "Invalid keySystemId $keySystemIdStr")
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@ReactMethod
|
|
70
|
+
fun onBuildProcessed(payload: ReadableMap) {
|
|
71
|
+
receive(EVENT_BUILD_PROCESSED, payload)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@ReactMethod
|
|
75
|
+
fun onCertificateRequestProcessedAsCertificate(payload: ReadableMap) {
|
|
76
|
+
receive(EVENT_CERTIFICATE_REQUEST_PROCESSED_AS_CERTIFICATE, payload)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@ReactMethod
|
|
80
|
+
fun onCertificateRequestProcessedAsRequest(payload: ReadableMap) {
|
|
81
|
+
receive(EVENT_CERTIFICATE_REQUEST_PROCESSED_AS_REQUEST, payload)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@ReactMethod
|
|
85
|
+
fun onCertificateResponseProcessed(payload: ReadableMap) {
|
|
86
|
+
receive(EVENT_CERTIFICATE_RESPONSE_PROCESSED, payload)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@ReactMethod
|
|
90
|
+
fun onLicenseRequestProcessedAsLicense(payload: ReadableMap) {
|
|
91
|
+
receive(EVENT_LICENSE_REQUEST_PROCESSED_AS_LICENSE, payload)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@ReactMethod
|
|
95
|
+
fun onLicenseRequestProcessedAsRequest(payload: ReadableMap) {
|
|
96
|
+
receive(EVENT_LICENSE_REQUEST_PROCESSED_AS_REQUEST, payload)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@ReactMethod
|
|
100
|
+
fun onLicenseResponseProcessed(payload: ReadableMap) {
|
|
101
|
+
receive(EVENT_LICENSE_RESPONSE_PROCESSED, payload)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
fun onBuild(integrationId: String, keySystemId: KeySystemId, config: DRMConfiguration?) {
|
|
105
|
+
val payload = createBridgeData(integrationId, keySystemId)
|
|
106
|
+
if (config != null) {
|
|
107
|
+
payload.putMap(PROP_DRM_CONFIG, fromDRMConfiguration(config))
|
|
108
|
+
}
|
|
109
|
+
emit(
|
|
110
|
+
EVENT_BUILD_INTEGRATION, payload,
|
|
111
|
+
onResult = hashMapOf(),
|
|
112
|
+
onError = {}
|
|
113
|
+
)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
fun onCertificateRequest(
|
|
117
|
+
integrationId: String,
|
|
118
|
+
keySystemId: KeySystemId,
|
|
119
|
+
request: Request,
|
|
120
|
+
callback: CertificateRequestCallback
|
|
121
|
+
) {
|
|
122
|
+
val payload = ContentProtectionAdapter.fromRequest(integrationId, keySystemId, request)
|
|
123
|
+
emit(
|
|
124
|
+
EVENT_CERTIFICATE_REQUEST, payload,
|
|
125
|
+
onResult = hashMapOf(
|
|
126
|
+
// Pass modified request
|
|
127
|
+
EVENT_CERTIFICATE_REQUEST_PROCESSED_AS_REQUEST to { result ->
|
|
128
|
+
request.url = result.getString(PROP_URL)!!
|
|
129
|
+
request.method = RequestMethodAdapter.fromString(result.getString(PROP_METHOD))
|
|
130
|
+
request.headers = result.getMap(PROP_HEADERS)?.toHashMap() as HashMap<String, String>
|
|
131
|
+
request.body = Base64.decode(result.getString(PROP_BASE64_BODY), Base64.DEFAULT)
|
|
132
|
+
callback.request(request)
|
|
133
|
+
},
|
|
134
|
+
// Pass response
|
|
135
|
+
EVENT_CERTIFICATE_REQUEST_PROCESSED_AS_CERTIFICATE to { result ->
|
|
136
|
+
callback.respond(Base64.decode(result.getString(PROP_BASE64_BODY), Base64.DEFAULT))
|
|
137
|
+
}
|
|
138
|
+
),
|
|
139
|
+
onError = { error -> callback.error(error) }
|
|
140
|
+
)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
fun onCertificateResponse(
|
|
144
|
+
integrationId: String,
|
|
145
|
+
keySystemId: KeySystemId,
|
|
146
|
+
response: Response,
|
|
147
|
+
callback: CertificateResponseCallback
|
|
148
|
+
) {
|
|
149
|
+
val payload = ContentProtectionAdapter.fromResponse(integrationId, keySystemId, response)
|
|
150
|
+
emit(
|
|
151
|
+
EVENT_CERTIFICATE_RESPONSE, payload,
|
|
152
|
+
onResult = hashMapOf(
|
|
153
|
+
EVENT_CERTIFICATE_RESPONSE_PROCESSED to { result ->
|
|
154
|
+
val body = Base64.decode(result.getString(PROP_BASE64_BODY), Base64.DEFAULT)
|
|
155
|
+
callback.respond(body)
|
|
156
|
+
},
|
|
157
|
+
),
|
|
158
|
+
onError = { error -> callback.error(error) }
|
|
159
|
+
)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
fun onLicenseRequest(
|
|
163
|
+
integrationId: String,
|
|
164
|
+
keySystemId: KeySystemId,
|
|
165
|
+
request: Request,
|
|
166
|
+
callback: LicenseRequestCallback
|
|
167
|
+
) {
|
|
168
|
+
val payload = ContentProtectionAdapter.fromRequest(integrationId, keySystemId, request)
|
|
169
|
+
emit(
|
|
170
|
+
EVENT_LICENSE_REQUEST, payload,
|
|
171
|
+
onResult = hashMapOf(
|
|
172
|
+
// Pass modified request
|
|
173
|
+
EVENT_LICENSE_REQUEST_PROCESSED_AS_REQUEST to { result ->
|
|
174
|
+
request.url = result.getString(PROP_URL)!!
|
|
175
|
+
request.method = RequestMethodAdapter.fromString(result.getString(PROP_METHOD))
|
|
176
|
+
request.headers = result.getMap(PROP_HEADERS)?.toHashMap() as HashMap<String, String>
|
|
177
|
+
request.body = Base64.decode(result.getString(PROP_BASE64_BODY), Base64.DEFAULT)
|
|
178
|
+
callback.request(request)
|
|
179
|
+
},
|
|
180
|
+
// Pass license response
|
|
181
|
+
EVENT_LICENSE_REQUEST_PROCESSED_AS_LICENSE to { result ->
|
|
182
|
+
callback.respond(Base64.decode(result.getString(PROP_BASE64_BODY), Base64.DEFAULT))
|
|
183
|
+
}
|
|
184
|
+
),
|
|
185
|
+
onError = { error -> callback.error(error) }
|
|
186
|
+
)
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
fun onLicenseResponse(
|
|
190
|
+
integrationId: String,
|
|
191
|
+
keySystemId: KeySystemId,
|
|
192
|
+
response: Response,
|
|
193
|
+
callback: LicenseResponseCallback
|
|
194
|
+
) {
|
|
195
|
+
val payload = ContentProtectionAdapter.fromResponse(integrationId, keySystemId, response)
|
|
196
|
+
emit(
|
|
197
|
+
EVENT_LICENSE_RESPONSE, payload,
|
|
198
|
+
onResult = hashMapOf(
|
|
199
|
+
// Pass response
|
|
200
|
+
EVENT_LICENSE_RESPONSE_PROCESSED to { result ->
|
|
201
|
+
val body = Base64.decode(result.getString(PROP_BASE64_BODY), Base64.DEFAULT)
|
|
202
|
+
callback.respond(body)
|
|
203
|
+
}
|
|
204
|
+
),
|
|
205
|
+
onError = { error -> callback.error(error) }
|
|
206
|
+
)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
@ReactMethod
|
|
210
|
+
fun addListener(eventName: String?) {
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@ReactMethod
|
|
214
|
+
fun removeListeners(count: Int?) {
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
private fun emit(
|
|
218
|
+
eventName: String,
|
|
219
|
+
payload: WritableMap,
|
|
220
|
+
onResult: HashMap<String, (result: ReadableMap) -> Unit>,
|
|
221
|
+
onError: (error: THEOplayerException) -> Unit
|
|
222
|
+
) {
|
|
223
|
+
val requestId = createRequestId()
|
|
224
|
+
if (BuildConfig.DEBUG) {
|
|
225
|
+
Log.d(TAG, "emit $eventName ($requestId)")
|
|
226
|
+
}
|
|
227
|
+
payload.putString(PROP_REQUEST_ID, requestId)
|
|
228
|
+
val onTimeout = {
|
|
229
|
+
onError(
|
|
230
|
+
THEOplayerException(ErrorCode.CONTENT_PROTECTION_ERROR, "$eventName time-out.")
|
|
231
|
+
)
|
|
232
|
+
}
|
|
233
|
+
requestQueue[requestId] = BridgeRequest(onResult, onError, onTimeout)
|
|
234
|
+
handler.postDelayed(onTimeout, REQUEST_TIMEOUT_MS)
|
|
235
|
+
context
|
|
236
|
+
.getJSModule(RCTDeviceEventEmitter::class.java)
|
|
237
|
+
.emit(eventName, payload)
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
private fun receive(eventName: String, payload: ReadableMap) {
|
|
241
|
+
val requestId = payload.getString(PROP_REQUEST_ID)
|
|
242
|
+
if (BuildConfig.DEBUG) {
|
|
243
|
+
Log.d(TAG, "receive $eventName ($requestId)")
|
|
244
|
+
}
|
|
245
|
+
val request = requestQueue.remove(requestId)
|
|
246
|
+
if (request != null) {
|
|
247
|
+
handler.removeCallbacks(request.onTimeout)
|
|
248
|
+
val onEventResult = request.onResult[eventName]
|
|
249
|
+
if (onEventResult != null) {
|
|
250
|
+
onEventResult(payload)
|
|
251
|
+
} else {
|
|
252
|
+
request.onError(
|
|
253
|
+
THEOplayerException(ErrorCode.CONTENT_PROTECTION_ERROR, "Unknown bridge event: $eventName.")
|
|
254
|
+
)
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
private fun createRequestId(): String {
|
|
260
|
+
return (requestId++).toString()
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
private fun createBridgeData(integrationId: String, keySystemId: KeySystemId): WritableMap {
|
|
264
|
+
return Arguments.createMap().apply {
|
|
265
|
+
putString(PROP_INTEGRATION_ID, integrationId)
|
|
266
|
+
putString(PROP_KEYSYSTEM_ID, KeySystemAdapter.toString(keySystemId))
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
package com.theoplayer.drm
|
|
2
|
+
|
|
3
|
+
import com.theoplayer.android.api.contentprotection.KeySystemId
|
|
4
|
+
|
|
5
|
+
object KeySystemAdapter {
|
|
6
|
+
fun fromString(keySystemStr: String): KeySystemId? {
|
|
7
|
+
return when (keySystemStr) {
|
|
8
|
+
"widevine" -> KeySystemId.WIDEVINE
|
|
9
|
+
"playready" -> KeySystemId.PLAYREADY
|
|
10
|
+
"fairplay" -> KeySystemId.FAIRPLAY
|
|
11
|
+
else -> null
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
fun toString(keySystemId: KeySystemId): String {
|
|
16
|
+
return when (keySystemId) {
|
|
17
|
+
KeySystemId.WIDEVINE -> "widevine"
|
|
18
|
+
KeySystemId.PLAYREADY -> "playready"
|
|
19
|
+
KeySystemId.FAIRPLAY -> "fairplay"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
package com.theoplayer.drm
|
|
2
|
+
|
|
3
|
+
import com.theoplayer.android.api.contentprotection.*
|
|
4
|
+
import com.theoplayer.android.api.source.drm.DRMConfiguration
|
|
5
|
+
|
|
6
|
+
class ProxyContentProtectionIntegration(
|
|
7
|
+
private val integrationId: String,
|
|
8
|
+
private val keySystemId: KeySystemId,
|
|
9
|
+
config: DRMConfiguration?,
|
|
10
|
+
private val module: ContentProtectionModule
|
|
11
|
+
) :
|
|
12
|
+
ContentProtectionIntegration() {
|
|
13
|
+
|
|
14
|
+
init {
|
|
15
|
+
module.onBuild(integrationId, keySystemId, config)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
override fun onCertificateRequest(request: Request, callback: CertificateRequestCallback) {
|
|
19
|
+
module.onCertificateRequest(integrationId, keySystemId, request, callback)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
override fun onCertificateResponse(response: Response, callback: CertificateResponseCallback) {
|
|
23
|
+
module.onCertificateResponse(integrationId, keySystemId, response, callback)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
override fun onLicenseRequest(request: Request, callback: LicenseRequestCallback) {
|
|
27
|
+
module.onLicenseRequest(integrationId, keySystemId, request, callback)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
override fun onLicenseResponse(response: Response, callback: LicenseResponseCallback) {
|
|
31
|
+
module.onLicenseResponse(integrationId, keySystemId, response, callback)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
package com.theoplayer.drm
|
|
2
|
+
|
|
3
|
+
import com.theoplayer.android.api.contentprotection.ContentProtectionIntegration
|
|
4
|
+
import com.theoplayer.android.api.contentprotection.ContentProtectionIntegrationFactory
|
|
5
|
+
import com.theoplayer.android.api.contentprotection.KeySystemId
|
|
6
|
+
import com.theoplayer.android.api.source.drm.DRMConfiguration
|
|
7
|
+
|
|
8
|
+
class ProxyContentProtectionIntegrationFactory(
|
|
9
|
+
private val integrationId: String,
|
|
10
|
+
private val keySystemId: KeySystemId,
|
|
11
|
+
private val module: ContentProtectionModule
|
|
12
|
+
) :
|
|
13
|
+
ContentProtectionIntegrationFactory {
|
|
14
|
+
override fun build(
|
|
15
|
+
config: DRMConfiguration?
|
|
16
|
+
): ContentProtectionIntegration {
|
|
17
|
+
return ProxyContentProtectionIntegration(integrationId, keySystemId, config, module)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
package com.theoplayer.drm
|
|
2
|
+
|
|
3
|
+
import com.theoplayer.android.api.contentprotection.RequestMethod
|
|
4
|
+
|
|
5
|
+
object RequestMethodAdapter {
|
|
6
|
+
fun fromString(requestMethod: String?): RequestMethod {
|
|
7
|
+
return when (requestMethod?.lowercase()) {
|
|
8
|
+
"get" -> RequestMethod.GET
|
|
9
|
+
"post" -> RequestMethod.POST
|
|
10
|
+
"put" -> RequestMethod.PUT
|
|
11
|
+
"delete" -> RequestMethod.DELETE
|
|
12
|
+
"head" -> RequestMethod.HEAD
|
|
13
|
+
"options" -> RequestMethod.OPTIONS
|
|
14
|
+
else -> RequestMethod.GET
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
fun toString(requestMethod: RequestMethod): String {
|
|
19
|
+
return when (requestMethod) {
|
|
20
|
+
RequestMethod.GET -> "get"
|
|
21
|
+
RequestMethod.POST -> "post"
|
|
22
|
+
RequestMethod.PUT -> "put"
|
|
23
|
+
RequestMethod.DELETE -> "delete"
|
|
24
|
+
RequestMethod.HEAD -> "head"
|
|
25
|
+
RequestMethod.OPTIONS -> "options"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
package com.theoplayer.track;
|
|
2
|
+
|
|
3
|
+
import androidx.annotation.NonNull;
|
|
4
|
+
|
|
5
|
+
import com.theoplayer.android.api.player.track.mediatrack.quality.Quality;
|
|
6
|
+
import com.theoplayer.android.api.player.track.mediatrack.quality.QualityList;
|
|
7
|
+
|
|
8
|
+
import java.util.ArrayList;
|
|
9
|
+
import java.util.Collections;
|
|
10
|
+
import java.util.Comparator;
|
|
11
|
+
import java.util.Iterator;
|
|
12
|
+
import java.util.List;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Adapts an Android List to a QualityList.
|
|
16
|
+
*/
|
|
17
|
+
public class QualityListAdapter<Q extends Quality> implements QualityList<Q> {
|
|
18
|
+
private List<Q> qualities;
|
|
19
|
+
|
|
20
|
+
public QualityListAdapter(@NonNull List<Q> qualities) {
|
|
21
|
+
this.qualities = qualities;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public QualityListAdapter(@NonNull QualityList<Q> qualities) {
|
|
25
|
+
this.qualities = new ArrayList<Q>();
|
|
26
|
+
for (final Q quality : qualities) {
|
|
27
|
+
this.qualities.add(quality);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@Override
|
|
32
|
+
public int length() {
|
|
33
|
+
return qualities.size();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@Override
|
|
37
|
+
public Q getItem(int i) {
|
|
38
|
+
return (i >= 0 && i < length()) ? qualities.get(i) : null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@NonNull
|
|
42
|
+
@Override
|
|
43
|
+
public Iterator<Q> iterator() {
|
|
44
|
+
return qualities.iterator();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public List<Q> asList() {
|
|
48
|
+
return qualities;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public void sort(Comparator<Q> comparator) {
|
|
52
|
+
Collections.sort(qualities, comparator);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
package com.theoplayer.track;
|
|
2
|
+
|
|
3
|
+
import androidx.annotation.NonNull;
|
|
4
|
+
|
|
5
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
6
|
+
import com.theoplayer.android.api.player.track.mediatrack.quality.Quality;
|
|
7
|
+
import com.theoplayer.android.api.player.track.mediatrack.quality.QualityList;
|
|
8
|
+
|
|
9
|
+
import java.util.ArrayList;
|
|
10
|
+
import java.util.List;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* QualityListFilter allows filtering a QualityList.
|
|
14
|
+
*/
|
|
15
|
+
public class QualityListFilter<Q extends Quality> {
|
|
16
|
+
|
|
17
|
+
private final QualityList<Q> qualities;
|
|
18
|
+
|
|
19
|
+
public QualityListFilter(QualityList<Q> qualities) {
|
|
20
|
+
this.qualities = qualities;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@NonNull
|
|
24
|
+
public QualityList<Q> filterQualityList(ReadableArray uids) {
|
|
25
|
+
return new QualityListAdapter<Q>(filterList(uids));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@NonNull
|
|
29
|
+
public List<Q> filterList(ReadableArray uids) {
|
|
30
|
+
final List<Q> filteredQualities = new ArrayList<>();
|
|
31
|
+
for (int q = 0; q < uids.size(); q++) {
|
|
32
|
+
for (final Q quality : qualities) {
|
|
33
|
+
if (uids.getInt(q) == quality.getUid()) {
|
|
34
|
+
filteredQualities.add(quality);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return filteredQualities;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -159,9 +159,17 @@ public class TrackListInfo {
|
|
|
159
159
|
|
|
160
160
|
final QualityList<VideoQuality> qualityList = videoTrack.getQualities();
|
|
161
161
|
WritableArray qualities = Arguments.createArray();
|
|
162
|
+
|
|
162
163
|
if (qualityList != null) {
|
|
163
|
-
|
|
164
|
-
|
|
164
|
+
// Sort qualities according to (height, bandwidth)
|
|
165
|
+
final QualityListAdapter<VideoQuality> sortedQualityList = new QualityListAdapter<>(qualityList);
|
|
166
|
+
sortedQualityList.sort(
|
|
167
|
+
(o, t1) ->
|
|
168
|
+
(o.getHeight() == t1.getHeight()) ?
|
|
169
|
+
Long.compare(t1.getBandwidth(), o.getBandwidth()) : Integer.compare(t1.getHeight(), o.getHeight())
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
for (final VideoQuality quality : sortedQualityList) {
|
|
165
173
|
WritableMap videoQualityPayload = Arguments.createMap();
|
|
166
174
|
videoQualityPayload.putString(PROP_ID, quality.getId());
|
|
167
175
|
videoQualityPayload.putInt(PROP_UID, quality.getUid());
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
package com.theoplayer.util
|
|
2
|
+
|
|
3
|
+
const val NAN_VALUE: Double = -1.0
|
|
4
|
+
const val POS_INF_VALUE: Double = -2.0
|
|
5
|
+
|
|
6
|
+
object TypeUtils {
|
|
7
|
+
// Make sure we do not send INF or NaN double values over the bridge. It will break debug sessions.
|
|
8
|
+
fun encodeInfNan(v: Double): Double {
|
|
9
|
+
return when (v) {
|
|
10
|
+
Double.NaN -> NAN_VALUE
|
|
11
|
+
Double.POSITIVE_INFINITY -> POS_INF_VALUE
|
|
12
|
+
else -> {
|
|
13
|
+
return v
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
package com.theoplayer.util;
|
|
2
|
+
|
|
3
|
+
import android.os.Handler;
|
|
4
|
+
import android.os.Looper;
|
|
5
|
+
import android.view.View;
|
|
6
|
+
|
|
7
|
+
import androidx.annotation.Nullable;
|
|
8
|
+
|
|
9
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
10
|
+
import com.facebook.react.uimanager.UIManagerModule;
|
|
11
|
+
import com.theoplayer.ReactTHEOplayerView;
|
|
12
|
+
|
|
13
|
+
public class ViewResolver {
|
|
14
|
+
private UIManagerModule uiManager;
|
|
15
|
+
|
|
16
|
+
private Handler handler = new Handler(Looper.getMainLooper());
|
|
17
|
+
|
|
18
|
+
private final ReactApplicationContext reactContext;
|
|
19
|
+
|
|
20
|
+
public interface Callback {
|
|
21
|
+
void onResolved(@Nullable ReactTHEOplayerView view);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public ViewResolver(ReactApplicationContext reactContext) {
|
|
25
|
+
this.reactContext = reactContext;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public void resolveViewByTag(final Integer tag, Callback callback) {
|
|
29
|
+
if (tag == null) {
|
|
30
|
+
callback.onResolved(null);
|
|
31
|
+
}
|
|
32
|
+
if (uiManager == null) {
|
|
33
|
+
uiManager = reactContext.getNativeModule(UIManagerModule.class);
|
|
34
|
+
}
|
|
35
|
+
if (uiManager == null) {
|
|
36
|
+
callback.onResolved(null);
|
|
37
|
+
}
|
|
38
|
+
handler.post(() -> {
|
|
39
|
+
callback.onResolved((ReactTHEOplayerView)uiManager.resolveView(tag));
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|