react-native-theoplayer 1.6.1 → 1.7.1

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 +76 -33
  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 +273 -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
package/README.md CHANGED
@@ -63,4 +63,8 @@ and discussed in the next section. Finally, an overview of features, limitations
63
63
  - [The THEOplayerView component](./doc/theoplayerview-component.md)
64
64
  - [The example application with React Native UI](./doc/example-app.md)
65
65
  - [Features](./doc/features.md)
66
+ - Knowledge Base
67
+ - [Advertisements](./doc/ads.md)
68
+ - [Custom iOS framework](./doc/custom-ios-framework.md)
69
+ - [Digital Rights Management (DRM)](./doc/drm.md)
66
70
  - [Limitations and known issues](./doc/limitations.md)
@@ -1,59 +1,62 @@
1
1
  buildscript {
2
- if (project == rootProject) {
3
- repositories {
4
- google()
5
- mavenCentral()
6
- }
2
+ repositories {
3
+ google()
4
+ mavenCentral()
5
+ }
7
6
 
8
- dependencies {
9
- classpath 'com.android.tools.build:gradle:4.2.2'
10
- }
7
+ dependencies {
8
+ classpath 'com.android.tools.build:gradle:4.2.2'
9
+ classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10'
11
10
  }
12
11
  }
13
12
 
14
13
  apply plugin: 'com.android.library'
14
+ apply plugin: 'kotlin-android'
15
15
 
16
16
  def safeExtGet(prop, fallback) {
17
17
  rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
18
18
  }
19
19
 
20
- def TimeUpdateRate = "com.theoplayer.TimeUpdateRate"
20
+ // Extensions
21
+ def enabledGoogleIMA = safeExtGet("THEOplayer_extensionGoogleIMA", 'false').toBoolean()
22
+ def enabledGoogleDAI = safeExtGet("THEOplayer_extensionGoogleDAI", 'false').toBoolean()
23
+ def enabledAds = enabledGoogleIMA || enabledGoogleDAI
24
+ def enabledCast = safeExtGet("THEOplayer_extensionCast", 'false').toBoolean()
21
25
 
22
26
  android {
23
27
  compileSdkVersion safeExtGet('THEOplayer_compileSdkVersion', 31)
28
+
24
29
  defaultConfig {
25
30
  minSdkVersion safeExtGet('THEOplayer_minSdkVersion', 21)
26
31
  targetSdkVersion safeExtGet('THEOplayer_targetSdkVersion', 31)
27
32
  versionCode 1
28
33
  versionName "1.0"
34
+
35
+ // Optionally limit timeUpdate rate. Possible values:
36
+ // - "com.theoplayer.TimeUpdateRate.UNLIMITED"
37
+ // - "com.theoplayer.TimeUpdateRate.LIMITED_ONE_HZ"
38
+ // - "com.theoplayer.TimeUpdateRate.LIMITED_TWO_HZ"
39
+ // - "com.theoplayer.TimeUpdateRate.LIMITED_THREE_HZ"
40
+ def TimeUpdateRate = "com.theoplayer.TimeUpdateRate"
41
+ buildConfigField TimeUpdateRate, "TIMEUPDATE_RATE", safeExtGet('THEOplayer_timeUpdateRate', "${TimeUpdateRate}.UNLIMITED")
42
+
43
+ // Optionally log events to logcat
44
+ buildConfigField "boolean", "LOG_PLAYER_EVENTS", "${safeExtGet('THEOplayer_logPlayerEvents', 'false')}"
45
+ buildConfigField "boolean", "LOG_VIEW_EVENTS", "${safeExtGet('THEOplayer_logViewEvents', 'false')}"
46
+
47
+ // Extension buildConfig fields
48
+ buildConfigField "boolean", "EXTENSION_GOOGLE_IMA", "${enabledGoogleIMA}"
49
+ buildConfigField "boolean", "EXTENSION_GOOGLE_DAI", "${enabledGoogleDAI}"
50
+ buildConfigField "boolean", "EXTENSION_ADS", "${enabledAds}"
51
+ buildConfigField "boolean", "EXTENSION_CAST", "${enabledCast}"
29
52
  }
30
53
 
31
54
  buildTypes {
32
55
  debug {
33
- // Optionally limit timeUpdate rate. Possible values:
34
- // - "com.theoplayer.TimeUpdateRate.UNLIMITED"
35
- // - "com.theoplayer.TimeUpdateRate.LIMITED_ONE_HZ"
36
- // - "com.theoplayer.TimeUpdateRate.LIMITED_TWO_HZ"
37
- // - "com.theoplayer.TimeUpdateRate.LIMITED_THREE_HZ"
38
- buildConfigField TimeUpdateRate, "TIMEUPDATE_RATE", safeExtGet('THEOplayer_timeUpdateRate', "${TimeUpdateRate}.UNLIMITED")
39
-
40
- // Optionally log events to logcat
41
- buildConfigField "boolean", "LOG_PLAYER_EVENTS", safeExtGet('THEOplayer_logPlayerEvents', "false")
42
- buildConfigField "boolean", "LOG_VIEW_EVENTS", safeExtGet('THEOplayer_logViewEvents', "false")
56
+ minifyEnabled false
43
57
  }
44
58
  release {
45
59
  minifyEnabled false
46
-
47
- // Optionally limit timeUpdate rate, which could improve performance. Possible values:
48
- // - "com.theoplayer.TimeUpdateRate.UNLIMITED"
49
- // - "com.theoplayer.TimeUpdateRate.LIMITED_ONE_HZ"
50
- // - "com.theoplayer.TimeUpdateRate.LIMITED_TWO_HZ"
51
- // - "com.theoplayer.TimeUpdateRate.LIMITED_THREE_HZ"
52
- buildConfigField TimeUpdateRate, "TIMEUPDATE_RATE", safeExtGet('THEOplayer_timeUpdateRate', "${TimeUpdateRate}.UNLIMITED")
53
-
54
- // Optionally log events to logcat
55
- buildConfigField "boolean", "LOG_PLAYER_EVENTS", safeExtGet('THEOplayer_logPlayerEvents', "false")
56
- buildConfigField "boolean", "LOG_VIEW_EVENTS", safeExtGet('THEOplayer_logViewEvents', "false")
57
60
  }
58
61
  }
59
62
  lintOptions {
@@ -69,6 +72,12 @@ android {
69
72
  }
70
73
  }
71
74
 
75
+ rootProject.allprojects {
76
+ repositories {
77
+ maven { url("$rootDir/../node_modules/react-native-theoplayer/android/local") }
78
+ }
79
+ }
80
+
72
81
  repositories {
73
82
  mavenLocal()
74
83
  maven {
@@ -77,13 +86,47 @@ repositories {
77
86
  }
78
87
  google()
79
88
  mavenCentral()
89
+ maven { url("local") }
80
90
  maven { url 'https://jitpack.io' }
81
91
  }
82
92
 
83
93
  dependencies {
84
94
  //noinspection GradleDynamicVersion
85
95
  implementation "com.facebook.react:react-native:+" // From node_modules
86
- implementation "com.theoplayer.theoplayer-sdk-android:unified:${safeExtGet('THEOplayer_sdk', '+')}"
87
- implementation "com.theoplayer.theoplayer-sdk-android:unified-ads:${safeExtGet('THEOplayer_sdk', '+')}"
88
- implementation "com.theoplayer.theoplayer-sdk-android:unified-ads-ima:${safeExtGet('THEOplayer_sdk', '+')}"
96
+ implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
97
+ implementation "com.theoplayer.theoplayer-sdk-android:ads-wrapper:4.3.0"
98
+
99
+ def THEOplayerVersion = safeExtGet('THEOplayer_sdk', '+')
100
+
101
+ println("Using THEOplayer v${THEOplayerVersion}")
102
+ implementation "com.theoplayer.theoplayer-sdk-android:unified:${THEOplayerVersion}"
103
+
104
+ if (enabledGoogleIMA) {
105
+ println('ENABLE THEOplayer IMA extension.')
106
+ implementation "com.theoplayer.theoplayer-sdk-android:unified-ads:${THEOplayerVersion}"
107
+ implementation "com.theoplayer.theoplayer-sdk-android:unified-ads-ima:${THEOplayerVersion}"
108
+ } else {
109
+ println('DISABLE THEOplayer IMA extension.')
110
+ compileOnly "com.theoplayer.theoplayer-sdk-android:unified-ads:${THEOplayerVersion}"
111
+ compileOnly "com.theoplayer.theoplayer-sdk-android:unified-ads-ima:${THEOplayerVersion}"
112
+ }
113
+
114
+ // NOTE: The DAI extension module is available on Maven as of SDK v4.3.0
115
+ if (enabledGoogleDAI) {
116
+ println('ENABLE THEOplayer DAI extension.')
117
+ implementation "com.theoplayer.theoplayer-sdk-android:unified-ads:${THEOplayerVersion}"
118
+ implementation "com.theoplayer.theoplayer-sdk-android:unified-ads-dai:${THEOplayerVersion}"
119
+ } else {
120
+ println('DISABLE THEOplayer DAI extension.')
121
+ compileOnly "com.theoplayer.theoplayer-sdk-android:unified-ads:${THEOplayerVersion}"
122
+ compileOnly "com.theoplayer.theoplayer-sdk-android:unified-ads-dai:${THEOplayerVersion}"
123
+ }
124
+
125
+ if (enabledCast) {
126
+ println('ENABLE THEOplayer cast extension.')
127
+ implementation "com.theoplayer.theoplayer-sdk-android:unified-cast:${THEOplayerVersion}"
128
+ } else {
129
+ println('DISABLE THEOplayer cast extension.')
130
+ compileOnly "com.theoplayer.theoplayer-sdk-android:unified-cast:${THEOplayerVersion}"
131
+ }
89
132
  }
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4
+ <modelVersion>4.0.0</modelVersion>
5
+ <groupId>com.theoplayer.theoplayer-sdk-android</groupId>
6
+ <artifactId>ads-wrapper</artifactId>
7
+ <version>4.3.0</version>
8
+ <packaging>aar</packaging>
9
+ </project>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <metadata>
3
+ <groupId>com.theoplayer.theoplayer-sdk-android</groupId>
4
+ <artifactId>ads-wrapper</artifactId>
5
+ <versioning>
6
+ <latest>4.3.0</latest>
7
+ <release>4.3.0</release>
8
+ <versions>
9
+ <version>4.3.0</version>
10
+ </versions>
11
+ <lastUpdated>20221118111544</lastUpdated>
12
+ </versioning>
13
+ </metadata>
@@ -1,18 +1,32 @@
1
1
  package com.theoplayer;
2
2
 
3
+ import android.text.TextUtils;
4
+
3
5
  import androidx.annotation.Nullable;
4
6
 
5
7
  import com.facebook.react.bridge.ReadableMap;
6
8
  import com.theoplayer.android.api.THEOplayerConfig;
9
+ import com.theoplayer.android.api.ads.AdPreloadType;
10
+ import com.theoplayer.android.api.ads.AdsConfiguration;
11
+ import com.theoplayer.android.api.ads.GoogleImaConfiguration;
7
12
 
8
13
  public class PlayerConfigHelper {
14
+ static final private String PROP_ADS_CONFIGURATION = "ads";
9
15
  static final private String PROP_LICENSE = "license";
10
16
  static final private String PROP_LICENSE_URL = "licenseUrl";
11
17
  static final private String PROP_CHROMELESS = "chromeless";
18
+ static final private String PROP_PRELOAD = "preload";
19
+ static final private String PROP_UI_ENABLED = "uiEnabled";
20
+ static final private String PROP_GOOGLE_IMA_CONFIGURATION = "googleImaConfiguration";
21
+ static final private String PROP_USE_NATIVE_IMA = "useNativeIma";
12
22
 
13
23
  static public THEOplayerConfig fromProps(@Nullable ReadableMap configProps) {
14
24
  THEOplayerConfig.Builder configBuilder = new THEOplayerConfig.Builder();
15
25
  if (configProps != null) {
26
+ AdsConfiguration adsConfig = adsConfigurationFromProps(configProps.getMap(PROP_ADS_CONFIGURATION));
27
+ if (adsConfig != null) {
28
+ configBuilder.ads(adsConfig);
29
+ }
16
30
  String license = configProps.getString(PROP_LICENSE);
17
31
  if (license != null) {
18
32
  configBuilder.license(license);
@@ -27,4 +41,30 @@ public class PlayerConfigHelper {
27
41
  }
28
42
  return configBuilder.build();
29
43
  }
44
+
45
+ static private AdsConfiguration adsConfigurationFromProps(@Nullable ReadableMap configProps) {
46
+ if (configProps == null) {
47
+ return null;
48
+ }
49
+ AdsConfiguration.Builder builder = new AdsConfiguration.Builder();
50
+ String preloadTypeString = configProps.getString(PROP_PRELOAD);
51
+ if (!TextUtils.isEmpty(preloadTypeString)) {
52
+ builder.preload(AdPreloadType.from(preloadTypeString));
53
+ }
54
+ builder.showCountdown(!configProps.hasKey(PROP_UI_ENABLED) || configProps.getBoolean(PROP_UI_ENABLED));
55
+ GoogleImaConfiguration googleImaConfiguration = googleImaConfigurationFromProps(configProps.getMap(PROP_GOOGLE_IMA_CONFIGURATION));
56
+ if (googleImaConfiguration != null) {
57
+ builder.googleImaConfiguration(googleImaConfiguration);
58
+ }
59
+ return builder.build();
60
+ }
61
+
62
+ static private GoogleImaConfiguration googleImaConfigurationFromProps(@Nullable ReadableMap configProps) {
63
+ if (configProps == null) {
64
+ return null;
65
+ }
66
+ return new GoogleImaConfiguration.Builder()
67
+ .useNativeIma(configProps.hasKey(PROP_USE_NATIVE_IMA) && configProps.getBoolean(PROP_USE_NATIVE_IMA))
68
+ .build();
69
+ }
30
70
  }
@@ -6,17 +6,22 @@ import com.facebook.react.ReactPackage;
6
6
  import com.facebook.react.bridge.NativeModule;
7
7
  import com.facebook.react.bridge.ReactApplicationContext;
8
8
  import com.facebook.react.uimanager.ViewManager;
9
- import com.theoplayer.ReactTHEOplayerViewManager;
9
+ import com.theoplayer.ads.AdsModule;
10
+ import com.theoplayer.drm.ContentProtectionModule;
10
11
 
12
+ import java.util.ArrayList;
11
13
  import java.util.Arrays;
12
- import java.util.Collections;
13
14
  import java.util.List;
14
15
 
15
16
  public class ReactTHEOplayerPackage implements ReactPackage {
17
+
16
18
  @NonNull
17
19
  @Override
18
20
  public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
19
- return Collections.emptyList();
21
+ List<NativeModule> modules = new ArrayList<>();
22
+ modules.add(new AdsModule(reactContext));
23
+ modules.add(new ContentProtectionModule(reactContext));
24
+ return modules;
20
25
  }
21
26
 
22
27
  @NonNull
@@ -14,19 +14,30 @@ import androidx.annotation.Nullable;
14
14
 
15
15
  import com.facebook.react.bridge.Arguments;
16
16
  import com.facebook.react.bridge.LifecycleEventListener;
17
+ import com.facebook.react.bridge.ReadableArray;
17
18
  import com.facebook.react.bridge.ReadableMap;
18
19
  import com.facebook.react.bridge.WritableArray;
19
20
  import com.facebook.react.bridge.WritableMap;
20
21
  import com.facebook.react.uimanager.ThemedReactContext;
22
+ import com.google.ads.interactivemedia.v3.api.AdsRenderingSettings;
23
+ import com.google.ads.interactivemedia.v3.api.ImaSdkFactory;
24
+ import com.theoplayer.android.api.ads.dai.GoogleDaiIntegration;
25
+ import com.theoplayer.android.api.ads.dai.GoogleDaiIntegrationFactory;
26
+ import com.theoplayer.abr.ABRConfigurationAdapter;
21
27
  import com.theoplayer.android.api.THEOplayerConfig;
22
28
  import com.theoplayer.android.api.THEOplayerView;
23
29
  import com.theoplayer.android.api.ads.ima.GoogleImaIntegration;
24
30
  import com.theoplayer.android.api.ads.ima.GoogleImaIntegrationFactory;
31
+ import com.theoplayer.android.api.ads.wrapper.AdsApiWrapper;
32
+ import com.theoplayer.android.api.cast.CastIntegration;
33
+ import com.theoplayer.android.api.cast.CastIntegrationFactory;
34
+ import com.theoplayer.android.api.error.THEOplayerException;
25
35
  import com.theoplayer.android.api.player.Player;
26
36
  import com.theoplayer.android.api.player.RequestCallback;
27
37
  import com.theoplayer.android.api.player.track.mediatrack.MediaTrack;
28
38
  import com.theoplayer.android.api.player.track.mediatrack.MediaTrackList;
29
39
  import com.theoplayer.android.api.player.track.mediatrack.quality.AudioQuality;
40
+ import com.theoplayer.android.api.player.track.mediatrack.quality.QualityList;
30
41
  import com.theoplayer.android.api.player.track.mediatrack.quality.VideoQuality;
31
42
  import com.theoplayer.android.api.player.track.texttrack.TextTrack;
32
43
  import com.theoplayer.android.api.player.track.texttrack.TextTrackList;
@@ -34,7 +45,11 @@ import com.theoplayer.android.api.player.track.texttrack.TextTrackMode;
34
45
  import com.theoplayer.android.api.player.track.texttrack.cue.TextTrackCue;
35
46
  import com.theoplayer.android.api.source.SourceDescription;
36
47
  import com.theoplayer.android.api.timerange.TimeRanges;
48
+ import com.theoplayer.track.QualityListFilter;
37
49
  import com.theoplayer.track.TrackListInfo;
50
+ import com.theoplayer.util.TypeUtils;
51
+
52
+ import java.util.Collections;
38
53
 
39
54
  @SuppressLint("ViewConstructor")
40
55
  public class ReactTHEOplayerView extends FrameLayout implements LifecycleEventListener {
@@ -49,8 +64,14 @@ public class ReactTHEOplayerView extends FrameLayout implements LifecycleEventLi
49
64
 
50
65
  private THEOplayerView playerView;
51
66
 
52
- private Player player;
67
+ private GoogleDaiIntegration daiIntegration;
68
+
69
+ private GoogleImaIntegration imaIntegration;
70
+
71
+ private final AdsApiWrapper adsApi;
53
72
 
73
+ private Player player;
74
+ private ReadableMap abrConfig;
54
75
  private boolean paused;
55
76
  private boolean muted = false;
56
77
  private boolean fullscreen = false;
@@ -65,12 +86,18 @@ public class ReactTHEOplayerView extends FrameLayout implements LifecycleEventLi
65
86
  this.reactContext = context;
66
87
  this.eventEmitter = new VideoEventEmitter(context, this);
67
88
  reactContext.addLifecycleEventListener(this);
89
+ adsApi = new AdsApiWrapper();
68
90
  }
69
91
 
70
92
  public void initialize(@Nullable ReadableMap configProps) {
71
93
  createViews(PlayerConfigHelper.fromProps(configProps));
72
94
  }
73
95
 
96
+ @Nullable
97
+ public GoogleDaiIntegration getDaiIntegration() {
98
+ return daiIntegration;
99
+ }
100
+
74
101
  @NonNull
75
102
  public WritableArray getTextTrackInfo() {
76
103
  if (player != null) {
@@ -112,7 +139,7 @@ public class ReactTHEOplayerView extends FrameLayout implements LifecycleEventLi
112
139
  }
113
140
 
114
141
  public double getDuration() {
115
- return player != null? 1e03 * player.getDuration() : Double.NaN;
142
+ return TypeUtils.INSTANCE.encodeInfNan(player != null? 1e03 * player.getDuration() : Double.NaN);
116
143
  }
117
144
 
118
145
  public void getSeekableRange(RequestCallback<TimeRanges> callback) {
@@ -165,13 +192,43 @@ public class ReactTHEOplayerView extends FrameLayout implements LifecycleEventLi
165
192
  playerView.setLayoutParams(layoutParams);
166
193
 
167
194
  addView(playerView, 0, layoutParams);
168
- addIntegrations(playerView);
195
+ addIntegrations(playerView, playerConfig);
169
196
  }
170
197
 
171
- private void addIntegrations(@NonNull final THEOplayerView playerView) {
172
- GoogleImaIntegration googleImaIntegration = GoogleImaIntegrationFactory.createGoogleImaIntegration(playerView);
173
- playerView.getPlayer().addIntegration(googleImaIntegration);
174
- // Add other future integrations here.
198
+ private void addIntegrations(@NonNull final THEOplayerView playerView, @NonNull THEOplayerConfig playerConfig) {
199
+ try {
200
+ if (BuildConfig.EXTENSION_GOOGLE_IMA) {
201
+ imaIntegration = GoogleImaIntegrationFactory.createGoogleImaIntegration(playerView);
202
+ imaIntegration.setAdsRenderingSettings(createRenderSettings(playerConfig));
203
+ playerView.getPlayer().addIntegration(imaIntegration);
204
+ }
205
+ } catch (Exception ignore) {
206
+ }
207
+ try {
208
+ if (BuildConfig.EXTENSION_GOOGLE_DAI) {
209
+ daiIntegration = GoogleDaiIntegrationFactory.createGoogleDaiIntegration(playerView);
210
+ daiIntegration.setAdsRenderingSettings(createRenderSettings(playerConfig));
211
+ playerView.getPlayer().addIntegration(daiIntegration);
212
+ }
213
+ } catch (Exception ignore) {
214
+ }
215
+ try {
216
+ if (BuildConfig.EXTENSION_CAST) {
217
+ CastIntegration castIntegration = CastIntegrationFactory.createCastIntegration(playerView);
218
+ playerView.getPlayer().addIntegration(castIntegration);
219
+ }
220
+ // Add other future integrations here.
221
+ } catch (Exception ignore) {
222
+ }
223
+ }
224
+
225
+ private AdsRenderingSettings createRenderSettings(@NonNull THEOplayerConfig playerConfig) {
226
+ AdsRenderingSettings renderingSettings = ImaSdkFactory.getInstance().createAdsRenderingSettings();
227
+ if (playerConfig.getAds() != null && !playerConfig.getAds().isShowCountdown()) {
228
+ renderingSettings.setUiElements(Collections.emptySet());
229
+ renderingSettings.setDisableUi(true);
230
+ }
231
+ return renderingSettings;
175
232
  }
176
233
 
177
234
  @Override
@@ -189,10 +246,6 @@ public class ReactTHEOplayerView extends FrameLayout implements LifecycleEventLi
189
246
  Log.d(TAG, "onDetachedFromWindow");
190
247
  }
191
248
  super.onDetachedFromWindow();
192
- /* We want to be able to continue playing audio when switching tabs.
193
- * Leave this here in case it causes issues.
194
- */
195
- // stopPlayback();
196
249
  }
197
250
 
198
251
  private void initializePlayer() {
@@ -200,23 +253,38 @@ public class ReactTHEOplayerView extends FrameLayout implements LifecycleEventLi
200
253
  new Handler().postDelayed(() -> {
201
254
  if (player == null) {
202
255
  player = playerView.getPlayer();
256
+ ABRConfigurationAdapter.INSTANCE.applyABRConfigurationFromProps(player, abrConfig);
257
+ if (BuildConfig.EXTENSION_ADS) {
258
+ adsApi.initialize(player, imaIntegration, daiIntegration);
259
+ }
203
260
  eventEmitter.attachListeners(player);
204
- player.setMuted(this.muted);
205
- player.setVolume(this.volume);
206
- player.setPlaybackRate(this.playbackRate);
207
- player.setSource(this.sourceDescription);
261
+ player.setMuted(muted);
262
+ player.setVolume(volume);
263
+ player.setPlaybackRate(playbackRate);
264
+
265
+ setSource(sourceDescription);
208
266
 
209
267
  if (!this.paused) {
210
268
  player.play();
211
269
  }
212
270
 
213
- if (this.seekTime != TIME_UNSET) {
214
- seekTo(this.seekTime);
271
+ if (seekTime != TIME_UNSET) {
272
+ seekTo(seekTime);
215
273
  }
216
274
  }
217
275
  }, 1);
218
276
  }
219
277
 
278
+ @Nullable
279
+ public Player getPlayer() {
280
+ return player;
281
+ }
282
+
283
+ @NonNull
284
+ public AdsApiWrapper getAdsApi() {
285
+ return adsApi;
286
+ }
287
+
220
288
  @Override
221
289
  public void onHostResume() {
222
290
  if (BuildConfig.LOG_VIEW_EVENTS) {
@@ -242,34 +310,54 @@ public class ReactTHEOplayerView extends FrameLayout implements LifecycleEventLi
242
310
  if (BuildConfig.LOG_VIEW_EVENTS) {
243
311
  Log.d(TAG, "onHostDestroy");
244
312
  }
245
- stopPlayback();
246
- if (playerView != null) {
247
- playerView.onDestroy();
248
- }
313
+ cleanUpResources();
249
314
  }
250
315
 
251
316
  public void cleanUpResources() {
252
317
  if (BuildConfig.LOG_VIEW_EVENTS) {
253
318
  Log.d(TAG, "cleanUpResources");
254
319
  }
255
- stopPlayback();
256
- }
257
-
258
- private void stopPlayback() {
259
320
  releasePlayer();
260
321
  }
261
322
 
262
323
  private void releasePlayer() {
263
324
  if (player != null) {
264
325
  eventEmitter.removeListeners(player);
326
+
327
+ if (adsApi != null) {
328
+ adsApi.destroy();
329
+ }
330
+
265
331
  player.stop();
266
332
  player = null;
267
333
  }
334
+
335
+ if (playerView != null) {
336
+ playerView.onDestroy();
337
+ }
338
+
268
339
  reactContext.removeLifecycleEventListener(this);
269
340
  }
270
341
 
342
+ public void setSource(@Nullable final ReadableMap source) {
343
+ try {
344
+ setSource(new SourceHelper().parseSourceFromJS(source));
345
+ } catch (THEOplayerException exception) {
346
+ Log.e(TAG, exception.getMessage());
347
+ eventEmitter.emitError(exception);
348
+ }
349
+ }
350
+
351
+ public void setABRConfig(@Nullable ReadableMap abrConfigProps) {
352
+ abrConfig = abrConfigProps;
353
+ ABRConfigurationAdapter.INSTANCE.applyABRConfigurationFromProps(player, abrConfig);
354
+ }
355
+
271
356
  public void setSource(@Nullable final SourceDescription sourceDescription) {
272
357
  this.sourceDescription = sourceDescription;
358
+ if (adsApi != null) {
359
+ adsApi.setSource(sourceDescription);
360
+ }
273
361
  if (player != null && sourceDescription != null) {
274
362
  player.setSource(sourceDescription);
275
363
  }
@@ -281,7 +369,7 @@ public class ReactTHEOplayerView extends FrameLayout implements LifecycleEventLi
281
369
  final boolean playerIsPaused = player.isPaused();
282
370
  if (!paused && playerIsPaused) {
283
371
  player.play();
284
- } else if (paused && !playerIsPaused) {
372
+ } else if (paused && (!playerIsPaused || adsApi.isPlaying())) {
285
373
  player.pause();
286
374
  }
287
375
  }
@@ -335,8 +423,8 @@ public class ReactTHEOplayerView extends FrameLayout implements LifecycleEventLi
335
423
  for (final TextTrack track: player.getTextTracks()) {
336
424
  if (track.getUid() == uid) {
337
425
  track.setMode(TextTrackMode.SHOWING);
338
- } else {
339
- track.setMode(TextTrackMode.HIDDEN);
426
+ } else if (track.getMode() == TextTrackMode.SHOWING) {
427
+ track.setMode(TextTrackMode.DISABLED);
340
428
  }
341
429
  }
342
430
  }
@@ -386,6 +474,21 @@ public class ReactTHEOplayerView extends FrameLayout implements LifecycleEventLi
386
474
  }
387
475
  }
388
476
 
477
+ public void setTargetVideoQualities(ReadableArray uids) {
478
+ MediaTrack<VideoQuality> currentVideoTrack = getSelectedVideoTrack();
479
+ if (currentVideoTrack != null) {
480
+ if (uids.size() == 0) {
481
+ // Reset target qualities when passing empty list.
482
+ currentVideoTrack.setTargetQuality(null);
483
+ } else {
484
+ QualityList<VideoQuality> qualities = currentVideoTrack.getQualities();
485
+ if (qualities != null) {
486
+ currentVideoTrack.setTargetQualities(new QualityListFilter<>(qualities).filterQualityList(uids));
487
+ }
488
+ }
489
+ }
490
+ }
491
+
389
492
  @SuppressLint("ObsoleteSdkInt")
390
493
  public void setFullscreen(boolean fullscreen) {
391
494
  if (fullscreen == this.fullscreen) {
@@ -3,6 +3,7 @@ package com.theoplayer;
3
3
  import androidx.annotation.NonNull;
4
4
  import androidx.annotation.Nullable;
5
5
 
6
+ import com.facebook.react.bridge.ReadableArray;
6
7
  import com.facebook.react.bridge.ReadableMap;
7
8
  import com.facebook.react.common.MapBuilder;
8
9
  import com.facebook.react.uimanager.ThemedReactContext;
@@ -15,6 +16,7 @@ public class ReactTHEOplayerViewManager extends ViewGroupManager<ReactTHEOplayer
15
16
  public static final String REACT_CLASS = "THEOplayerRCTView";
16
17
 
17
18
  private static final String PROP_CONFIG = "config";
19
+ private static final String PROP_ABR_CONFIG = "abrConfig";
18
20
  private static final String PROP_SRC = "src";
19
21
  private static final String PROP_SEEK = "seek";
20
22
  private static final String PROP_PAUSED = "paused";
@@ -25,6 +27,7 @@ public class ReactTHEOplayerViewManager extends ViewGroupManager<ReactTHEOplayer
25
27
  private static final String PROP_SELECTED_TEXTTRACK = "selectedTextTrack";
26
28
  private static final String PROP_SELECTED_AUDIOTRACK = "selectedAudioTrack";
27
29
  private static final String PROP_SELECTED_VIDEOTRACK = "selectedVideoTrack";
30
+ private static final String PROP_TARGET_VIDEOQUALITY = "targetVideoQuality";
28
31
 
29
32
  @Override
30
33
  @NonNull
@@ -48,9 +51,14 @@ public class ReactTHEOplayerViewManager extends ViewGroupManager<ReactTHEOplayer
48
51
  videoView.initialize(config);
49
52
  }
50
53
 
54
+ @ReactProp(name = PROP_ABR_CONFIG)
55
+ public void setABRConfig(final ReactTHEOplayerView videoView, @Nullable ReadableMap config) {
56
+ videoView.setABRConfig(config);
57
+ }
58
+
51
59
  @ReactProp(name = PROP_SRC)
52
60
  public void setSource(final ReactTHEOplayerView videoView, @Nullable ReadableMap src) {
53
- videoView.setSource(new SourceHelper().parseSourceFromJS(src));
61
+ videoView.setSource(src);
54
62
  }
55
63
 
56
64
  @ReactProp(name = PROP_SEEK)
@@ -102,6 +110,11 @@ public class ReactTHEOplayerViewManager extends ViewGroupManager<ReactTHEOplayer
102
110
  }
103
111
  }
104
112
 
113
+ @ReactProp(name = PROP_TARGET_VIDEOQUALITY)
114
+ public void setTargetVideoQuality(final ReactTHEOplayerView videoView, final ReadableArray uid) {
115
+ videoView.setTargetVideoQualities(uid);
116
+ }
117
+
105
118
  @Override
106
119
  public @Nullable
107
120
  Map<String, Object> getExportedCustomDirectEventTypeConstants() {