bitmovin-player-react-native 0.44.1-alpha.0 → 1.0.0-alpha.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 (497) hide show
  1. package/.eslintignore +11 -0
  2. package/.eslintrc.js +7 -0
  3. package/.gitattributes +3 -0
  4. package/.prettierignore +11 -0
  5. package/.ruby-version +1 -0
  6. package/.swiftlint.yml +171 -0
  7. package/Brewfile +2 -0
  8. package/CHANGELOG.md +627 -0
  9. package/CONTRIBUTING.md +255 -0
  10. package/TODO.md +0 -0
  11. package/android/.editorconfig +8 -0
  12. package/android/build.gradle +78 -75
  13. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  14. package/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  15. package/android/gradle.properties +1 -0
  16. package/android/gradlew +248 -0
  17. package/android/gradlew.bat +92 -0
  18. package/android/ktlint.gradle +31 -0
  19. package/android/src/main/java/com/bitmovin/player/reactnative/ActivityLifecycleListener.kt +51 -0
  20. package/android/src/main/java/com/bitmovin/player/reactnative/BitmovinCastManagerModule.kt +32 -55
  21. package/android/src/main/java/com/bitmovin/player/reactnative/BufferModule.kt +33 -45
  22. package/android/src/main/java/com/bitmovin/player/reactnative/CustomMessageHandlerModule.kt +84 -0
  23. package/android/src/main/java/com/bitmovin/player/reactnative/DebugModule.kt +6 -14
  24. package/android/src/main/java/com/bitmovin/player/reactnative/DecoderConfigModule.kt +89 -44
  25. package/android/src/main/java/com/bitmovin/player/reactnative/DrmModule.kt +80 -99
  26. package/android/src/main/java/com/bitmovin/player/reactnative/EventSubscription.kt +22 -0
  27. package/android/src/main/java/com/bitmovin/player/reactnative/FullscreenHandlerModule.kt +100 -0
  28. package/android/src/main/java/com/bitmovin/player/reactnative/MediaSessionPlaybackManager.kt +5 -5
  29. package/android/src/main/java/com/bitmovin/player/reactnative/NetworkModule.kt +98 -56
  30. package/android/src/main/java/com/bitmovin/player/reactnative/OfflineModule.kt +132 -186
  31. package/android/src/main/java/com/bitmovin/player/reactnative/PlayerAnalyticsModule.kt +37 -36
  32. package/android/src/main/java/com/bitmovin/player/reactnative/PlayerModule.kt +252 -528
  33. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerPackage.kt +11 -0
  34. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerView.kt +558 -213
  35. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerViewManager.kt +99 -286
  36. package/android/src/main/java/com/bitmovin/player/reactnative/ResultWaiter.kt +58 -0
  37. package/android/src/main/java/com/bitmovin/player/reactnative/SourceModule.kt +77 -151
  38. package/android/src/main/java/com/bitmovin/player/reactnative/Types.kt +44 -0
  39. package/android/src/main/java/com/bitmovin/player/reactnative/UuidModule.kt +12 -15
  40. package/android/src/main/java/com/bitmovin/player/reactnative/converter/JsonConverter.kt +296 -456
  41. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ListExtension.kt +89 -0
  42. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/MapExtension.kt +95 -0
  43. package/android/src/main/java/com/bitmovin/player/reactnative/offline/OfflineContentManagerBridge.kt +20 -52
  44. package/android/src/main/java/com/bitmovin/player/reactnative/ui/CustomMessageHandlerBridge.kt +10 -20
  45. package/android/src/main/java/com/bitmovin/player/reactnative/ui/FullscreenHandlerBridge.kt +4 -9
  46. package/app.plugin.js +21 -0
  47. package/build/BitmovinPlayerReactNative.types.d.ts +18 -0
  48. package/build/BitmovinPlayerReactNative.types.d.ts.map +1 -0
  49. package/build/BitmovinPlayerReactNative.types.js +2 -0
  50. package/build/BitmovinPlayerReactNative.types.js.map +1 -0
  51. package/build/adaptationConfig.d.ts +18 -0
  52. package/build/adaptationConfig.d.ts.map +1 -0
  53. package/build/adaptationConfig.js +2 -0
  54. package/build/adaptationConfig.js.map +1 -0
  55. package/build/advertising.d.ts +175 -0
  56. package/build/advertising.d.ts.map +1 -0
  57. package/build/advertising.js +37 -0
  58. package/build/advertising.js.map +1 -0
  59. package/build/analytics/config.d.ts +194 -0
  60. package/build/analytics/config.d.ts.map +1 -0
  61. package/build/analytics/config.js +2 -0
  62. package/build/analytics/config.js.map +1 -0
  63. package/build/analytics/index.d.ts +3 -0
  64. package/build/analytics/index.d.ts.map +1 -0
  65. package/build/analytics/index.js +3 -0
  66. package/build/analytics/index.js.map +1 -0
  67. package/build/analytics/player.d.ts +24 -0
  68. package/build/analytics/player.d.ts.map +1 -0
  69. package/build/analytics/player.js +30 -0
  70. package/build/analytics/player.js.map +1 -0
  71. package/build/analytics/playerAnalyticsModule.d.ts +13 -0
  72. package/build/analytics/playerAnalyticsModule.d.ts.map +1 -0
  73. package/build/analytics/playerAnalyticsModule.js +3 -0
  74. package/build/analytics/playerAnalyticsModule.js.map +1 -0
  75. package/build/audioSession.d.ts +33 -0
  76. package/build/audioSession.d.ts.map +1 -0
  77. package/build/audioSession.js +21 -0
  78. package/build/audioSession.js.map +1 -0
  79. package/build/audioTrack.d.ts +39 -0
  80. package/build/audioTrack.d.ts.map +1 -0
  81. package/build/audioTrack.js +2 -0
  82. package/build/audioTrack.js.map +1 -0
  83. package/build/bitmovinCastManager.d.ts +58 -0
  84. package/build/bitmovinCastManager.d.ts.map +1 -0
  85. package/build/bitmovinCastManager.js +64 -0
  86. package/build/bitmovinCastManager.js.map +1 -0
  87. package/build/bufferApi.d.ts +85 -0
  88. package/build/bufferApi.d.ts.map +1 -0
  89. package/build/bufferApi.js +60 -0
  90. package/build/bufferApi.js.map +1 -0
  91. package/build/bufferConfig.d.ts +42 -0
  92. package/build/bufferConfig.d.ts.map +1 -0
  93. package/build/bufferConfig.js +2 -0
  94. package/build/bufferConfig.js.map +1 -0
  95. package/build/components/PlayerView/events.d.ts +310 -0
  96. package/build/components/PlayerView/events.d.ts.map +1 -0
  97. package/build/components/PlayerView/events.js +2 -0
  98. package/build/components/PlayerView/events.js.map +1 -0
  99. package/build/components/PlayerView/index.d.ts +10 -0
  100. package/build/components/PlayerView/index.d.ts.map +1 -0
  101. package/build/components/PlayerView/index.js +72 -0
  102. package/build/components/PlayerView/index.js.map +1 -0
  103. package/build/components/PlayerView/native.d.ts +30 -0
  104. package/build/components/PlayerView/native.d.ts.map +1 -0
  105. package/build/components/PlayerView/native.js +6 -0
  106. package/build/components/PlayerView/native.js.map +1 -0
  107. package/build/components/PlayerView/nativeEvents.d.ts +437 -0
  108. package/build/components/PlayerView/nativeEvents.d.ts.map +1 -0
  109. package/build/components/PlayerView/nativeEvents.js +2 -0
  110. package/build/components/PlayerView/nativeEvents.js.map +1 -0
  111. package/build/components/PlayerView/pictureInPictureConfig.d.ts +22 -0
  112. package/build/components/PlayerView/pictureInPictureConfig.d.ts.map +1 -0
  113. package/build/components/PlayerView/pictureInPictureConfig.js +2 -0
  114. package/build/components/PlayerView/pictureInPictureConfig.js.map +1 -0
  115. package/build/components/PlayerView/playerViewConfig.d.ts +111 -0
  116. package/build/components/PlayerView/playerViewConfig.d.ts.map +1 -0
  117. package/build/components/PlayerView/playerViewConfig.js +51 -0
  118. package/build/components/PlayerView/playerViewConfig.js.map +1 -0
  119. package/build/components/PlayerView/properties.d.ts +61 -0
  120. package/build/components/PlayerView/properties.d.ts.map +1 -0
  121. package/build/components/PlayerView/properties.js +2 -0
  122. package/build/components/PlayerView/properties.js.map +1 -0
  123. package/build/components/index.d.ts +5 -0
  124. package/build/components/index.d.ts.map +1 -0
  125. package/build/components/index.js +5 -0
  126. package/build/components/index.js.map +1 -0
  127. package/build/debug.d.ts +46 -0
  128. package/build/debug.d.ts.map +1 -0
  129. package/build/debug.js +52 -0
  130. package/build/debug.js.map +1 -0
  131. package/build/decoder/decoderConfig.d.ts +96 -0
  132. package/build/decoder/decoderConfig.d.ts.map +1 -0
  133. package/build/decoder/decoderConfig.js +6 -0
  134. package/build/decoder/decoderConfig.js.map +1 -0
  135. package/build/decoder/decoderConfigModule.d.ts +14 -0
  136. package/build/decoder/decoderConfigModule.d.ts.map +1 -0
  137. package/build/decoder/decoderConfigModule.js +31 -0
  138. package/build/decoder/decoderConfigModule.js.map +1 -0
  139. package/build/decoder/index.d.ts +26 -0
  140. package/build/decoder/index.d.ts.map +1 -0
  141. package/build/decoder/index.js +50 -0
  142. package/build/decoder/index.js.map +1 -0
  143. package/build/drm/drmModule.d.ts +55 -0
  144. package/build/drm/drmModule.d.ts.map +1 -0
  145. package/build/drm/drmModule.js +3 -0
  146. package/build/drm/drmModule.js.map +1 -0
  147. package/build/drm/fairplayConfig.d.ts +91 -0
  148. package/build/drm/fairplayConfig.d.ts.map +1 -0
  149. package/build/drm/fairplayConfig.js +2 -0
  150. package/build/drm/fairplayConfig.js.map +1 -0
  151. package/build/drm/index.d.ts +112 -0
  152. package/build/drm/index.d.ts.map +1 -0
  153. package/build/drm/index.js +191 -0
  154. package/build/drm/index.js.map +1 -0
  155. package/build/drm/widevineConfig.d.ts +58 -0
  156. package/build/drm/widevineConfig.d.ts.map +1 -0
  157. package/build/drm/widevineConfig.js +2 -0
  158. package/build/drm/widevineConfig.js.map +1 -0
  159. package/build/events.d.ts +692 -0
  160. package/build/events.d.ts.map +1 -0
  161. package/build/events.js +2 -0
  162. package/build/events.js.map +1 -0
  163. package/build/hooks/index.d.ts +2 -0
  164. package/build/hooks/index.d.ts.map +1 -0
  165. package/build/hooks/index.js +2 -0
  166. package/build/hooks/index.js.map +1 -0
  167. package/build/hooks/usePlayer.d.ts +8 -0
  168. package/build/hooks/usePlayer.d.ts.map +1 -0
  169. package/build/hooks/usePlayer.js +10 -0
  170. package/build/hooks/usePlayer.js.map +1 -0
  171. package/build/hooks/useProxy.d.ts +18 -0
  172. package/build/hooks/useProxy.d.ts.map +1 -0
  173. package/build/hooks/useProxy.js +16 -0
  174. package/build/hooks/useProxy.js.map +1 -0
  175. package/build/index.d.ts +32 -0
  176. package/build/index.d.ts.map +1 -0
  177. package/build/index.js +32 -0
  178. package/build/index.js.map +1 -0
  179. package/build/liveConfig.d.ts +13 -0
  180. package/build/liveConfig.d.ts.map +1 -0
  181. package/build/liveConfig.js +2 -0
  182. package/build/liveConfig.js.map +1 -0
  183. package/build/media.d.ts +85 -0
  184. package/build/media.d.ts.map +1 -0
  185. package/build/media.js +2 -0
  186. package/build/media.js.map +1 -0
  187. package/build/mediaControlConfig.d.ts +62 -0
  188. package/build/mediaControlConfig.d.ts.map +1 -0
  189. package/build/mediaControlConfig.js +2 -0
  190. package/build/mediaControlConfig.js.map +1 -0
  191. package/build/mediaTrackRole.d.ts +28 -0
  192. package/build/mediaTrackRole.d.ts.map +1 -0
  193. package/build/mediaTrackRole.js +2 -0
  194. package/build/mediaTrackRole.js.map +1 -0
  195. package/build/modules/AudioSessionModule.d.ts +8 -0
  196. package/build/modules/AudioSessionModule.d.ts.map +1 -0
  197. package/build/modules/AudioSessionModule.js +7 -0
  198. package/build/modules/AudioSessionModule.js.map +1 -0
  199. package/build/modules/BitmovinCastManagerModule.d.ts +11 -0
  200. package/build/modules/BitmovinCastManagerModule.d.ts.map +1 -0
  201. package/build/modules/BitmovinCastManagerModule.js +3 -0
  202. package/build/modules/BitmovinCastManagerModule.js.map +1 -0
  203. package/build/modules/BufferModule.d.ts +16 -0
  204. package/build/modules/BufferModule.d.ts.map +1 -0
  205. package/build/modules/BufferModule.js +3 -0
  206. package/build/modules/BufferModule.js.map +1 -0
  207. package/build/modules/DebugModule.d.ts +8 -0
  208. package/build/modules/DebugModule.d.ts.map +1 -0
  209. package/build/modules/DebugModule.js +3 -0
  210. package/build/modules/DebugModule.js.map +1 -0
  211. package/build/modules/PlayerModule.d.ts +188 -0
  212. package/build/modules/PlayerModule.d.ts.map +1 -0
  213. package/build/modules/PlayerModule.js +3 -0
  214. package/build/modules/PlayerModule.js.map +1 -0
  215. package/build/modules/SourceModule.d.ts +51 -0
  216. package/build/modules/SourceModule.d.ts.map +1 -0
  217. package/build/modules/SourceModule.js +3 -0
  218. package/build/modules/SourceModule.js.map +1 -0
  219. package/build/modules/UuidModule.d.ts +8 -0
  220. package/build/modules/UuidModule.d.ts.map +1 -0
  221. package/build/modules/UuidModule.js +3 -0
  222. package/build/modules/UuidModule.js.map +1 -0
  223. package/build/nativeInstance.d.ts +49 -0
  224. package/build/nativeInstance.d.ts.map +1 -0
  225. package/build/nativeInstance.js +20 -0
  226. package/build/nativeInstance.js.map +1 -0
  227. package/build/network/index.d.ts +50 -0
  228. package/build/network/index.d.ts.map +1 -0
  229. package/build/network/index.js +102 -0
  230. package/build/network/index.js.map +1 -0
  231. package/build/network/networkConfig.d.ts +151 -0
  232. package/build/network/networkConfig.d.ts.map +1 -0
  233. package/build/network/networkConfig.js +21 -0
  234. package/build/network/networkConfig.js.map +1 -0
  235. package/build/network/networkModule.d.ts +29 -0
  236. package/build/network/networkModule.d.ts.map +1 -0
  237. package/build/network/networkModule.js +3 -0
  238. package/build/network/networkModule.js.map +1 -0
  239. package/build/offline/index.d.ts +8 -0
  240. package/build/offline/index.d.ts.map +1 -0
  241. package/build/offline/index.js +8 -0
  242. package/build/offline/index.js.map +1 -0
  243. package/build/offline/offlineContentConfig.d.ts +18 -0
  244. package/build/offline/offlineContentConfig.d.ts.map +1 -0
  245. package/build/offline/offlineContentConfig.js +2 -0
  246. package/build/offline/offlineContentConfig.js.map +1 -0
  247. package/build/offline/offlineContentManager.d.ts +90 -0
  248. package/build/offline/offlineContentManager.d.ts.map +1 -0
  249. package/build/offline/offlineContentManager.js +177 -0
  250. package/build/offline/offlineContentManager.js.map +1 -0
  251. package/build/offline/offlineContentManagerListener.d.ts +174 -0
  252. package/build/offline/offlineContentManagerListener.d.ts.map +1 -0
  253. package/build/offline/offlineContentManagerListener.js +17 -0
  254. package/build/offline/offlineContentManagerListener.js.map +1 -0
  255. package/build/offline/offlineContentOptions.d.ts +29 -0
  256. package/build/offline/offlineContentOptions.d.ts.map +1 -0
  257. package/build/offline/offlineContentOptions.js +2 -0
  258. package/build/offline/offlineContentOptions.js.map +1 -0
  259. package/build/offline/offlineDownloadRequest.d.ts +19 -0
  260. package/build/offline/offlineDownloadRequest.d.ts.map +1 -0
  261. package/build/offline/offlineDownloadRequest.js +2 -0
  262. package/build/offline/offlineDownloadRequest.js.map +1 -0
  263. package/build/offline/offlineModule.d.ts +32 -0
  264. package/build/offline/offlineModule.d.ts.map +1 -0
  265. package/build/offline/offlineModule.js +3 -0
  266. package/build/offline/offlineModule.js.map +1 -0
  267. package/build/offline/offlineSourceOptions.d.ts +12 -0
  268. package/build/offline/offlineSourceOptions.d.ts.map +1 -0
  269. package/build/offline/offlineSourceOptions.js +2 -0
  270. package/build/offline/offlineSourceOptions.js.map +1 -0
  271. package/build/offline/offlineState.d.ts +23 -0
  272. package/build/offline/offlineState.d.ts.map +1 -0
  273. package/build/offline/offlineState.js +24 -0
  274. package/build/offline/offlineState.js.map +1 -0
  275. package/build/playbackConfig.d.ts +88 -0
  276. package/build/playbackConfig.d.ts.map +1 -0
  277. package/build/playbackConfig.js +2 -0
  278. package/build/playbackConfig.js.map +1 -0
  279. package/build/player.d.ts +308 -0
  280. package/build/player.d.ts.map +1 -0
  281. package/build/player.js +445 -0
  282. package/build/player.js.map +1 -0
  283. package/build/playerConfig.d.ts +83 -0
  284. package/build/playerConfig.d.ts.map +1 -0
  285. package/build/playerConfig.js +2 -0
  286. package/build/playerConfig.js.map +1 -0
  287. package/build/remoteControlConfig.d.ts +38 -0
  288. package/build/remoteControlConfig.d.ts.map +1 -0
  289. package/build/remoteControlConfig.js +2 -0
  290. package/build/remoteControlConfig.js.map +1 -0
  291. package/build/source.d.ts +216 -0
  292. package/build/source.d.ts.map +1 -0
  293. package/build/source.js +167 -0
  294. package/build/source.js.map +1 -0
  295. package/build/styleConfig.d.ts +120 -0
  296. package/build/styleConfig.d.ts.map +1 -0
  297. package/build/styleConfig.js +38 -0
  298. package/build/styleConfig.js.map +1 -0
  299. package/build/subtitleFormat.d.ts +27 -0
  300. package/build/subtitleFormat.d.ts.map +1 -0
  301. package/build/subtitleFormat.js +28 -0
  302. package/build/subtitleFormat.js.map +1 -0
  303. package/build/subtitleTrack.d.ts +55 -0
  304. package/build/subtitleTrack.d.ts.map +1 -0
  305. package/build/subtitleTrack.js +2 -0
  306. package/build/subtitleTrack.js.map +1 -0
  307. package/build/thumbnail.d.ts +38 -0
  308. package/build/thumbnail.d.ts.map +1 -0
  309. package/build/thumbnail.js +2 -0
  310. package/build/thumbnail.js.map +1 -0
  311. package/build/tweaksConfig.d.ts +197 -0
  312. package/build/tweaksConfig.d.ts.map +1 -0
  313. package/build/tweaksConfig.js +25 -0
  314. package/build/tweaksConfig.js.map +1 -0
  315. package/build/ui/customMessageHandlerModule.d.ts +27 -0
  316. package/build/ui/customMessageHandlerModule.d.ts.map +1 -0
  317. package/build/ui/customMessageHandlerModule.js +3 -0
  318. package/build/ui/customMessageHandlerModule.js.map +1 -0
  319. package/build/ui/custommessagehandler.d.ts +56 -0
  320. package/build/ui/custommessagehandler.d.ts.map +1 -0
  321. package/build/ui/custommessagehandler.js +54 -0
  322. package/build/ui/custommessagehandler.js.map +1 -0
  323. package/build/ui/custommessagehandlerbridge.d.ts +33 -0
  324. package/build/ui/custommessagehandlerbridge.d.ts.map +1 -0
  325. package/build/ui/custommessagehandlerbridge.js +72 -0
  326. package/build/ui/custommessagehandlerbridge.js.map +1 -0
  327. package/build/ui/custommessagesender.d.ts +5 -0
  328. package/build/ui/custommessagesender.d.ts.map +1 -0
  329. package/build/ui/custommessagesender.js +2 -0
  330. package/build/ui/custommessagesender.js.map +1 -0
  331. package/build/ui/fullscreenHandlerModule.d.ts +20 -0
  332. package/build/ui/fullscreenHandlerModule.d.ts.map +1 -0
  333. package/build/ui/fullscreenHandlerModule.js +3 -0
  334. package/build/ui/fullscreenHandlerModule.js.map +1 -0
  335. package/build/ui/fullscreenhandler.d.ts +18 -0
  336. package/build/ui/fullscreenhandler.d.ts.map +1 -0
  337. package/build/ui/fullscreenhandler.js +2 -0
  338. package/build/ui/fullscreenhandler.js.map +1 -0
  339. package/build/ui/fullscreenhandlerbridge.d.ts +26 -0
  340. package/build/ui/fullscreenhandlerbridge.d.ts.map +1 -0
  341. package/build/ui/fullscreenhandlerbridge.js +67 -0
  342. package/build/ui/fullscreenhandlerbridge.js.map +1 -0
  343. package/build/ui/index.d.ts +3 -0
  344. package/build/ui/index.d.ts.map +1 -0
  345. package/build/ui/index.js +3 -0
  346. package/build/ui/index.js.map +1 -0
  347. package/expo-module.config.json +40 -0
  348. package/ios/AppLifecycleDelegate.swift +25 -0
  349. package/ios/AudioSessionModule.swift +14 -40
  350. package/ios/BitmovinCastManagerModule.swift +30 -69
  351. package/ios/BufferModule.swift +26 -62
  352. package/ios/CustomMessageHandlerBridge.swift +11 -18
  353. package/ios/CustomMessageHandlerModule.swift +61 -63
  354. package/ios/DebugModule.swift +6 -27
  355. package/ios/DrmModule.swift +105 -379
  356. package/ios/Event+JSON.swift +1 -0
  357. package/ios/FullscreenHandlerBridge.swift +12 -5
  358. package/ios/FullscreenHandlerModule.swift +73 -57
  359. package/ios/LockedBox.swift +21 -0
  360. package/ios/ModuleRegistry+Generics.swift +11 -0
  361. package/ios/NetworkModule.swift +78 -82
  362. package/ios/OfflineContentManagerBridge.swift +11 -38
  363. package/ios/OfflineModule.swift +136 -454
  364. package/ios/PlayerAnalyticsModule.swift +24 -52
  365. package/ios/PlayerModule.swift +192 -770
  366. package/ios/RCTConvert+BitmovinPlayer.swift +38 -312
  367. package/ios/RNBitmovinPlayer.h +1 -8
  368. package/ios/RNBitmovinPlayer.podspec +47 -0
  369. package/ios/RNPlayerView.swift +600 -77
  370. package/ios/RNPlayerViewManager.swift +96 -210
  371. package/ios/Registry.swift +2 -2
  372. package/ios/ResultWaiter.swift +66 -0
  373. package/ios/SourceModule.swift +104 -223
  374. package/ios/UuidModule.swift +9 -18
  375. package/package.json +67 -71
  376. package/plugin/build/FeatureFlags.d.ts +24 -0
  377. package/plugin/build/FeatureFlags.js +2 -0
  378. package/plugin/build/index.d.ts +7 -0
  379. package/plugin/build/index.js +10 -0
  380. package/plugin/build/withAppGradleDependencies.d.ts +7 -0
  381. package/plugin/build/withAppGradleDependencies.js +49 -0
  382. package/plugin/build/withBitmovinAndroidConfig.d.ts +7 -0
  383. package/plugin/build/withBitmovinAndroidConfig.js +159 -0
  384. package/plugin/build/withBitmovinConfig.d.ts +7 -0
  385. package/plugin/build/withBitmovinConfig.js +21 -0
  386. package/plugin/build/withBitmovinIosConfig.d.ts +7 -0
  387. package/plugin/build/withBitmovinIosConfig.js +53 -0
  388. package/plugin/src/FeatureFlags.ts +21 -0
  389. package/plugin/src/index.ts +9 -0
  390. package/plugin/src/withAppGradleDependencies.ts +80 -0
  391. package/plugin/src/withBitmovinAndroidConfig.ts +224 -0
  392. package/plugin/src/withBitmovinConfig.ts +24 -0
  393. package/plugin/src/withBitmovinIosConfig.ts +71 -0
  394. package/plugin/tsconfig.json +9 -0
  395. package/plugin/tsconfig.tsbuildinfo +1 -0
  396. package/prettier.config.js +7 -0
  397. package/scripts/format-android.sh +2 -0
  398. package/scripts/format-swift.sh +3 -0
  399. package/scripts/lint-android.sh +2 -0
  400. package/scripts/lint-swift.sh +3 -0
  401. package/scripts/pre-commit.sh +14 -0
  402. package/scripts/setup-hooks.sh +58 -0
  403. package/src/BitmovinPlayerReactNative.types.ts +19 -0
  404. package/src/adaptationConfig.ts +1 -1
  405. package/src/advertising.ts +1 -1
  406. package/src/analytics/config.ts +4 -4
  407. package/src/analytics/player.ts +4 -6
  408. package/src/analytics/playerAnalyticsModule.ts +19 -0
  409. package/src/audioSession.ts +4 -6
  410. package/src/audioTrack.ts +1 -1
  411. package/src/bitmovinCastManager.ts +14 -10
  412. package/src/bufferApi.ts +1 -3
  413. package/src/bufferConfig.ts +2 -2
  414. package/src/components/PlayerView/events.ts +92 -94
  415. package/src/components/PlayerView/index.tsx +109 -159
  416. package/src/components/PlayerView/native.ts +24 -11
  417. package/src/components/PlayerView/nativeEvents.ts +113 -94
  418. package/src/components/PlayerView/pictureInPictureConfig.ts +1 -1
  419. package/src/components/PlayerView/playerViewConfig.ts +4 -8
  420. package/src/components/PlayerView/properties.ts +23 -22
  421. package/src/debug.ts +1 -3
  422. package/src/decoder/decoderConfig.ts +3 -3
  423. package/src/decoder/decoderConfigModule.ts +62 -0
  424. package/src/decoder/index.ts +32 -16
  425. package/src/drm/drmModule.ts +84 -0
  426. package/src/drm/fairplayConfig.ts +1 -1
  427. package/src/drm/index.ts +130 -40
  428. package/src/drm/widevineConfig.ts +5 -5
  429. package/src/events.ts +47 -41
  430. package/src/hooks/useProxy.ts +13 -20
  431. package/src/mediaControlConfig.ts +1 -1
  432. package/src/modules/AudioSessionModule.ts +13 -0
  433. package/src/modules/BitmovinCastManagerModule.ts +14 -0
  434. package/src/modules/BufferModule.ts +18 -0
  435. package/src/modules/DebugModule.ts +9 -0
  436. package/src/modules/PlayerModule.ts +251 -0
  437. package/src/modules/SourceModule.ts +74 -0
  438. package/src/modules/UuidModule.ts +9 -0
  439. package/src/nativeInstance.ts +3 -3
  440. package/src/network/index.ts +42 -15
  441. package/src/network/networkConfig.ts +3 -3
  442. package/src/network/networkModule.ts +51 -0
  443. package/src/offline/offlineContentConfig.ts +1 -1
  444. package/src/offline/offlineContentManager.ts +15 -50
  445. package/src/offline/offlineContentManagerListener.ts +20 -23
  446. package/src/offline/offlineContentOptions.ts +2 -2
  447. package/src/offline/offlineDownloadRequest.ts +1 -1
  448. package/src/offline/offlineModule.ts +46 -0
  449. package/src/offline/offlineSourceOptions.ts +2 -2
  450. package/src/offline/offlineState.ts +1 -1
  451. package/src/playbackConfig.ts +5 -6
  452. package/src/player.ts +53 -48
  453. package/src/source.ts +15 -14
  454. package/src/styleConfig.ts +5 -5
  455. package/src/subtitleFormat.ts +5 -5
  456. package/src/subtitleTrack.ts +1 -1
  457. package/src/tweaksConfig.ts +16 -16
  458. package/src/ui/customMessageHandlerModule.ts +46 -0
  459. package/src/ui/custommessagehandlerbridge.ts +45 -18
  460. package/src/ui/fullscreenHandlerModule.ts +35 -0
  461. package/src/ui/fullscreenhandlerbridge.ts +35 -15
  462. package/tsconfig.json +9 -0
  463. package/typedoc.json +23 -0
  464. package/RNBitmovinPlayer.podspec +0 -26
  465. package/android/src/main/java/com/bitmovin/player/reactnative/BitmovinBaseModule.kt +0 -114
  466. package/android/src/main/java/com/bitmovin/player/reactnative/EventRelay.kt +0 -47
  467. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerViewPackage.kt +0 -48
  468. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ReactContextExtension.kt +0 -24
  469. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ReadableArray.kt +0 -20
  470. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ReadableMap.kt +0 -15
  471. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ReadableMapExtension.kt +0 -57
  472. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/WritableMap.kt +0 -27
  473. package/android/src/main/java/com/bitmovin/player/reactnative/ui/CustomMessageHandlerModule.kt +0 -86
  474. package/android/src/main/java/com/bitmovin/player/reactnative/ui/FullscreenHandlerModule.kt +0 -78
  475. package/ios/AudioSessionModule.m +0 -10
  476. package/ios/BitmovinCastManagerModule.m +0 -14
  477. package/ios/BufferModule.m +0 -8
  478. package/ios/CustomMessageHandlerModule.m +0 -10
  479. package/ios/DebugModule.m +0 -7
  480. package/ios/DrmModule.m +0 -16
  481. package/ios/FullscreenHandlerModule.m +0 -10
  482. package/ios/NetworkModule.m +0 -10
  483. package/ios/OfflineModule.m +0 -19
  484. package/ios/PlayerAnalyticsModule.m +0 -8
  485. package/ios/PlayerModule.m +0 -130
  486. package/ios/PreprocessHttpRequestDelegateBridge.swift +0 -30
  487. package/ios/RCTBridge+Generics.swift +0 -6
  488. package/ios/RNBitmovinPlayer.xcodeproj/project.pbxproj +0 -303
  489. package/ios/RNPlayerView+PlayerListener.swift +0 -229
  490. package/ios/RNPlayerView+UserInterfaceListener.swift +0 -35
  491. package/ios/RNPlayerViewManager.m +0 -79
  492. package/ios/SourceModule.m +0 -42
  493. package/ios/UuidModule.m +0 -9
  494. package/lib/index.d.mts +0 -4303
  495. package/lib/index.d.ts +0 -4303
  496. package/lib/index.js +0 -1895
  497. package/lib/index.mjs +0 -1836
@@ -1,711 +1,220 @@
1
- // swiftlint:disable file_length
2
1
  import BitmovinPlayer
2
+ import ExpoModulesCore
3
3
 
4
- @objc(PlayerModule)
5
- public class PlayerModule: NSObject, RCTBridgeModule { // swiftlint:disable:this type_body_length
6
- // swiftlint:disable:next implicitly_unwrapped_optional
7
- @objc public var bridge: RCTBridge!
8
-
9
- /// In-memory mapping from `nativeId`s to `Player` instances.
4
+ public class PlayerModule: Module {
10
5
  private var players: Registry<Player> = [:]
11
6
 
12
- // swiftlint:disable:next implicitly_unwrapped_optional
13
- public static func moduleName() -> String! {
14
- "PlayerModule"
15
- }
16
-
17
- public static func requiresMainQueueSetup() -> Bool {
18
- true
19
- }
20
-
21
- // swiftlint:disable:next implicitly_unwrapped_optional
22
- public var methodQueue: DispatchQueue! {
23
- bridge.uiManager.methodQueue
24
- }
25
-
26
- deinit {
27
- // Destroy all players on the main thread when the module is deallocated.
28
- // This is necessary when the IMA SDK is present in the app, as it may crash if the players are destroyed on a
29
- // background thread.
30
- DispatchQueue.main.async { [players] in
31
- players.values.forEach { $0.destroy() }
32
- }
33
- }
34
-
35
- /**
36
- Fetches the `Player` instance associated with `nativeId` from the internal players.
37
- - Parameter nativeId: `Player` instance ID.
38
- - Returns: The associated `Player` instance or `nil`.
39
- */
40
- @objc
41
- func retrieve(_ nativeId: NativeId) -> Player? {
42
- players[nativeId]
43
- }
44
-
45
- /**
46
- Creates a new `Player` instance inside the internal players using the provided `config` object.
47
- - Parameter config: `PlayerConfig` object received from JS.
48
- */
49
- @objc(initWithConfig:config:networkNativeId:decoderNativeId:)
50
- func initWithConfig(
51
- _ nativeId: NativeId,
52
- config: Any?,
53
- networkNativeId: NativeId?,
54
- decoderNativeId: NativeId?
55
- ) {
56
- bridge.uiManager.addUIBlock { [weak self] _, _ in
57
- guard
58
- self?.players[nativeId] == nil,
59
- let playerConfig = RCTConvert.playerConfig(config)
60
- else {
61
- return
62
- }
63
- #if os(iOS)
64
- self?.setupRemoteControlConfig(playerConfig.remoteControlConfig)
65
- #endif
66
- if let networkNativeId,
67
- let networkConfig = self?.setupNetworkConfig(nativeId: networkNativeId) {
68
- playerConfig.networkConfig = networkConfig
69
- }
70
- self?.players[nativeId] = PlayerFactory.create(playerConfig: playerConfig)
71
- }
72
- }
73
-
74
- /**
75
- Creates a new analytics enabled `Player` instance inside the internal players using the provided `config`
76
- and `analyticsConfig` object.
77
- - Parameter config: `PlayerConfig` object received from JS.
78
- - Parameter analyticsConfig: `AnalyticsConfig` object received from JS.
79
- */
80
- @objc(initWithAnalyticsConfig:config:networkNativeId:analyticsConfig:decoderNativeId:)
81
- func initWithAnalyticsConfig(
82
- _ nativeId: NativeId,
83
- config: Any?,
84
- networkNativeId: NativeId?,
85
- analyticsConfig: Any?,
86
- decoderNativeId: NativeId?
87
- ) {
88
- bridge.uiManager.addUIBlock { [weak self] _, _ in
89
- let analyticsConfigJson = analyticsConfig
90
- guard
91
- self?.players[nativeId] == nil,
92
- let playerConfig = RCTConvert.playerConfig(config),
93
- let analyticsConfig = RCTConvert.analyticsConfig(analyticsConfig)
94
- else {
95
- return
96
- }
97
- #if os(iOS)
98
- self?.setupRemoteControlConfig(playerConfig.remoteControlConfig)
99
- #endif
100
- if let networkNativeId,
101
- let networkConfig = self?.setupNetworkConfig(nativeId: networkNativeId) {
102
- playerConfig.networkConfig = networkConfig
103
- }
104
- let defaultMetadata = RCTConvert.analyticsDefaultMetadataFromAnalyticsConfig(analyticsConfigJson)
105
- self?.players[nativeId] = PlayerFactory.create(
106
- playerConfig: playerConfig,
107
- analyticsConfig: analyticsConfig,
108
- defaultMetadata: defaultMetadata ?? DefaultMetadata()
109
- )
110
- }
111
- }
112
-
113
- /**
114
- Loads the given source configuration into `nativeId`'s `Player` object.
115
- - Parameter nativeId: Target player.
116
- - Parameter sourceNativeId: The `nativeId` of the `Source` object.
117
- */
118
- @objc(loadSource:sourceNativeId:)
119
- func loadSource(_ nativeId: NativeId, sourceNativeId: NativeId) {
120
- bridge.uiManager.addUIBlock { [weak self] _, _ in
121
- guard
122
- let player = self?.players[nativeId],
123
- let source = self?.bridge[SourceModule.self]?.retrieve(sourceNativeId)
124
- else {
125
- return
7
+ // swiftlint:disable:next function_body_length
8
+ public func definition() -> ModuleDefinition {
9
+ Name("PlayerModule")
10
+ OnCreate {}
11
+ OnDestroy {
12
+ // Destroy all players on the main thread when the module is deallocated.
13
+ // This is necessary when the IMA SDK is present in the app,
14
+ // as it may crash if the players are destroyed on a background thread.
15
+ DispatchQueue.main.async { [players] in
16
+ players.values.forEach { $0.destroy() }
126
17
  }
127
- player.load(source: source)
128
18
  }
129
- }
130
-
131
- /**
132
- Loads the given offline source configuration into `nativeId`'s `Player` object.
133
- - Parameter nativeId: Target player.
134
- - Parameter offlineContentManagerBridgeId: The `nativeId` of the `OfflineModule` object.
135
- */
136
- @objc(loadOfflineContent:offlineContentManagerBridgeId:options:)
137
- func loadOfflineContent(_ nativeId: NativeId, offlineContentManagerBridgeId: NativeId, options: Any?) {
138
- #if os(iOS)
139
- bridge.uiManager.addUIBlock { [weak self] _, _ in
140
- guard let player = self?.players[nativeId],
141
- let offlineContentManagerBridge = self?.bridge[OfflineModule.self]?
142
- .retrieve(offlineContentManagerBridgeId) else {
143
- return
144
- }
145
- let optionsDictionary = options as? [String: Any?] ?? [:]
146
- let restrictedToAssetCache = optionsDictionary["restrictedToAssetCache"] as? Bool ?? true
147
- let offlineSourceConfig = offlineContentManagerBridge
148
- .offlineContentManager
149
- .createOfflineSourceConfig(restrictedToAssetCache: restrictedToAssetCache)
150
-
151
- guard let offlineSourceConfig else { return }
152
- player.load(sourceConfig: offlineSourceConfig)
153
- }
154
- #endif
155
- }
156
-
157
- /**
158
- Call `.unload()` on `nativeId`'s player.
159
- - Parameter nativeId: Target player Id.
160
- */
161
- @objc(unload:)
162
- func unload(_ nativeId: NativeId) {
163
- bridge.uiManager.addUIBlock { [weak self] _, _ in
164
- self?.players[nativeId]?.unload()
165
- }
166
- }
167
-
168
- /**
169
- Call `.play()` on `nativeId`'s player.
170
- - Parameter nativeId: Target player Id.
171
- */
172
- @objc(play:)
173
- func play(_ nativeId: NativeId) {
174
- bridge.uiManager.addUIBlock { [weak self] _, _ in
19
+ AsyncFunction("play") { [weak self] (nativeId: NativeId) in
175
20
  self?.players[nativeId]?.play()
176
- }
177
- }
178
-
179
- /**
180
- Call `.pause()` on `nativeId`'s player.
181
- - Parameter nativeId: Target player Id.
182
- */
183
- @objc(pause:)
184
- func pause(_ nativeId: NativeId) {
185
- bridge.uiManager.addUIBlock { [weak self] _, _ in
21
+ }.runOnQueue(.main)
22
+ AsyncFunction("pause") { [weak self] (nativeId: NativeId) in
186
23
  self?.players[nativeId]?.pause()
187
- }
188
- }
189
-
190
- /**
191
- Call `.seek(time:)` on `nativeId`'s player.
192
- - Parameter nativeId: Target player Id.
193
- - Parameter time: Time to seek in seconds.
194
- */
195
- @objc(seek:time:)
196
- func seek(_ nativeId: NativeId, time: NSNumber) {
197
- bridge.uiManager.addUIBlock { [weak self] _, _ in
198
- self?.players[nativeId]?.seek(time: time.doubleValue)
199
- }
200
- }
201
-
202
- /**
203
- Sets `timeShift` on `nativeId`'s player.
204
- - Parameter nativeId: Target player Id.
205
- - Parameter offset: Offset to timeShift to in seconds.
206
- */
207
- @objc(timeShift:offset:)
208
- func timeShift(_ nativeId: NativeId, offset: NSNumber) {
209
- bridge.uiManager.addUIBlock { [weak self] _, _ in
210
- self?.players[nativeId]?.timeShift = offset.doubleValue
211
- }
212
- }
213
-
214
- /**
215
- Call `.mute()` on `nativeId`'s player.
216
- - Parameter nativeId: Target player Id.
217
- */
218
- @objc(mute:)
219
- func mute(_ nativeId: NativeId) {
220
- bridge.uiManager.addUIBlock { [weak self] _, _ in
24
+ }.runOnQueue(.main)
25
+ AsyncFunction("mute") { [weak self] (nativeId: NativeId) in
221
26
  self?.players[nativeId]?.mute()
222
- }
223
- }
224
-
225
- /**
226
- Call `.unmute()` on `nativeId`'s player.
227
- - Parameter nativeId: Target player Id.
228
- */
229
- @objc(unmute:)
230
- func unmute(_ nativeId: NativeId) {
231
- bridge.uiManager.addUIBlock { [weak self] _, _ in
27
+ }.runOnQueue(.main)
28
+ AsyncFunction("unmute") { [weak self] (nativeId: NativeId) in
232
29
  self?.players[nativeId]?.unmute()
233
- }
234
- }
235
-
236
- /**
237
- Call `.destroy()` on `nativeId`'s player.
238
- - Parameter nativeId: Target player Id.
239
- */
240
- @objc(destroy:)
241
- func destroy(_ nativeId: NativeId) {
242
- bridge.uiManager.addUIBlock { [weak self] _, _ in
30
+ }.runOnQueue(.main)
31
+ AsyncFunction("seek") { [weak self] (nativeId: NativeId, time: Double) in
32
+ self?.players[nativeId]?.seek(time: time)
33
+ }.runOnQueue(.main)
34
+ AsyncFunction("timeShift") { [weak self] (nativeId: NativeId, offset: Double) in
35
+ self?.players[nativeId]?.timeShift = offset
36
+ }.runOnQueue(.main)
37
+ AsyncFunction("destroy") { [weak self] (nativeId: NativeId) in
243
38
  if let player = self?.players[nativeId] {
244
39
  player.destroy()
245
- // Remove destroyed player from the players
246
40
  self?.players[nativeId] = nil
247
41
  }
248
- }
249
- }
250
-
251
- /**
252
- Call `.setVolume(volume:)` on `nativeId`'s player.
253
- - Parameter nativeId: Target player Id.
254
- - Parameter volume: Integer representing the volume level (between 0 to 100).
255
- */
256
- @objc(setVolume:volume:)
257
- func setVolume(_ nativeId: NativeId, volume: NSNumber) {
258
- bridge.uiManager.addUIBlock { [weak self] _, _ in
259
- self?.players[nativeId]?.volume = volume.intValue
260
- }
261
- }
262
-
263
- /**
264
- Resolve `nativeId`'s current volume.
265
- - Parameter nativeId: Target player Id.
266
- - Parameter resolver: JS promise resolver.
267
- - Parameter rejecter: JS promise rejecter.
268
- */
269
- @objc(getVolume:resolver:rejecter:)
270
- func getVolume(
271
- _ nativeId: NativeId,
272
- resolver resolve: @escaping RCTPromiseResolveBlock,
273
- rejecter reject: @escaping RCTPromiseRejectBlock
274
- ) {
275
- bridge.uiManager.addUIBlock { [weak self] _, _ in
276
- resolve(self?.players[nativeId]?.volume)
277
- }
278
- }
279
-
280
- /**
281
- Resolve `nativeId`'s current playback time.
282
- - Parameter nativeId: Target player Id.
283
- - Parameter mode: Time mode: either relative or absolute. Can be empty.
284
- - Parameter resolver: JS promise resolver.
285
- - Parameter rejecter: JS promise rejecter.
286
- */
287
- @objc(currentTime:mode:resolver:rejecter:)
288
- func currentTime(
289
- _ nativeId: NativeId,
290
- mode: String?,
291
- resolver resolve: @escaping RCTPromiseResolveBlock,
292
- rejecter reject: @escaping RCTPromiseRejectBlock
293
- ) {
294
- bridge.uiManager.addUIBlock { [weak self] _, _ in
42
+ }.runOnQueue(.main)
43
+ AsyncFunction("setVolume") { [weak self] (nativeId: NativeId, volume: Int) in
44
+ self?.players[nativeId]?.volume = volume
45
+ }.runOnQueue(.main)
46
+ AsyncFunction("unload") { [weak self] (nativeId: NativeId) in
47
+ self?.players[nativeId]?.unload()
48
+ }.runOnQueue(.main)
49
+ AsyncFunction("setPlaybackSpeed") { [weak self] (nativeId: NativeId, playbackSpeed: Float) in
50
+ self?.players[nativeId]?.playbackSpeed = playbackSpeed
51
+ }.runOnQueue(.main)
52
+ AsyncFunction("setMaxSelectableBitrate") { [weak self] (nativeId: NativeId, maxSelectableBitrate: Int) in
53
+ self?.players[nativeId]?.maxSelectableBitrate = UInt(maxSelectableBitrate)
54
+ }.runOnQueue(.main)
55
+ AsyncFunction("getVolume") { [weak self] (nativeId: NativeId) -> Int? in
56
+ self?.players[nativeId]?.volume
57
+ }.runOnQueue(.main)
58
+ AsyncFunction("currentTime") { [weak self] (nativeId: NativeId, mode: String?) -> Double? in
295
59
  let player = self?.players[nativeId]
296
60
  if let mode {
297
- resolve(player?.currentTime(RCTConvert.timeMode(mode)))
298
- } else {
299
- resolve(player?.currentTime)
61
+ return player?.currentTime(RCTConvert.timeMode(mode))
300
62
  }
301
- }
302
- }
303
-
304
- /**
305
- Resolve `nativeId`'s active source duration.
306
- - Parameter nativeId: Target player Id.
307
- - Parameter resolver: JS promise resolver.
308
- - Parameter rejecter: JS promise rejecter.
309
- */
310
- @objc(duration:resolver:rejecter:)
311
- func duration(
312
- _ nativeId: NativeId,
313
- resolver resolve: @escaping RCTPromiseResolveBlock,
314
- rejecter reject: @escaping RCTPromiseRejectBlock
315
- ) {
316
- bridge.uiManager.addUIBlock { [weak self] _, _ in
317
- resolve(self?.players[nativeId]?.duration)
318
- }
319
- }
320
-
321
- /**
322
- Resolve `nativeId`'s current muted state.
323
- - Parameter nativeId: Target player Id.
324
- - Parameter resolver: JS promise resolver.
325
- - Parameter rejecter: JS promise rejecter.
326
- */
327
- @objc(isMuted:resolver:rejecter:)
328
- func isMuted(
329
- _ nativeId: NativeId,
330
- resolver resolve: @escaping RCTPromiseResolveBlock,
331
- rejecter reject: @escaping RCTPromiseRejectBlock
332
- ) {
333
- bridge.uiManager.addUIBlock { [weak self] _, _ in
334
- resolve(self?.players[nativeId]?.isMuted)
335
- }
336
- }
337
-
338
- /**
339
- Resolve `nativeId`'s current playing state.
340
- - Parameter nativeId: Target player Id.
341
- - Parameter resolver: JS promise resolver.
342
- - Parameter rejecter: JS promise rejecter.
343
- */
344
- @objc(isPlaying:resolver:rejecter:)
345
- func isPlaying(
346
- _ nativeId: NativeId,
347
- resolver resolve: @escaping RCTPromiseResolveBlock,
348
- rejecter reject: @escaping RCTPromiseRejectBlock
349
- ) {
350
- bridge.uiManager.addUIBlock { [weak self] _, _ in
351
- resolve(self?.players[nativeId]?.isPlaying)
352
- }
353
- }
354
-
355
- /**
356
- Resolve `nativeId`'s current paused state.
357
- - Parameter nativeId: Target player Id.
358
- - Parameter resolver: JS promise resolver.
359
- - Parameter rejecter: JS promise rejecter.
360
- */
361
- @objc(isPaused:resolver:rejecter:)
362
- func isPaused(
363
- _ nativeId: NativeId,
364
- resolver resolve: @escaping RCTPromiseResolveBlock,
365
- rejecter reject: @escaping RCTPromiseRejectBlock
366
- ) {
367
- bridge.uiManager.addUIBlock { [weak self] _, _ in
368
- resolve(self?.players[nativeId]?.isPaused)
369
- }
370
- }
371
-
372
- /**
373
- Resolve `nativeId`'s live streaming state.
374
- `true` if source is a live streaming.
375
- - Parameter nativeId: Target player Id.
376
- - Parameter resolver: JS promise resolver.
377
- - Parameter rejecter: JS promise rejecter.
378
- */
379
- @objc(isLive:resolver:rejecter:)
380
- func isLive(
381
- _ nativeId: NativeId,
382
- resolver resolve: @escaping RCTPromiseResolveBlock,
383
- rejecter reject: @escaping RCTPromiseRejectBlock
384
- ) {
385
- bridge.uiManager.addUIBlock { [weak self] _, _ in
386
- resolve(self?.players[nativeId]?.isLive)
387
- }
388
- }
389
-
390
- /**
391
- Resolve `nativeId`'s air play activation state.
392
- - Parameter nativeId: Target player Id.
393
- - Parameter resolver: JS promise resolver.
394
- - Parameter rejecter: JS promise rejecter.
395
- */
396
- @objc(isAirPlayActive:resolver:rejecter:)
397
- func isAirPlayActive(
398
- _ nativeId: NativeId,
399
- resolver resolve: @escaping RCTPromiseResolveBlock,
400
- rejecter reject: @escaping RCTPromiseRejectBlock
401
- ) {
402
- bridge.uiManager.addUIBlock { [weak self] _, _ in
403
- resolve(self?.players[nativeId]?.isAirPlayActive)
404
- }
405
- }
406
-
407
- /**
408
- Resolve `nativeId`'s air play availability state.
409
- - Parameter nativeId: Target player Id.
410
- - Parameter resolver: JS promise resolver.
411
- - Parameter rejecter: JS promise rejecter.
412
- */
413
- @objc(isAirPlayAvailable:resolver:rejecter:)
414
- func isAirPlayAvailable(
415
- _ nativeId: NativeId,
416
- resolver resolve: @escaping RCTPromiseResolveBlock,
417
- rejecter reject: @escaping RCTPromiseRejectBlock
418
- ) {
419
- bridge.uiManager.addUIBlock { [weak self] _, _ in
420
- resolve(self?.players[nativeId]?.isAirPlayAvailable)
421
- }
422
- }
423
-
424
- /**
425
- Resolve `nativeId`'s currently selected audio track.
426
- - Parameter nativeId: Target player Id.
427
- - Parameter resolver: JS promise resolver.
428
- - Parameter rejecter: JS promise rejecter.
429
- */
430
- @objc(getAudioTrack:resolver:rejecter:)
431
- func getAudioTrack(
432
- _ nativeId: NativeId,
433
- resolver resolve: @escaping RCTPromiseResolveBlock,
434
- rejecter reject: @escaping RCTPromiseRejectBlock
435
- ) {
436
- bridge.uiManager.addUIBlock { [weak self] _, _ in
437
- resolve(RCTConvert.audioTrackJson(self?.players[nativeId]?.audio))
438
- }
439
- }
440
-
441
- /**
442
- Resolve `nativeId`'s player available audio tracks.
443
- - Parameter nativeId: Target player Id.
444
- - Parameter resolver: JS promise resolver.
445
- - Parameter rejecter: JS promise rejecter.
446
- */
447
- @objc(getAvailableAudioTracks:resolver:rejecter:)
448
- func getAvailableAudioTracks(
449
- _ nativeId: NativeId,
450
- resolver resolve: @escaping RCTPromiseResolveBlock,
451
- rejecter reject: @escaping RCTPromiseRejectBlock
452
- ) {
453
- bridge.uiManager.addUIBlock { [weak self] _, _ in
454
- let audioTracksJson = self?.players[nativeId]?.availableAudio.map {
455
- RCTConvert.audioTrackJson($0)
456
- }
457
- resolve(audioTracksJson ?? [])
458
- }
459
- }
460
-
461
- /**
462
- Set `nativeId`'s player audio track.
463
- - Parameter nativeId: Target player Id.
464
- - Parameter trackIdentifier: The audio track identifier.
465
- - Parameter resolver: JS promise resolver.
466
- - Parameter rejecter: JS promise rejecter.
467
- */
468
- @objc(setAudioTrack:trackIdentifier:resolver:rejecter:)
469
- func setAudioTrack(
470
- _ nativeId: NativeId,
471
- trackIdentifier: String,
472
- resolver resolve: @escaping RCTPromiseResolveBlock,
473
- rejecter reject: @escaping RCTPromiseRejectBlock
474
- ) {
475
- bridge.uiManager.addUIBlock { [weak self] _, _ in
63
+ return player?.currentTime
64
+ }.runOnQueue(.main)
65
+ AsyncFunction("isPlaying") { [weak self] (nativeId: NativeId) -> Bool? in
66
+ self?.players[nativeId]?.isPlaying
67
+ }.runOnQueue(.main)
68
+ AsyncFunction("isPaused") { [weak self] (nativeId: NativeId) -> Bool? in
69
+ self?.players[nativeId]?.isPaused
70
+ }.runOnQueue(.main)
71
+ AsyncFunction("duration") { [weak self] (nativeId: NativeId) -> Double? in
72
+ self?.players[nativeId]?.duration
73
+ }.runOnQueue(.main)
74
+ AsyncFunction("isMuted") { [weak self] (nativeId: NativeId) -> Bool? in
75
+ self?.players[nativeId]?.isMuted
76
+ }.runOnQueue(.main)
77
+ AsyncFunction("getTimeShift") { [weak self] (nativeId: NativeId) -> Double? in
78
+ self?.players[nativeId]?.timeShift
79
+ }.runOnQueue(.main)
80
+ AsyncFunction("isLive") { [weak self] (nativeId: NativeId) -> Bool? in
81
+ self?.players[nativeId]?.isLive
82
+ }.runOnQueue(.main)
83
+ AsyncFunction("getMaxTimeShift") { [weak self] (nativeId: NativeId) -> Double? in
84
+ self?.players[nativeId]?.maxTimeShift
85
+ }.runOnQueue(.main)
86
+ AsyncFunction("getPlaybackSpeed") { [weak self] (nativeId: NativeId) -> Float? in
87
+ self?.players[nativeId]?.playbackSpeed
88
+ }.runOnQueue(.main)
89
+ AsyncFunction("isAd") { [weak self] (nativeId: NativeId) -> Bool? in
90
+ self?.players[nativeId]?.isAd
91
+ }.runOnQueue(.main)
92
+ AsyncFunction("canPlayAtPlaybackSpeed") { [weak self] (nativeId: NativeId, playbackSpeed: Float) -> Bool? in
93
+ self?.players[nativeId]?.canPlay(atPlaybackSpeed: playbackSpeed)
94
+ }.runOnQueue(.main)
95
+ AsyncFunction("getAudioTrack") { [weak self] (nativeId: NativeId) -> [String: Any]? in
96
+ RCTConvert.audioTrackJson(self?.players[nativeId]?.audio)
97
+ }.runOnQueue(.main)
98
+ AsyncFunction("getAvailableAudioTracks") { [weak self] (nativeId: NativeId) -> [[String: Any]] in
99
+ self?.players[nativeId]?.availableAudio.compactMap { RCTConvert.audioTrackJson($0) } ?? []
100
+ }.runOnQueue(.main)
101
+ AsyncFunction("setAudioTrack") { [weak self] (nativeId: NativeId, trackIdentifier: String) in
476
102
  self?.players[nativeId]?.setAudio(trackIdentifier: trackIdentifier)
477
- resolve(nil)
478
- }
479
- }
480
-
481
- /**
482
- Resolve `nativeId`'s currently selected subtitle track.
483
- - Parameter nativeId: Target player Id.
484
- - Parameter resolver: JS promise resolver.
485
- - Parameter rejecter: JS promise rejecter.
486
- */
487
- @objc(getSubtitleTrack:resolver:rejecter:)
488
- func getSubtitleTrack(
489
- _ nativeId: NativeId,
490
- resolver resolve: @escaping RCTPromiseResolveBlock,
491
- rejecter reject: @escaping RCTPromiseRejectBlock
492
- ) {
493
- bridge.uiManager.addUIBlock { [weak self] _, _ in
494
- resolve(RCTConvert.subtitleTrackJson(self?.players[nativeId]?.subtitle))
495
- }
496
- }
497
-
498
- /**
499
- Resolve `nativeId`'s player available subtitle tracks.
500
- - Parameter nativeId: Target player Id.
501
- - Parameter resolver: JS promise resolver.
502
- - Parameter rejecter: JS promise rejecter.
503
- */
504
- @objc(getAvailableSubtitles:resolver:rejecter:)
505
- func getAvailableSubtitles(
506
- _ nativeId: NativeId,
507
- resolver resolve: @escaping RCTPromiseResolveBlock,
508
- rejecter reject: @escaping RCTPromiseRejectBlock
509
- ) {
510
- bridge.uiManager.addUIBlock { [weak self] _, _ in
511
- let subtitlesJson = self?.players[nativeId]?.availableSubtitles.map {
512
- RCTConvert.subtitleTrackJson($0)
513
- }
514
- resolve(subtitlesJson ?? [])
515
- }
516
- }
517
-
518
- /**
519
- Set `nativeId`'s player subtitle track.
520
- - Parameter nativeId: Target player Id.
521
- - Parameter trackIdentifier: The subtitle track identifier.
522
- - Parameter resolver: JS promise resolver.
523
- - Parameter rejecter: JS promise rejecter.
524
- */
525
- @objc(setSubtitleTrack:trackIdentifier:resolver:rejecter:)
526
- func setSubtitleTrack(
527
- _ nativeId: NativeId,
528
- trackIdentifier: String?,
529
- resolver resolve: @escaping RCTPromiseResolveBlock,
530
- rejecter reject: @escaping RCTPromiseRejectBlock
531
- ) {
532
- bridge.uiManager.addUIBlock { [weak self] _, _ in
103
+ }.runOnQueue(.main)
104
+ AsyncFunction("getSubtitleTrack") { [weak self] (nativeId: NativeId) -> [String: Any]? in
105
+ RCTConvert.subtitleTrackJson(self?.players[nativeId]?.subtitle)
106
+ }.runOnQueue(.main)
107
+ AsyncFunction("getAvailableSubtitles") { [weak self] (nativeId: NativeId) -> [[String: Any]] in
108
+ self?.players[nativeId]?.availableSubtitles.compactMap { RCTConvert.subtitleTrackJson($0) } ?? []
109
+ }.runOnQueue(.main)
110
+ AsyncFunction("setSubtitleTrack") { [weak self] (nativeId: NativeId, trackIdentifier: String?) in
533
111
  self?.players[nativeId]?.setSubtitle(trackIdentifier: trackIdentifier)
534
- resolve(nil)
535
- }
536
- }
537
-
538
- /**
539
- Schedules an `AdItem` in the `nativeId`'s associated player.
540
- - Parameter nativeId: Target player id.
541
- - Parameter adItemJson: Json representation of the `AdItem` to be scheduled.
542
- */
543
- @objc(scheduleAd:adItemJson:)
544
- func scheduleAd(_ nativeId: NativeId, adItemJson: Any?) {
545
- guard let adItem = RCTConvert.adItem(adItemJson) else {
546
- return
547
- }
548
- bridge.uiManager.addUIBlock { [weak self] _, _ in
112
+ }.runOnQueue(.main)
113
+
114
+ AsyncFunction("getVideoQuality") { [weak self] (nativeId: NativeId) -> [String: Any]? in
115
+ RCTConvert.toJson(videoQuality: self?.players[nativeId]?.videoQuality)
116
+ }.runOnQueue(.main)
117
+ AsyncFunction("getAvailableVideoQualities") { [weak self] (nativeId: NativeId) -> [[String: Any]] in
118
+ self?.players[nativeId]?.availableVideoQualities.compactMap { RCTConvert.toJson(videoQuality: $0) } ?? []
119
+ }.runOnQueue(.main)
120
+ AsyncFunction("getThumbnail") { [weak self] (nativeId: NativeId, time: Double) -> [String: Any]? in
121
+ RCTConvert.toJson(thumbnail: self?.players[nativeId]?.thumbnail(forTime: time))
122
+ }.runOnQueue(.main)
123
+ AsyncFunction("loadOfflineContent") { [weak self] (nativeId: NativeId, bridgeId: String, options: [String: Any]?) in // swiftlint:disable:this line_length
124
+ #if os(iOS)
125
+ guard let player = self?.players[nativeId],
126
+ let offlineModule = self?.appContext?.moduleRegistry.get(OfflineModule.self),
127
+ let offlineContentManagerBridge = offlineModule.retrieve(bridgeId) else { return }
128
+ let optionsDictionary = options ?? [:]
129
+ let restrictedToAssetCache = optionsDictionary["restrictedToAssetCache"] as? Bool ?? true
130
+ let offlineSourceConfig = offlineContentManagerBridge.offlineContentManager.createOfflineSourceConfig(
131
+ restrictedToAssetCache: restrictedToAssetCache
132
+ )
133
+ guard let offlineSourceConfig else { return }
134
+ player.load(sourceConfig: offlineSourceConfig)
135
+ #endif
136
+ }.runOnQueue(.main)
137
+ AsyncFunction("scheduleAd") { [weak self] (nativeId: NativeId, adItemJson: [String: Any]) in
138
+ guard let adItem = RCTConvert.adItem(adItemJson) else { return }
549
139
  self?.players[nativeId]?.scheduleAd(adItem: adItem)
550
- }
551
- }
552
-
553
- /**
554
- Skips the current ad in `nativeId`'s associated player.
555
- Has no effect if the current ad is not skippable or if no ad is being played back.
556
- - Parameter nativeId: Target player id.
557
- */
558
- @objc(skipAd:)
559
- func skipAd(_ nativeId: NativeId) {
560
- bridge.uiManager.addUIBlock { [weak self] _, _ in
561
- self?.players[nativeId]?.skipAd()
562
- }
563
- }
564
-
565
- /**
566
- Returns `true` while an ad is being played back or when main content playback has been paused for ad playback.
567
- - Parameter nativeId: Target player id.
568
- - Parameter resolver: JS promise resolver.
569
- - Parameter rejecter: JS promise rejecter.
570
- */
571
- @objc(isAd:resolver:rejecter:)
572
- func isAd(
573
- _ nativeId: NativeId,
574
- resolver resolve: @escaping RCTPromiseResolveBlock,
575
- rejecter reject: @escaping RCTPromiseRejectBlock
576
- ) {
577
- bridge.uiManager.addUIBlock { [weak self] _, _ in
578
- resolve(self?.players[nativeId]?.isAd)
579
- }
580
- }
581
-
582
- /**
583
- The current time shift of the live stream in seconds. This value is always 0 if the active `source` is not a
584
- live stream or there are no sources loaded.
585
- - Parameter nativeId: Target player id.
586
- - Parameter resolver: JS promise resolver.
587
- - Parameter rejecter: JS promise rejecter.
588
- */
589
- @objc(getTimeShift:resolver:rejecter:)
590
- func getTimeShift(
591
- _ nativeId: NativeId,
592
- resolver resolve: @escaping RCTPromiseResolveBlock,
593
- rejecter reject: @escaping RCTPromiseRejectBlock
594
- ) {
595
- bridge.uiManager.addUIBlock { [weak self] _, _ in
596
- resolve(self?.players[nativeId]?.timeShift)
597
- }
598
- }
599
-
600
- /**
601
- Returns the limit in seconds for time shift. Is either negative or 0. Is applicable for live streams only.
602
- - Parameter nativeId: Target player id.
603
- - Parameter resolver: JS promise resolver.
604
- - Parameter rejecter: JS promise rejecter.
605
- */
606
- @objc(getMaxTimeShift:resolver:rejecter:)
607
- func getMaxTimeShift(
608
- _ nativeId: NativeId,
609
- resolver resolve: @escaping RCTPromiseResolveBlock,
610
- rejecter reject: @escaping RCTPromiseRejectBlock
611
- ) {
612
- bridge.uiManager.addUIBlock { [weak self] _, _ in
613
- resolve(self?.players[nativeId]?.maxTimeShift)
614
- }
615
- }
616
-
617
- /**
618
- Sets the max selectable bitrate for the player.
619
- - Parameter nativeId: Target player id.
620
- - Parameter maxBitrate: The desired max bitrate limit.
621
- */
622
- @objc(setMaxSelectableBitrate:maxSelectableBitrate:)
623
- func setMaxSelectableBitrate(_ nativeId: NativeId, maxSelectableBitrate: NSNumber) {
624
- let maxSelectableBitrateValue = maxSelectableBitrate.intValue
625
- bridge.uiManager.addUIBlock { [weak self] _, _ in
626
- let maxSelectableBitrate = maxSelectableBitrateValue != -1 ? maxSelectableBitrateValue : 0
627
- self?.players[nativeId]?.maxSelectableBitrate = UInt(maxSelectableBitrate)
628
- }
629
- }
630
-
631
- /**
632
- Returns the thumbnail image for the active `Source` at a certain time.
633
- - Parameter nativeId: Target player id.
634
- - Parameter resolver: JS promise resolver.
635
- - Parameter rejecter: JS promise rejecter.
636
- */
637
- @objc(getThumbnail:time:resolver:rejecter:)
638
- func getThumbnail(
639
- _ nativeId: NativeId,
640
- time: NSNumber,
641
- resolver resolve: @escaping RCTPromiseResolveBlock,
642
- rejecter reject: @escaping RCTPromiseRejectBlock
643
- ) {
644
- bridge.uiManager.addUIBlock { [weak self] _, _ in
645
- resolve(RCTConvert.toJson(thumbnail: self?.players[nativeId]?.thumbnail(forTime: time.doubleValue)))
646
- }
647
- }
648
-
649
- /**
650
- Returns `true` if casting to another device (such as a ChromeCast) is available, otherwise false.
651
- - Parameter nativeId: Target player id.
652
- - Parameter resolver: JS promise resolver.
653
- - Parameter rejecter: JS promise rejecter.
654
- */
655
- @objc(isCastAvailable:resolver:rejecter:)
656
- func isCastAvailable(
657
- _ nativeId: NativeId,
658
- resolver resolve: @escaping RCTPromiseResolveBlock,
659
- rejecter reject: @escaping RCTPromiseRejectBlock
660
- ) {
661
- bridge.uiManager.addUIBlock { [weak self] _, _ in
662
- resolve(self?.players[nativeId]?.isCastAvailable)
663
- }
664
- }
665
-
666
- /**
667
- Returns `true` if the video is currently casted to a device and not played locally,
668
- or `false` if the video is played locally.
669
- - Parameter nativeId: Target player id.
670
- - Parameter resolver: JS promise resolver.
671
- - Parameter rejecter: JS promise rejecter.
672
- */
673
- @objc(isCasting:resolver:rejecter:)
674
- func isCasting(
675
- _ nativeId: NativeId,
676
- resolver resolve: @escaping RCTPromiseResolveBlock,
677
- rejecter reject: @escaping RCTPromiseRejectBlock
678
- ) {
679
- bridge.uiManager.addUIBlock { [weak self] _, _ in
680
- resolve(self?.players[nativeId]?.isCasting)
681
- }
682
- }
683
-
684
- /**
685
- Initiates casting the current video to a cast-compatible device.
686
- The user has to choose to which device it should be sent.
687
- */
688
- @objc(castVideo:)
689
- func castVideo(_ nativeId: NativeId) {
690
- bridge.uiManager.addUIBlock { [weak self] _, _ in
140
+ }.runOnQueue(.main)
141
+ AsyncFunction("isAirPlayActive") { [weak self] (nativeId: NativeId) -> Bool? in
142
+ #if os(iOS)
143
+ return self?.players[nativeId]?.isAirPlayActive
144
+ #else
145
+ return nil
146
+ #endif
147
+ }.runOnQueue(.main)
148
+ AsyncFunction("isAirPlayAvailable") { [weak self] (nativeId: NativeId) -> Bool? in
149
+ #if os(iOS)
150
+ return self?.players[nativeId]?.allowsAirPlay
151
+ #else
152
+ return nil
153
+ #endif
154
+ }.runOnQueue(.main)
155
+ AsyncFunction("isCastAvailable") { [weak self] (nativeId: NativeId) -> Bool? in
156
+ self?.players[nativeId]?.isCastAvailable
157
+ }.runOnQueue(.main)
158
+ AsyncFunction("isCasting") { [weak self] (nativeId: NativeId) -> Bool? in
159
+ self?.players[nativeId]?.isCasting
160
+ }.runOnQueue(.main)
161
+ AsyncFunction("castVideo") { [weak self] (nativeId: NativeId) in
691
162
  self?.players[nativeId]?.castVideo()
692
- }
163
+ }.runOnQueue(.main)
164
+ AsyncFunction("castStop") { [weak self] (nativeId: NativeId) in
165
+ self?.players[nativeId]?.castStop()
166
+ }.runOnQueue(.main)
167
+ AsyncFunction("skipAd") { [weak self] (nativeId: NativeId) in
168
+ self?.players[nativeId]?.skipAd()
169
+ }.runOnQueue(.main)
170
+ AsyncFunction(
171
+ "initializeWithConfig"
172
+ ) { [weak self] (nativeId: NativeId, config: [String: Any]?, networkNativeId: NativeId?, _: String?) in // swiftlint:disable:this line_length
173
+ guard self?.players[nativeId] == nil, let playerConfig = RCTConvert.playerConfig(config) else { return }
174
+ #if os(iOS)
175
+ self?.setupRemoteControlConfig(playerConfig.remoteControlConfig)
176
+ #endif
177
+ if let networkNativeId, let networkConfig = self?.setupNetworkConfig(nativeId: networkNativeId) {
178
+ playerConfig.networkConfig = networkConfig
179
+ }
180
+ self?.players[nativeId] = PlayerFactory.create(playerConfig: playerConfig)
181
+ }.runOnQueue(.main)
182
+ AsyncFunction(
183
+ "initializeWithAnalyticsConfig"
184
+ ) { [weak self] (nativeId: NativeId, analyticsConfig: [String: Any]?, config: [String: Any]?, networkNativeId: NativeId?, _: String?) in // swiftlint:disable:this line_length
185
+ guard self?.players[nativeId] == nil,
186
+ let playerConfig = RCTConvert.playerConfig(config),
187
+ let analyticsConfig = RCTConvert.analyticsConfig(analyticsConfig) else { return } // swiftlint:disable:this line_length
188
+ #if os(iOS)
189
+ self?.setupRemoteControlConfig(playerConfig.remoteControlConfig)
190
+ #endif
191
+ if let networkNativeId, let networkConfig = self?.setupNetworkConfig(nativeId: networkNativeId) {
192
+ playerConfig.networkConfig = networkConfig
193
+ }
194
+ let defaultMetadata = RCTConvert.analyticsDefaultMetadataFromAnalyticsConfig(analyticsConfig)
195
+ self?.players[nativeId] = PlayerFactory.create(
196
+ playerConfig: playerConfig,
197
+ analyticsConfig: analyticsConfig,
198
+ defaultMetadata: defaultMetadata ?? DefaultMetadata()
199
+ )
200
+ }.runOnQueue(.main)
201
+ AsyncFunction("loadSource") { [weak self] (nativeId: NativeId, sourceNativeId: NativeId) in
202
+ guard let player = self?.players[nativeId],
203
+ let sourceModule = self?.appContext?.moduleRegistry.get(SourceModule.self), // swiftlint:disable:this line_length
204
+ let source = sourceModule.retrieve(sourceNativeId) else { return }
205
+ player.load(source: source)
206
+ }.runOnQueue(.main)
693
207
  }
694
208
 
695
- /**
696
- Stops casting the current video if it is casting at the moment (i.e. `isCasting` returns `true`).
697
- Has no effect if `isCasting` returns `false`.
698
- */
699
- @objc(castStop:)
700
- func castStop(_ nativeId: NativeId) {
701
- bridge.uiManager.addUIBlock { [weak self] _, _ in
702
- self?.players[nativeId]?.castStop()
703
- }
209
+ /// This needs to stay stable to maintain compatibility for cross-module access..
210
+ @objc
211
+ public func retrieve(_ nativeId: NativeId) -> Player? {
212
+ players[nativeId]
704
213
  }
705
214
 
706
215
  private func setupRemoteControlConfig(_ remoteControlConfig: RemoteControlConfig) {
707
216
  remoteControlConfig.prepareSource = { [weak self] _, sourceConfig in
708
- guard let sourceModule = self?.bridge[SourceModule.self],
217
+ guard let sourceModule = self?.appContext?.moduleRegistry.get(SourceModule.self), // swiftlint:disable:this line_length
709
218
  let sourceNativeId = sourceModule.nativeId(where: { $0.sourceConfig === sourceConfig }),
710
219
  let castSourceConfig = sourceModule.retrieveCastSourceConfig(sourceNativeId) else {
711
220
  return nil
@@ -716,96 +225,9 @@ public class PlayerModule: NSObject, RCTBridgeModule { // swiftlint:disable:this
716
225
  }
717
226
 
718
227
  private func setupNetworkConfig(nativeId: NativeId) -> NetworkConfig? {
719
- guard let networkModule = bridge[NetworkModule.self],
720
- let networkConfig = networkModule.retrieve(nativeId) else {
228
+ guard let networkModule = self.appContext?.moduleRegistry.get(NetworkModule.self) else {
721
229
  return nil
722
230
  }
723
- return networkConfig
724
- }
725
-
726
- /**
727
- Resolve `nativeId`'s current video quality.
728
- - Parameter nativeId: Target player Id.
729
- - Parameter resolver: JS promise resolver.
730
- - Parameter rejecter: JS promise rejecter.
731
- */
732
- @objc(getVideoQuality:resolver:rejecter:)
733
- func getVideoQuality(
734
- _ nativeId: NativeId,
735
- resolver resolve: @escaping RCTPromiseResolveBlock,
736
- rejecter reject: @escaping RCTPromiseRejectBlock
737
- ) {
738
- bridge.uiManager.addUIBlock { [weak self] _, _ in
739
- resolve(RCTConvert.toJson(videoQuality: self?.players[nativeId]?.videoQuality))
740
- }
741
- }
742
-
743
- /**
744
- Resolve `nativeId`'s current available video qualities.
745
- - Parameter nativeId: Target player Id.
746
- - Parameter resolver: JS promise resolver.
747
- - Parameter rejecter: JS promise rejecter.
748
- */
749
- @objc(getAvailableVideoQualities:resolver:rejecter:)
750
- func getAvailableVideoQualities(
751
- _ nativeId: NativeId,
752
- resolver resolve: @escaping RCTPromiseResolveBlock,
753
- rejecter reject: @escaping RCTPromiseRejectBlock
754
- ) {
755
- bridge.uiManager.addUIBlock { [weak self] _, _ in
756
- let videoQualitiesJson = self?.players[nativeId]?.availableVideoQualities.map {
757
- RCTConvert.toJson(videoQuality: $0)
758
- }
759
- resolve(videoQualitiesJson ?? [])
760
- }
761
- }
762
-
763
- /**
764
- Resolve `nativeId`'s current playback speed.
765
- - Parameter nativeId: Target player Id.
766
- - Parameter resolver: JS promise resolver.
767
- - Parameter rejecter: JS promise rejecter.
768
- */
769
- @objc(getPlaybackSpeed:resolver:rejecter:)
770
- func getPlaybackSpeed(
771
- _ nativeId: NativeId,
772
- resolver resolve: @escaping RCTPromiseResolveBlock,
773
- rejecter reject: @escaping RCTPromiseRejectBlock
774
- ) {
775
- bridge.uiManager.addUIBlock { [weak self] _, _ in
776
- resolve(self?.players[nativeId]?.playbackSpeed)
777
- }
778
- }
779
-
780
- /**
781
- Sets playback speed for the player.
782
- - Parameter nativeId: Target player Id.
783
- - Parameter playbackSpeed: Float representing the playback speed level.
784
- */
785
- @objc(setPlaybackSpeed:playbackSpeed:)
786
- func setPlaybackSpeed(_ nativeId: NativeId, playbackSpeed: NSNumber) {
787
- bridge.uiManager.addUIBlock { [weak self] _, _ in
788
- self?.players[nativeId]?.playbackSpeed = playbackSpeed.floatValue
789
- }
790
- }
791
-
792
- /**
793
- Resolve `nativeId`'s possibility to play the media at specified playback speed.
794
- - Parameters:
795
- - nativeId: Target player Id.
796
- - playbackSpeed: The playback speed to check.
797
- - resolver: JS promise resolver.
798
- - rejecter: JS promise rejecter.
799
- */
800
- @objc(canPlayAtPlaybackSpeed:atPlaybackSpeed:resolver:rejecter:)
801
- func canPlayAtPlaybackSpeed(
802
- _ nativeId: NativeId,
803
- atPlaybackSpeed playbackSpeed: NSNumber,
804
- resolver resolve: @escaping RCTPromiseResolveBlock,
805
- rejecter reject: @escaping RCTPromiseRejectBlock
806
- ) {
807
- bridge.uiManager.addUIBlock { [weak self] _, _ in
808
- resolve(self?.players[nativeId]?.canPlay(atPlaybackSpeed: playbackSpeed.floatValue))
809
- }
231
+ return networkModule.retrieve(nativeId)
810
232
  }
811
233
  }