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.
Files changed (465) hide show
  1. package/README.md +4 -0
  2. package/android/build.gradle +70 -25
  3. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/4.3.0/ads-wrapper-4.3.0.aar +0 -0
  4. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/4.3.0/ads-wrapper-4.3.0.pom +9 -0
  5. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml +13 -0
  6. package/android/src/main/java/com/theoplayer/PlayerConfigHelper.java +40 -0
  7. package/android/src/main/java/com/theoplayer/ReactTHEOplayerPackage.java +8 -3
  8. package/android/src/main/java/com/theoplayer/ReactTHEOplayerView.java +131 -28
  9. package/android/src/main/java/com/theoplayer/ReactTHEOplayerViewManager.java +14 -1
  10. package/android/src/main/java/com/theoplayer/SourceHelper.java +137 -86
  11. package/android/src/main/java/com/theoplayer/VideoEventEmitter.java +44 -12
  12. package/android/src/main/java/com/theoplayer/abr/ABRConfigurationAdapter.kt +72 -0
  13. package/android/src/main/java/com/theoplayer/ads/AdEventAdapter.java +92 -0
  14. package/android/src/main/java/com/theoplayer/ads/AdInfo.java +168 -0
  15. package/android/src/main/java/com/theoplayer/ads/AdsModule.java +152 -0
  16. package/android/src/main/java/com/theoplayer/drm/ContentProtectionAdapter.kt +143 -0
  17. package/android/src/main/java/com/theoplayer/drm/ContentProtectionModule.kt +269 -0
  18. package/android/src/main/java/com/theoplayer/drm/KeySystemAdapter.kt +22 -0
  19. package/android/src/main/java/com/theoplayer/drm/ProxyContentProtectionIntegration.kt +33 -0
  20. package/android/src/main/java/com/theoplayer/drm/ProxyContentProtectionIntegrationFactory.kt +19 -0
  21. package/android/src/main/java/com/theoplayer/drm/RequestMethodAdapter.kt +28 -0
  22. package/android/src/main/java/com/theoplayer/track/QualityListAdapter.java +54 -0
  23. package/android/src/main/java/com/theoplayer/track/QualityListFilter.java +40 -0
  24. package/android/src/main/java/com/theoplayer/track/TrackListInfo.java +10 -2
  25. package/android/src/main/java/com/theoplayer/util/TypeUtils.kt +17 -0
  26. package/android/src/main/java/com/theoplayer/util/ViewResolver.java +42 -0
  27. package/ios/THEOplayerRCTAdAggregator.swift +158 -0
  28. package/ios/THEOplayerRCTAdsAPI.swift +296 -0
  29. package/ios/THEOplayerRCTBridge.m +65 -0
  30. package/ios/THEOplayerRCTContentProtectionAPI.swift +359 -0
  31. package/ios/THEOplayerRCTContentProtectionAggregator.swift +119 -0
  32. package/ios/THEOplayerRCTDebug.swift +11 -5
  33. package/ios/THEOplayerRCTMetadataAggregator.swift +1 -1
  34. package/ios/THEOplayerRCTNetworkUtils.swift +54 -0
  35. package/ios/THEOplayerRCTProxyContentProtectionIntegration.swift +155 -0
  36. package/ios/THEOplayerRCTProxyContentProtectionIntegrationFactory.swift +32 -0
  37. package/ios/THEOplayerRCTSourceDescriptionBuilder.swift +223 -30
  38. package/ios/THEOplayerRCTTypeUtils.swift +18 -0
  39. package/ios/THEOplayerRCTView.swift +109 -49
  40. package/ios/THEOplayerRCTViewAdEventHandler.swift +238 -0
  41. package/ios/{THEOplayerRCTViewEventHandler.swift → THEOplayerRCTViewMainEventHandler.swift} +7 -119
  42. package/ios/THEOplayerRCTViewTextTrackEventHandler.swift +134 -0
  43. package/ios/Theoplayer-Bridging-Header.h +3 -1
  44. package/ios/custom/Frameworks/ios/put_custom_ios_xcframework_here.txt +2 -0
  45. package/ios/custom/react-native-theoplayer_custom_ios.podspec +36 -0
  46. package/ios/custom/theofeatures.sh +14 -0
  47. package/lib/commonjs/api/THEOplayerView.js.map +1 -1
  48. package/lib/commonjs/api/abr/ABRConfiguration.js +2 -0
  49. package/lib/commonjs/api/abr/ABRConfiguration.js.map +1 -0
  50. package/lib/commonjs/api/abr/barrel.js +19 -0
  51. package/lib/commonjs/api/abr/barrel.js.map +1 -0
  52. package/lib/commonjs/api/ads/Ad.js +6 -0
  53. package/lib/commonjs/api/ads/Ad.js.map +1 -0
  54. package/lib/commonjs/api/ads/AdBreak.js +6 -0
  55. package/lib/commonjs/api/ads/AdBreak.js.map +1 -0
  56. package/lib/commonjs/api/ads/AdsAPI.js +6 -0
  57. package/lib/commonjs/api/ads/AdsAPI.js.map +1 -0
  58. package/lib/commonjs/api/ads/AdsConfiguration.js +6 -0
  59. package/lib/commonjs/api/ads/AdsConfiguration.js.map +1 -0
  60. package/lib/commonjs/api/ads/CompanionAd.js +2 -0
  61. package/lib/commonjs/api/ads/CompanionAd.js.map +1 -0
  62. package/lib/commonjs/api/ads/GoogleDai.js +2 -0
  63. package/lib/commonjs/api/ads/GoogleDai.js.map +1 -0
  64. package/lib/commonjs/api/ads/GoogleImaAd.js +6 -0
  65. package/lib/commonjs/api/ads/GoogleImaAd.js.map +1 -0
  66. package/lib/commonjs/api/ads/GoogleImaConfiguration.js +2 -0
  67. package/lib/commonjs/api/ads/GoogleImaConfiguration.js.map +1 -0
  68. package/lib/commonjs/api/ads/barrel.js +110 -0
  69. package/lib/commonjs/api/ads/barrel.js.map +1 -0
  70. package/lib/commonjs/api/barrel.js +58 -6
  71. package/lib/commonjs/api/barrel.js.map +1 -1
  72. package/lib/commonjs/api/config/PlayerConfiguration.js +4 -0
  73. package/lib/commonjs/api/config/PlayerConfiguration.js.map +1 -1
  74. package/lib/commonjs/api/drm/ContentProtectionAPI.js +6 -0
  75. package/lib/commonjs/api/drm/ContentProtectionAPI.js.map +1 -0
  76. package/lib/commonjs/api/drm/ContentProtectionIntegration.js +6 -0
  77. package/lib/commonjs/api/drm/ContentProtectionIntegration.js.map +1 -0
  78. package/lib/commonjs/api/drm/ContentProtectionIntegrationFactory.js +6 -0
  79. package/lib/commonjs/api/drm/ContentProtectionIntegrationFactory.js.map +1 -0
  80. package/lib/commonjs/api/drm/ContentProtectionRequest.js +2 -0
  81. package/lib/commonjs/api/drm/ContentProtectionRequest.js.map +1 -0
  82. package/lib/commonjs/api/drm/ContentProtectionResponse.js +6 -0
  83. package/lib/commonjs/api/drm/ContentProtectionResponse.js.map +1 -0
  84. package/lib/commonjs/api/drm/barrel.js +71 -0
  85. package/lib/commonjs/api/drm/barrel.js.map +1 -0
  86. package/lib/commonjs/api/event/AdEvent.js +89 -0
  87. package/lib/commonjs/api/event/AdEvent.js.map +1 -0
  88. package/lib/commonjs/api/event/barrel.js +13 -0
  89. package/lib/commonjs/api/event/barrel.js.map +1 -1
  90. package/lib/commonjs/api/source/SourceDescription.js.map +1 -1
  91. package/lib/commonjs/api/source/ads/FreeWheelAdDescription.js +6 -0
  92. package/lib/commonjs/api/source/ads/FreeWheelAdDescription.js.map +1 -0
  93. package/lib/commonjs/api/source/ads/IMAAdDescription.js +6 -0
  94. package/lib/commonjs/api/source/ads/IMAAdDescription.js.map +1 -0
  95. package/lib/commonjs/api/source/ads/SpotXAdDescription.js +6 -0
  96. package/lib/commonjs/api/source/ads/SpotXAdDescription.js.map +1 -0
  97. package/lib/commonjs/api/source/ads/THEOplayerAdDescription.js +6 -0
  98. package/lib/commonjs/api/source/ads/THEOplayerAdDescription.js.map +1 -0
  99. package/lib/commonjs/api/source/ads/barrel.js +84 -0
  100. package/lib/commonjs/api/source/ads/barrel.js.map +1 -0
  101. package/lib/commonjs/api/source/ads/ssai/GoogleDAIConfiguration.js +6 -0
  102. package/lib/commonjs/api/source/ads/ssai/GoogleDAIConfiguration.js.map +1 -0
  103. package/lib/commonjs/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.js +6 -0
  104. package/lib/commonjs/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.js.map +1 -0
  105. package/lib/commonjs/api/source/ads/ssai/ServerSideAdInsertionConfiguration.js +6 -0
  106. package/lib/commonjs/api/source/ads/ssai/ServerSideAdInsertionConfiguration.js.map +1 -0
  107. package/lib/commonjs/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.js +6 -0
  108. package/lib/commonjs/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.js.map +1 -0
  109. package/lib/commonjs/api/source/ads/ssai/barrel.js +58 -0
  110. package/lib/commonjs/api/source/ads/ssai/barrel.js.map +1 -0
  111. package/lib/commonjs/api/source/barrel.js +16 -3
  112. package/lib/commonjs/api/source/barrel.js.map +1 -1
  113. package/lib/commonjs/api/source/drm/DRMConfiguration.js.map +1 -1
  114. package/lib/commonjs/api/track/MediaTrack.js +29 -0
  115. package/lib/commonjs/api/track/MediaTrack.js.map +1 -1
  116. package/lib/commonjs/api/utils/TypeUtils.js +62 -0
  117. package/lib/commonjs/api/utils/TypeUtils.js.map +1 -0
  118. package/lib/commonjs/api/utils/barrel.js +19 -0
  119. package/lib/commonjs/api/utils/barrel.js.map +1 -0
  120. package/lib/commonjs/index.js +10 -1
  121. package/lib/commonjs/index.js.map +1 -1
  122. package/lib/commonjs/internal/THEOplayerView.js +42 -3
  123. package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
  124. package/lib/commonjs/internal/THEOplayerView.web.js +41 -2
  125. package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
  126. package/lib/commonjs/internal/ads/THEOplayerNativeAdsAPI.js +54 -0
  127. package/lib/commonjs/internal/ads/THEOplayerNativeAdsAPI.js.map +1 -0
  128. package/lib/commonjs/internal/ads/THEOplayerNativeGoogleDAI.js +34 -0
  129. package/lib/commonjs/internal/ads/THEOplayerNativeGoogleDAI.js.map +1 -0
  130. package/lib/commonjs/internal/ads/THEOplayerWebAdsAPI.js +78 -0
  131. package/lib/commonjs/internal/ads/THEOplayerWebAdsAPI.js.map +1 -0
  132. package/lib/commonjs/internal/ads/THEOplayerWebGoogleDAI.js +32 -0
  133. package/lib/commonjs/internal/ads/THEOplayerWebGoogleDAI.js.map +1 -0
  134. package/lib/commonjs/internal/drm/ContentProtectionRegistry.js +214 -0
  135. package/lib/commonjs/internal/drm/ContentProtectionRegistry.js.map +1 -0
  136. package/lib/commonjs/internal/drm/ContentProtectionRegistry.web.js +20 -0
  137. package/lib/commonjs/internal/drm/ContentProtectionRegistry.web.js.map +1 -0
  138. package/lib/commonjs/internal/drm/NativeCertificateRequest.js +41 -0
  139. package/lib/commonjs/internal/drm/NativeCertificateRequest.js.map +1 -0
  140. package/lib/commonjs/internal/drm/NativeCertificateResponse.js +41 -0
  141. package/lib/commonjs/internal/drm/NativeCertificateResponse.js.map +1 -0
  142. package/lib/commonjs/internal/drm/NativeContentProtectionEvent.js +2 -0
  143. package/lib/commonjs/internal/drm/NativeContentProtectionEvent.js.map +1 -0
  144. package/lib/commonjs/internal/drm/NativeLicenseRequest.js +44 -0
  145. package/lib/commonjs/internal/drm/NativeLicenseRequest.js.map +1 -0
  146. package/lib/commonjs/internal/drm/NativeLicenseResponse.js +41 -0
  147. package/lib/commonjs/internal/drm/NativeLicenseResponse.js.map +1 -0
  148. package/lib/commonjs/internal/utils/TypeUtils.js +41 -0
  149. package/lib/commonjs/internal/utils/TypeUtils.js.map +1 -0
  150. package/lib/commonjs/internal/web/TrackUtils.js +19 -0
  151. package/lib/commonjs/internal/web/TrackUtils.js.map +1 -1
  152. package/lib/module/api/THEOplayerView.js.map +1 -1
  153. package/lib/module/api/abr/ABRConfiguration.js +2 -0
  154. package/lib/module/api/abr/ABRConfiguration.js.map +1 -0
  155. package/lib/module/api/abr/barrel.js +2 -0
  156. package/lib/module/api/abr/barrel.js.map +1 -0
  157. package/lib/module/api/ads/Ad.js +2 -0
  158. package/lib/module/api/ads/Ad.js.map +1 -0
  159. package/lib/module/api/ads/AdBreak.js +2 -0
  160. package/lib/module/api/ads/AdBreak.js.map +1 -0
  161. package/lib/module/api/ads/AdsAPI.js +2 -0
  162. package/lib/module/api/ads/AdsAPI.js.map +1 -0
  163. package/lib/module/api/ads/AdsConfiguration.js +2 -0
  164. package/lib/module/api/ads/AdsConfiguration.js.map +1 -0
  165. package/lib/module/api/ads/CompanionAd.js +2 -0
  166. package/lib/module/api/ads/CompanionAd.js.map +1 -0
  167. package/lib/module/api/ads/GoogleDai.js +2 -0
  168. package/lib/module/api/ads/GoogleDai.js.map +1 -0
  169. package/lib/module/api/ads/GoogleImaAd.js +2 -0
  170. package/lib/module/api/ads/GoogleImaAd.js.map +1 -0
  171. package/lib/module/api/ads/GoogleImaConfiguration.js +2 -0
  172. package/lib/module/api/ads/GoogleImaConfiguration.js.map +1 -0
  173. package/lib/module/api/ads/barrel.js +9 -0
  174. package/lib/module/api/ads/barrel.js.map +1 -0
  175. package/lib/module/api/barrel.js +5 -1
  176. package/lib/module/api/barrel.js.map +1 -1
  177. package/lib/module/api/config/PlayerConfiguration.js +1 -1
  178. package/lib/module/api/config/PlayerConfiguration.js.map +1 -1
  179. package/lib/module/api/drm/ContentProtectionAPI.js +2 -0
  180. package/lib/module/api/drm/ContentProtectionAPI.js.map +1 -0
  181. package/lib/module/api/drm/ContentProtectionIntegration.js +2 -0
  182. package/lib/module/api/drm/ContentProtectionIntegration.js.map +1 -0
  183. package/lib/module/api/drm/ContentProtectionIntegrationFactory.js +2 -0
  184. package/lib/module/api/drm/ContentProtectionIntegrationFactory.js.map +1 -0
  185. package/lib/module/api/drm/ContentProtectionRequest.js +2 -0
  186. package/lib/module/api/drm/ContentProtectionRequest.js.map +1 -0
  187. package/lib/module/api/drm/ContentProtectionResponse.js +2 -0
  188. package/lib/module/api/drm/ContentProtectionResponse.js.map +1 -0
  189. package/lib/module/api/drm/barrel.js +6 -0
  190. package/lib/module/api/drm/barrel.js.map +1 -0
  191. package/lib/module/api/event/AdEvent.js +82 -0
  192. package/lib/module/api/event/AdEvent.js.map +1 -0
  193. package/lib/module/api/event/barrel.js +1 -0
  194. package/lib/module/api/event/barrel.js.map +1 -1
  195. package/lib/module/api/source/SourceDescription.js.map +1 -1
  196. package/lib/module/api/source/ads/FreeWheelAdDescription.js +2 -0
  197. package/lib/module/api/source/ads/FreeWheelAdDescription.js.map +1 -0
  198. package/lib/module/api/source/ads/IMAAdDescription.js +2 -0
  199. package/lib/module/api/source/ads/IMAAdDescription.js.map +1 -0
  200. package/lib/module/api/source/ads/SpotXAdDescription.js +2 -0
  201. package/lib/module/api/source/ads/SpotXAdDescription.js.map +1 -0
  202. package/lib/module/api/source/ads/THEOplayerAdDescription.js +2 -0
  203. package/lib/module/api/source/ads/THEOplayerAdDescription.js.map +1 -0
  204. package/lib/module/api/source/ads/barrel.js +7 -0
  205. package/lib/module/api/source/ads/barrel.js.map +1 -0
  206. package/lib/module/api/source/ads/ssai/GoogleDAIConfiguration.js +2 -0
  207. package/lib/module/api/source/ads/ssai/GoogleDAIConfiguration.js.map +1 -0
  208. package/lib/module/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.js +2 -0
  209. package/lib/module/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.js.map +1 -0
  210. package/lib/module/api/source/ads/ssai/ServerSideAdInsertionConfiguration.js +2 -0
  211. package/lib/module/api/source/ads/ssai/ServerSideAdInsertionConfiguration.js.map +1 -0
  212. package/lib/module/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.js +2 -0
  213. package/lib/module/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.js.map +1 -0
  214. package/lib/module/api/source/ads/ssai/barrel.js +5 -0
  215. package/lib/module/api/source/ads/ssai/barrel.js.map +1 -0
  216. package/lib/module/api/source/barrel.js +1 -0
  217. package/lib/module/api/source/barrel.js.map +1 -1
  218. package/lib/module/api/source/drm/DRMConfiguration.js.map +1 -1
  219. package/lib/module/api/track/MediaTrack.js +23 -1
  220. package/lib/module/api/track/MediaTrack.js.map +1 -1
  221. package/lib/module/api/utils/TypeUtils.js +36 -0
  222. package/lib/module/api/utils/TypeUtils.js.map +1 -0
  223. package/lib/module/api/utils/barrel.js +2 -0
  224. package/lib/module/api/utils/barrel.js.map +1 -0
  225. package/lib/module/index.js +1 -0
  226. package/lib/module/index.js.map +1 -1
  227. package/lib/module/internal/THEOplayerView.js +40 -3
  228. package/lib/module/internal/THEOplayerView.js.map +1 -1
  229. package/lib/module/internal/THEOplayerView.web.js +42 -4
  230. package/lib/module/internal/THEOplayerView.web.js.map +1 -1
  231. package/lib/module/internal/ads/THEOplayerNativeAdsAPI.js +43 -0
  232. package/lib/module/internal/ads/THEOplayerNativeAdsAPI.js.map +1 -0
  233. package/lib/module/internal/ads/THEOplayerNativeGoogleDAI.js +24 -0
  234. package/lib/module/internal/ads/THEOplayerNativeGoogleDAI.js.map +1 -0
  235. package/lib/module/internal/ads/THEOplayerWebAdsAPI.js +68 -0
  236. package/lib/module/internal/ads/THEOplayerWebAdsAPI.js.map +1 -0
  237. package/lib/module/internal/ads/THEOplayerWebGoogleDAI.js +23 -0
  238. package/lib/module/internal/ads/THEOplayerWebGoogleDAI.js.map +1 -0
  239. package/lib/module/internal/drm/ContentProtectionRegistry.js +188 -0
  240. package/lib/module/internal/drm/ContentProtectionRegistry.js.map +1 -0
  241. package/lib/module/internal/drm/ContentProtectionRegistry.web.js +9 -0
  242. package/lib/module/internal/drm/ContentProtectionRegistry.web.js.map +1 -0
  243. package/lib/module/internal/drm/NativeCertificateRequest.js +31 -0
  244. package/lib/module/internal/drm/NativeCertificateRequest.js.map +1 -0
  245. package/lib/module/internal/drm/NativeCertificateResponse.js +30 -0
  246. package/lib/module/internal/drm/NativeCertificateResponse.js.map +1 -0
  247. package/lib/module/internal/drm/NativeContentProtectionEvent.js +2 -0
  248. package/lib/module/internal/drm/NativeContentProtectionEvent.js.map +1 -0
  249. package/lib/module/internal/drm/NativeLicenseRequest.js +34 -0
  250. package/lib/module/internal/drm/NativeLicenseRequest.js.map +1 -0
  251. package/lib/module/internal/drm/NativeLicenseResponse.js +30 -0
  252. package/lib/module/internal/drm/NativeLicenseResponse.js.map +1 -0
  253. package/lib/module/internal/utils/TypeUtils.js +24 -0
  254. package/lib/module/internal/utils/TypeUtils.js.map +1 -0
  255. package/lib/module/internal/web/TrackUtils.js +15 -0
  256. package/lib/module/internal/web/TrackUtils.js.map +1 -1
  257. package/lib/typescript/lib/commonjs/api/abr/ABRConfiguration.d.ts +0 -0
  258. package/lib/typescript/lib/commonjs/api/abr/barrel.d.ts +1 -0
  259. package/lib/typescript/lib/commonjs/api/ads/Ad.d.ts +1 -0
  260. package/lib/typescript/lib/commonjs/api/ads/AdBreak.d.ts +1 -0
  261. package/lib/typescript/lib/commonjs/api/ads/AdsAPI.d.ts +1 -0
  262. package/lib/typescript/lib/commonjs/api/ads/AdsConfiguration.d.ts +1 -0
  263. package/lib/typescript/lib/commonjs/api/ads/CompanionAd.d.ts +0 -0
  264. package/lib/typescript/lib/commonjs/api/ads/GoogleDai.d.ts +0 -0
  265. package/lib/typescript/lib/commonjs/api/ads/GoogleImaAd.d.ts +1 -0
  266. package/lib/typescript/lib/commonjs/api/ads/GoogleImaConfiguration.d.ts +0 -0
  267. package/lib/typescript/lib/commonjs/api/ads/barrel.d.ts +1 -0
  268. package/lib/typescript/lib/commonjs/api/config/PlayerConfiguration.d.ts +1 -0
  269. package/lib/typescript/lib/commonjs/api/drm/ContentProtectionAPI.d.ts +1 -0
  270. package/lib/typescript/lib/commonjs/api/drm/ContentProtectionIntegration.d.ts +1 -0
  271. package/lib/typescript/lib/commonjs/api/drm/ContentProtectionIntegrationFactory.d.ts +1 -0
  272. package/lib/typescript/lib/commonjs/api/drm/ContentProtectionRequest.d.ts +0 -0
  273. package/lib/typescript/lib/commonjs/api/drm/ContentProtectionResponse.d.ts +1 -0
  274. package/lib/typescript/lib/commonjs/api/drm/barrel.d.ts +1 -0
  275. package/lib/typescript/lib/commonjs/api/event/AdEvent.d.ts +2 -0
  276. package/lib/typescript/lib/commonjs/api/source/ads/FreeWheelAdDescription.d.ts +1 -0
  277. package/lib/typescript/lib/commonjs/api/source/ads/IMAAdDescription.d.ts +1 -0
  278. package/lib/typescript/lib/commonjs/api/source/ads/SpotXAdDescription.d.ts +1 -0
  279. package/lib/typescript/lib/commonjs/api/source/ads/THEOplayerAdDescription.d.ts +1 -0
  280. package/lib/typescript/lib/commonjs/api/source/ads/barrel.d.ts +1 -0
  281. package/lib/typescript/lib/commonjs/api/source/ads/ssai/GoogleDAIConfiguration.d.ts +1 -0
  282. package/lib/typescript/lib/commonjs/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.d.ts +1 -0
  283. package/lib/typescript/lib/commonjs/api/source/ads/ssai/ServerSideAdInsertionConfiguration.d.ts +1 -0
  284. package/lib/typescript/lib/commonjs/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.d.ts +1 -0
  285. package/lib/typescript/lib/commonjs/api/source/ads/ssai/barrel.d.ts +1 -0
  286. package/lib/typescript/lib/commonjs/api/track/MediaTrack.d.ts +8 -0
  287. package/lib/typescript/lib/commonjs/api/utils/TypeUtils.d.ts +13 -0
  288. package/lib/typescript/lib/commonjs/api/utils/barrel.d.ts +1 -0
  289. package/lib/typescript/lib/commonjs/index.d.ts +2 -0
  290. package/lib/typescript/lib/commonjs/internal/THEOplayerView.d.ts +5 -0
  291. package/lib/typescript/lib/commonjs/internal/THEOplayerView.web.d.ts +4 -0
  292. package/lib/typescript/lib/commonjs/internal/ads/THEOplayerNativeAdsAPI.d.ts +14 -0
  293. package/lib/typescript/lib/commonjs/internal/ads/THEOplayerNativeGoogleDAI.d.ts +9 -0
  294. package/lib/typescript/lib/commonjs/internal/ads/THEOplayerWebAdsAPI.d.ts +14 -0
  295. package/lib/typescript/lib/commonjs/internal/ads/THEOplayerWebGoogleDAI.d.ts +9 -0
  296. package/lib/typescript/lib/commonjs/internal/drm/ContentProtectionRegistry.d.ts +14 -0
  297. package/lib/typescript/lib/commonjs/internal/drm/ContentProtectionRegistry.web.d.ts +5 -0
  298. package/lib/typescript/lib/commonjs/internal/drm/NativeCertificateRequest.d.ts +18 -0
  299. package/lib/typescript/lib/commonjs/internal/drm/NativeCertificateResponse.d.ts +21 -0
  300. package/lib/typescript/lib/commonjs/internal/drm/NativeContentProtectionEvent.d.ts +0 -0
  301. package/lib/typescript/lib/commonjs/internal/drm/NativeLicenseRequest.d.ts +20 -0
  302. package/lib/typescript/lib/commonjs/internal/drm/NativeLicenseResponse.d.ts +22 -0
  303. package/lib/typescript/lib/commonjs/internal/utils/TypeUtils.d.ts +6 -0
  304. package/lib/typescript/lib/commonjs/internal/web/TrackUtils.d.ts +2 -0
  305. package/lib/typescript/lib/module/api/abr/ABRConfiguration.d.ts +0 -0
  306. package/lib/typescript/lib/module/api/abr/barrel.d.ts +1 -0
  307. package/lib/typescript/lib/module/api/ads/Ad.d.ts +1 -0
  308. package/lib/typescript/lib/module/api/ads/AdBreak.d.ts +1 -0
  309. package/lib/typescript/lib/module/api/ads/AdsAPI.d.ts +1 -0
  310. package/lib/typescript/lib/module/api/ads/AdsConfiguration.d.ts +1 -0
  311. package/lib/typescript/lib/module/api/ads/CompanionAd.d.ts +0 -0
  312. package/lib/typescript/lib/module/api/ads/GoogleDai.d.ts +0 -0
  313. package/lib/typescript/lib/module/api/ads/GoogleImaAd.d.ts +1 -0
  314. package/lib/typescript/lib/module/api/ads/GoogleImaConfiguration.d.ts +0 -0
  315. package/lib/typescript/lib/module/api/ads/barrel.d.ts +5 -0
  316. package/lib/typescript/lib/module/api/barrel.d.ts +5 -1
  317. package/lib/typescript/lib/module/api/config/PlayerConfiguration.d.ts +1 -0
  318. package/lib/typescript/lib/module/api/config/barrel.d.ts +1 -1
  319. package/lib/typescript/lib/module/api/drm/ContentProtectionAPI.d.ts +1 -0
  320. package/lib/typescript/lib/module/api/drm/ContentProtectionIntegration.d.ts +1 -0
  321. package/lib/typescript/lib/module/api/drm/ContentProtectionIntegrationFactory.d.ts +1 -0
  322. package/lib/typescript/lib/module/api/drm/ContentProtectionRequest.d.ts +0 -0
  323. package/lib/typescript/lib/module/api/drm/ContentProtectionResponse.d.ts +1 -0
  324. package/lib/typescript/lib/module/api/drm/barrel.d.ts +4 -0
  325. package/lib/typescript/lib/module/api/event/AdEvent.d.ts +1 -0
  326. package/lib/typescript/lib/module/api/event/barrel.d.ts +1 -0
  327. package/lib/typescript/lib/module/api/source/ads/FreeWheelAdDescription.d.ts +1 -0
  328. package/lib/typescript/lib/module/api/source/ads/IMAAdDescription.d.ts +1 -0
  329. package/lib/typescript/lib/module/api/source/ads/SpotXAdDescription.d.ts +1 -0
  330. package/lib/typescript/lib/module/api/source/ads/THEOplayerAdDescription.d.ts +1 -0
  331. package/lib/typescript/lib/module/api/source/ads/barrel.d.ts +5 -0
  332. package/lib/typescript/lib/module/api/source/ads/ssai/GoogleDAIConfiguration.d.ts +1 -0
  333. package/lib/typescript/lib/module/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.d.ts +1 -0
  334. package/lib/typescript/lib/module/api/source/ads/ssai/ServerSideAdInsertionConfiguration.d.ts +1 -0
  335. package/lib/typescript/lib/module/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.d.ts +1 -0
  336. package/lib/typescript/lib/module/api/source/ads/ssai/barrel.d.ts +4 -0
  337. package/lib/typescript/lib/module/api/source/barrel.d.ts +1 -0
  338. package/lib/typescript/lib/module/api/track/MediaTrack.d.ts +8 -1
  339. package/lib/typescript/lib/module/api/utils/TypeUtils.d.ts +12 -0
  340. package/lib/typescript/lib/module/api/utils/barrel.d.ts +1 -0
  341. package/lib/typescript/lib/module/index.d.ts +1 -0
  342. package/lib/typescript/lib/module/internal/THEOplayerView.d.ts +8 -0
  343. package/lib/typescript/lib/module/internal/THEOplayerView.web.d.ts +4 -0
  344. package/lib/typescript/lib/module/internal/ads/THEOplayerNativeAdsAPI.d.ts +13 -0
  345. package/lib/typescript/lib/module/internal/ads/THEOplayerNativeGoogleDAI.d.ts +8 -0
  346. package/lib/typescript/lib/module/internal/ads/THEOplayerWebAdsAPI.d.ts +13 -0
  347. package/lib/typescript/lib/module/internal/ads/THEOplayerWebGoogleDAI.d.ts +8 -0
  348. package/lib/typescript/lib/module/internal/drm/ContentProtectionRegistry.d.ts +13 -0
  349. package/lib/typescript/lib/module/internal/drm/ContentProtectionRegistry.web.d.ts +4 -0
  350. package/lib/typescript/lib/module/internal/drm/NativeCertificateRequest.d.ts +17 -0
  351. package/lib/typescript/lib/module/internal/drm/NativeCertificateResponse.d.ts +20 -0
  352. package/lib/typescript/lib/module/internal/drm/NativeContentProtectionEvent.d.ts +0 -0
  353. package/lib/typescript/lib/module/internal/drm/NativeLicenseRequest.d.ts +19 -0
  354. package/lib/typescript/lib/module/internal/drm/NativeLicenseResponse.d.ts +21 -0
  355. package/lib/typescript/lib/module/internal/utils/TypeUtils.d.ts +5 -0
  356. package/lib/typescript/lib/module/internal/web/TrackUtils.d.ts +2 -0
  357. package/lib/typescript/src/api/THEOplayerView.d.ts +25 -4
  358. package/lib/typescript/src/api/abr/ABRConfiguration.d.ts +95 -0
  359. package/lib/typescript/src/api/abr/barrel.d.ts +1 -0
  360. package/lib/typescript/src/api/ads/Ad.d.ts +238 -0
  361. package/lib/typescript/src/api/ads/AdBreak.d.ts +39 -0
  362. package/lib/typescript/src/api/ads/AdsAPI.d.ts +46 -0
  363. package/lib/typescript/src/api/ads/AdsConfiguration.d.ts +69 -0
  364. package/lib/typescript/src/api/ads/CompanionAd.d.ts +59 -0
  365. package/lib/typescript/src/api/ads/GoogleDai.d.ts +29 -0
  366. package/lib/typescript/src/api/ads/GoogleImaAd.d.ts +78 -0
  367. package/lib/typescript/src/api/ads/GoogleImaConfiguration.d.ts +13 -0
  368. package/lib/typescript/src/api/ads/barrel.d.ts +8 -0
  369. package/lib/typescript/src/api/barrel.d.ts +5 -1
  370. package/lib/typescript/src/api/config/PlayerConfiguration.d.ts +5 -0
  371. package/lib/typescript/src/api/drm/ContentProtectionAPI.d.ts +5 -0
  372. package/lib/typescript/src/api/drm/ContentProtectionIntegration.d.ts +86 -0
  373. package/lib/typescript/src/api/drm/ContentProtectionIntegrationFactory.d.ts +15 -0
  374. package/lib/typescript/src/api/drm/ContentProtectionRequest.d.ts +56 -0
  375. package/lib/typescript/src/api/drm/ContentProtectionResponse.d.ts +56 -0
  376. package/lib/typescript/src/api/drm/barrel.d.ts +5 -0
  377. package/lib/typescript/src/api/event/AdEvent.d.ts +13 -0
  378. package/lib/typescript/src/api/event/barrel.d.ts +1 -0
  379. package/lib/typescript/src/api/source/SourceDescription.d.ts +8 -0
  380. package/lib/typescript/src/api/source/ads/FreeWheelAdDescription.d.ts +85 -0
  381. package/lib/typescript/src/api/source/ads/IMAAdDescription.d.ts +25 -0
  382. package/lib/typescript/src/api/source/ads/SpotXAdDescription.d.ts +115 -0
  383. package/lib/typescript/src/api/source/ads/THEOplayerAdDescription.d.ts +32 -0
  384. package/lib/typescript/src/api/source/ads/barrel.d.ts +6 -0
  385. package/lib/typescript/src/api/source/ads/ssai/GoogleDAIConfiguration.d.ts +130 -0
  386. package/lib/typescript/src/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.d.ts +27 -0
  387. package/lib/typescript/src/api/source/ads/ssai/ServerSideAdInsertionConfiguration.d.ts +26 -0
  388. package/lib/typescript/src/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.d.ts +46 -0
  389. package/lib/typescript/src/api/source/ads/ssai/barrel.d.ts +4 -0
  390. package/lib/typescript/src/api/source/barrel.d.ts +1 -0
  391. package/lib/typescript/src/api/source/drm/DRMConfiguration.d.ts +0 -30
  392. package/lib/typescript/src/api/track/MediaTrack.d.ts +5 -2
  393. package/lib/typescript/src/api/utils/TypeUtils.d.ts +20 -0
  394. package/lib/typescript/src/api/utils/barrel.d.ts +1 -0
  395. package/lib/typescript/src/index.d.ts +1 -0
  396. package/lib/typescript/src/internal/THEOplayerView.d.ts +10 -4
  397. package/lib/typescript/src/internal/THEOplayerView.web.d.ts +7 -2
  398. package/lib/typescript/src/internal/ads/THEOplayerNativeAdsAPI.d.ts +17 -0
  399. package/lib/typescript/src/internal/ads/THEOplayerNativeGoogleDAI.d.ts +10 -0
  400. package/lib/typescript/src/internal/ads/THEOplayerWebAdsAPI.d.ts +15 -0
  401. package/lib/typescript/src/internal/ads/THEOplayerWebGoogleDAI.d.ts +10 -0
  402. package/lib/typescript/src/internal/drm/ContentProtectionRegistry.d.ts +19 -0
  403. package/lib/typescript/src/internal/drm/ContentProtectionRegistry.web.d.ts +5 -0
  404. package/lib/typescript/src/internal/drm/NativeCertificateRequest.d.ts +13 -0
  405. package/lib/typescript/src/internal/drm/NativeCertificateResponse.d.ts +18 -0
  406. package/lib/typescript/src/internal/drm/NativeContentProtectionEvent.d.ts +5 -0
  407. package/lib/typescript/src/internal/drm/NativeLicenseRequest.d.ts +14 -0
  408. package/lib/typescript/src/internal/drm/NativeLicenseResponse.d.ts +18 -0
  409. package/lib/typescript/src/internal/utils/TypeUtils.d.ts +5 -0
  410. package/lib/typescript/src/internal/web/TrackUtils.d.ts +3 -1
  411. package/package.json +4 -3
  412. package/src/api/THEOplayerView.ts +29 -4
  413. package/src/api/abr/ABRConfiguration.ts +103 -0
  414. package/src/api/abr/barrel.ts +1 -0
  415. package/src/api/ads/Ad.ts +267 -0
  416. package/src/api/ads/AdBreak.ts +44 -0
  417. package/src/api/ads/AdsAPI.ts +53 -0
  418. package/src/api/ads/AdsConfiguration.ts +76 -0
  419. package/src/api/ads/CompanionAd.ts +65 -0
  420. package/src/api/ads/GoogleDai.ts +32 -0
  421. package/src/api/ads/GoogleImaAd.ts +86 -0
  422. package/src/api/ads/GoogleImaConfiguration.ts +13 -0
  423. package/src/api/ads/barrel.ts +8 -0
  424. package/src/api/barrel.ts +5 -1
  425. package/src/api/config/PlayerConfiguration.ts +7 -0
  426. package/src/api/drm/ContentProtectionAPI.ts +6 -0
  427. package/src/api/drm/ContentProtectionIntegration.ts +93 -0
  428. package/src/api/drm/ContentProtectionIntegrationFactory.ts +16 -0
  429. package/src/api/drm/ContentProtectionRequest.ts +60 -0
  430. package/src/api/drm/ContentProtectionResponse.ts +62 -0
  431. package/src/api/drm/barrel.ts +5 -0
  432. package/src/api/event/AdEvent.ts +117 -0
  433. package/src/api/event/barrel.ts +1 -0
  434. package/src/api/source/SourceDescription.ts +9 -0
  435. package/src/api/source/ads/FreeWheelAdDescription.ts +97 -0
  436. package/src/api/source/ads/IMAAdDescription.ts +26 -0
  437. package/src/api/source/ads/SpotXAdDescription.ts +126 -0
  438. package/src/api/source/ads/THEOplayerAdDescription.ts +34 -0
  439. package/src/api/source/ads/barrel.ts +6 -0
  440. package/src/api/source/ads/ssai/GoogleDAIConfiguration.ts +145 -0
  441. package/src/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.ts +30 -0
  442. package/src/api/source/ads/ssai/ServerSideAdInsertionConfiguration.ts +28 -0
  443. package/src/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.ts +51 -0
  444. package/src/api/source/ads/ssai/barrel.ts +4 -0
  445. package/src/api/source/barrel.ts +1 -0
  446. package/src/api/source/drm/DRMConfiguration.ts +0 -35
  447. package/src/api/track/MediaTrack.ts +22 -2
  448. package/src/api/utils/TypeUtils.ts +39 -0
  449. package/src/api/utils/barrel.ts +1 -0
  450. package/src/index.tsx +1 -0
  451. package/src/internal/THEOplayerView.tsx +49 -8
  452. package/src/internal/THEOplayerView.web.tsx +37 -7
  453. package/src/internal/ads/THEOplayerNativeAdsAPI.ts +44 -0
  454. package/src/internal/ads/THEOplayerNativeGoogleDAI.ts +23 -0
  455. package/src/internal/ads/THEOplayerWebAdsAPI.ts +51 -0
  456. package/src/internal/ads/THEOplayerWebGoogleDAI.ts +22 -0
  457. package/src/internal/drm/ContentProtectionRegistry.ts +173 -0
  458. package/src/internal/drm/ContentProtectionRegistry.web.ts +10 -0
  459. package/src/internal/drm/NativeCertificateRequest.ts +41 -0
  460. package/src/internal/drm/NativeCertificateResponse.ts +45 -0
  461. package/src/internal/drm/NativeContentProtectionEvent.ts +5 -0
  462. package/src/internal/drm/NativeLicenseRequest.ts +39 -0
  463. package/src/internal/drm/NativeLicenseResponse.ts +45 -0
  464. package/src/internal/utils/TypeUtils.ts +39 -0
  465. 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
- for (int j = 0; j < qualityList.length(); j++) {
164
- final VideoQuality quality = qualityList.getItem(j);
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
+ }