react-native-theoplayer 1.0.0 → 1.1.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 (287) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +54 -18
  4. package/android/build.gradle +90 -0
  5. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  6. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  7. package/android/gradlew +185 -0
  8. package/android/gradlew.bat +89 -0
  9. package/android/src/main/AndroidManifest.xml +6 -0
  10. package/android/src/main/java/com/theoplayer/PlayerConfigHelper.java +30 -0
  11. package/android/src/main/java/com/theoplayer/ReactTHEOplayerPackage.java +27 -0
  12. package/android/src/main/java/com/theoplayer/ReactTHEOplayerView.java +420 -0
  13. package/android/src/main/java/com/theoplayer/ReactTHEOplayerViewManager.java +114 -0
  14. package/android/src/main/java/com/theoplayer/SourceHelper.java +224 -0
  15. package/android/src/main/java/com/theoplayer/TimeUpdateRate.java +8 -0
  16. package/android/src/main/java/com/theoplayer/VideoEventEmitter.java +410 -0
  17. package/android/src/main/java/com/theoplayer/track/TextTrackCueEventType.java +11 -0
  18. package/android/src/main/java/com/theoplayer/track/TrackEventType.java +11 -0
  19. package/android/src/main/java/com/theoplayer/track/TrackListInfo.java +204 -0
  20. package/ios/THEOplayerRCTBridge.m +46 -0
  21. package/ios/THEOplayerRCTDebug.swift +16 -0
  22. package/ios/THEOplayerRCTMetadataAggregator.swift +169 -0
  23. package/ios/THEOplayerRCTView.swift +422 -0
  24. package/ios/THEOplayerRCTViewEventHandler.swift +493 -0
  25. package/ios/THEOplayerRCTViewManager.swift +23 -0
  26. package/ios/Theoplayer-Bridging-Header.h +5 -0
  27. package/ios/Theoplayer.xcodeproj/project.pbxproj +296 -0
  28. package/lib/commonjs/api/THEOplayerView.js +6 -0
  29. package/lib/commonjs/api/THEOplayerView.js.map +1 -0
  30. package/lib/commonjs/api/barrel.js +97 -0
  31. package/lib/commonjs/api/barrel.js.map +1 -0
  32. package/lib/commonjs/api/config/PlayerConfiguration.js +2 -0
  33. package/lib/commonjs/api/config/PlayerConfiguration.js.map +1 -0
  34. package/lib/commonjs/api/config/barrel.js +19 -0
  35. package/lib/commonjs/api/config/barrel.js.map +1 -0
  36. package/lib/commonjs/api/error/PlayerError.js +2 -0
  37. package/lib/commonjs/api/error/PlayerError.js.map +1 -0
  38. package/lib/commonjs/api/error/barrel.js +19 -0
  39. package/lib/commonjs/api/error/barrel.js.map +1 -0
  40. package/lib/commonjs/api/event/PlayerEvent.js +6 -0
  41. package/lib/commonjs/api/event/PlayerEvent.js.map +1 -0
  42. package/lib/commonjs/api/event/TrackEvent.js +22 -0
  43. package/lib/commonjs/api/event/TrackEvent.js.map +1 -0
  44. package/lib/commonjs/api/event/barrel.js +32 -0
  45. package/lib/commonjs/api/event/barrel.js.map +1 -0
  46. package/lib/commonjs/api/source/SourceDescription.js +6 -0
  47. package/lib/commonjs/api/source/SourceDescription.js.map +1 -0
  48. package/lib/commonjs/api/source/ads/Ads.js +2 -0
  49. package/lib/commonjs/api/source/ads/Ads.js.map +1 -0
  50. package/lib/commonjs/api/source/barrel.js +58 -0
  51. package/lib/commonjs/api/source/barrel.js.map +1 -0
  52. package/lib/commonjs/api/source/dash/DashPlaybackConfiguration.js +2 -0
  53. package/lib/commonjs/api/source/dash/DashPlaybackConfiguration.js.map +1 -0
  54. package/lib/commonjs/api/source/dash/barrel.js +19 -0
  55. package/lib/commonjs/api/source/dash/barrel.js.map +1 -0
  56. package/lib/commonjs/api/source/drm/DRMConfiguration.js +2 -0
  57. package/lib/commonjs/api/source/drm/DRMConfiguration.js.map +1 -0
  58. package/lib/commonjs/api/source/drm/barrel.js +19 -0
  59. package/lib/commonjs/api/source/drm/barrel.js.map +1 -0
  60. package/lib/commonjs/api/source/hls/HlsPlaybackConfiguration.js +2 -0
  61. package/lib/commonjs/api/source/hls/HlsPlaybackConfiguration.js.map +1 -0
  62. package/lib/commonjs/api/source/hls/barrel.js +19 -0
  63. package/lib/commonjs/api/source/hls/barrel.js.map +1 -0
  64. package/lib/commonjs/api/timeranges/TimeRange.js +2 -0
  65. package/lib/commonjs/api/timeranges/TimeRange.js.map +1 -0
  66. package/lib/commonjs/api/timeranges/barrel.js +19 -0
  67. package/lib/commonjs/api/timeranges/barrel.js.map +1 -0
  68. package/lib/commonjs/api/track/MediaTrack.js +6 -0
  69. package/lib/commonjs/api/track/MediaTrack.js.map +1 -0
  70. package/lib/commonjs/api/track/Quality.js +2 -0
  71. package/lib/commonjs/api/track/Quality.js.map +1 -0
  72. package/lib/commonjs/api/track/TextTrack.js +72 -0
  73. package/lib/commonjs/api/track/TextTrack.js.map +1 -0
  74. package/lib/commonjs/api/track/TextTrackCue.js +2 -0
  75. package/lib/commonjs/api/track/TextTrackCue.js.map +1 -0
  76. package/lib/commonjs/api/track/Track.js +2 -0
  77. package/lib/commonjs/api/track/Track.js.map +1 -0
  78. package/lib/commonjs/api/track/barrel.js +71 -0
  79. package/lib/commonjs/api/track/barrel.js.map +1 -0
  80. package/lib/commonjs/index.js +31 -0
  81. package/lib/commonjs/index.js.map +1 -0
  82. package/lib/commonjs/internal/THEOplayerView.js +274 -0
  83. package/lib/commonjs/internal/THEOplayerView.js.map +1 -0
  84. package/lib/commonjs/internal/THEOplayerView.style.js +22 -0
  85. package/lib/commonjs/internal/THEOplayerView.style.js.map +1 -0
  86. package/lib/commonjs/internal/THEOplayerView.web.js +512 -0
  87. package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -0
  88. package/lib/commonjs/internal/web/TrackUtils.js +68 -0
  89. package/lib/commonjs/internal/web/TrackUtils.js.map +1 -0
  90. package/lib/module/api/THEOplayerView.js +2 -0
  91. package/lib/module/api/THEOplayerView.js.map +1 -0
  92. package/lib/module/api/barrel.js +8 -0
  93. package/lib/module/api/barrel.js.map +1 -0
  94. package/lib/module/api/config/PlayerConfiguration.js +2 -0
  95. package/lib/module/api/config/PlayerConfiguration.js.map +1 -0
  96. package/lib/module/api/config/barrel.js +2 -0
  97. package/lib/module/api/config/barrel.js.map +1 -0
  98. package/lib/module/api/error/PlayerError.js +2 -0
  99. package/lib/module/api/error/PlayerError.js.map +1 -0
  100. package/lib/module/api/error/barrel.js +2 -0
  101. package/lib/module/api/error/barrel.js.map +1 -0
  102. package/lib/module/api/event/PlayerEvent.js +2 -0
  103. package/lib/module/api/event/PlayerEvent.js.map +1 -0
  104. package/lib/module/api/event/TrackEvent.js +14 -0
  105. package/lib/module/api/event/TrackEvent.js.map +1 -0
  106. package/lib/module/api/event/barrel.js +3 -0
  107. package/lib/module/api/event/barrel.js.map +1 -0
  108. package/lib/module/api/source/SourceDescription.js +2 -0
  109. package/lib/module/api/source/SourceDescription.js.map +1 -0
  110. package/lib/module/api/source/ads/Ads.js +2 -0
  111. package/lib/module/api/source/ads/Ads.js.map +1 -0
  112. package/lib/module/api/source/barrel.js +5 -0
  113. package/lib/module/api/source/barrel.js.map +1 -0
  114. package/lib/module/api/source/dash/DashPlaybackConfiguration.js +2 -0
  115. package/lib/module/api/source/dash/DashPlaybackConfiguration.js.map +1 -0
  116. package/lib/module/api/source/dash/barrel.js +2 -0
  117. package/lib/module/api/source/dash/barrel.js.map +1 -0
  118. package/lib/module/api/source/drm/DRMConfiguration.js +2 -0
  119. package/lib/module/api/source/drm/DRMConfiguration.js.map +1 -0
  120. package/lib/module/api/source/drm/barrel.js +2 -0
  121. package/lib/module/api/source/drm/barrel.js.map +1 -0
  122. package/lib/module/api/source/hls/HlsPlaybackConfiguration.js +2 -0
  123. package/lib/module/api/source/hls/HlsPlaybackConfiguration.js.map +1 -0
  124. package/lib/module/api/source/hls/barrel.js +2 -0
  125. package/lib/module/api/source/hls/barrel.js.map +1 -0
  126. package/lib/module/api/timeranges/TimeRange.js +2 -0
  127. package/lib/module/api/timeranges/TimeRange.js.map +1 -0
  128. package/lib/module/api/timeranges/barrel.js +2 -0
  129. package/lib/module/api/timeranges/barrel.js.map +1 -0
  130. package/lib/module/api/track/MediaTrack.js +2 -0
  131. package/lib/module/api/track/MediaTrack.js.map +1 -0
  132. package/lib/module/api/track/Quality.js +2 -0
  133. package/lib/module/api/track/Quality.js.map +1 -0
  134. package/lib/module/api/track/TextTrack.js +47 -0
  135. package/lib/module/api/track/TextTrack.js.map +1 -0
  136. package/lib/module/api/track/TextTrackCue.js +2 -0
  137. package/lib/module/api/track/TextTrackCue.js.map +1 -0
  138. package/lib/module/api/track/Track.js +2 -0
  139. package/lib/module/api/track/Track.js.map +1 -0
  140. package/lib/module/api/track/barrel.js +6 -0
  141. package/lib/module/api/track/barrel.js.map +1 -0
  142. package/lib/module/index.js +3 -0
  143. package/lib/module/index.js.map +1 -0
  144. package/lib/module/internal/THEOplayerView.js +256 -0
  145. package/lib/module/internal/THEOplayerView.js.map +1 -0
  146. package/lib/module/internal/THEOplayerView.style.js +12 -0
  147. package/lib/module/internal/THEOplayerView.style.js.map +1 -0
  148. package/lib/module/internal/THEOplayerView.web.js +495 -0
  149. package/lib/module/internal/THEOplayerView.web.js.map +1 -0
  150. package/lib/module/internal/web/TrackUtils.js +57 -0
  151. package/lib/module/internal/web/TrackUtils.js.map +1 -0
  152. package/lib/typescript/babel.config.d.ts +1 -0
  153. package/lib/typescript/lib/commonjs/api/THEOplayerView.d.ts +1 -0
  154. package/lib/typescript/lib/commonjs/api/barrel.d.ts +1 -0
  155. package/lib/typescript/lib/commonjs/api/config/PlayerConfiguration.d.ts +0 -0
  156. package/lib/typescript/lib/commonjs/api/config/barrel.d.ts +1 -0
  157. package/lib/typescript/lib/commonjs/api/error/PlayerError.d.ts +0 -0
  158. package/lib/typescript/lib/commonjs/api/error/barrel.d.ts +1 -0
  159. package/lib/typescript/lib/commonjs/api/event/PlayerEvent.d.ts +1 -0
  160. package/lib/typescript/lib/commonjs/api/event/TrackEvent.d.ts +5 -0
  161. package/lib/typescript/lib/commonjs/api/event/barrel.d.ts +1 -0
  162. package/lib/typescript/lib/commonjs/api/source/SourceDescription.d.ts +1 -0
  163. package/lib/typescript/lib/commonjs/api/source/ads/Ads.d.ts +0 -0
  164. package/lib/typescript/lib/commonjs/api/source/barrel.d.ts +1 -0
  165. package/lib/typescript/lib/commonjs/api/source/dash/DashPlaybackConfiguration.d.ts +0 -0
  166. package/lib/typescript/lib/commonjs/api/source/dash/barrel.d.ts +1 -0
  167. package/lib/typescript/lib/commonjs/api/source/drm/DRMConfiguration.d.ts +0 -0
  168. package/lib/typescript/lib/commonjs/api/source/drm/barrel.d.ts +1 -0
  169. package/lib/typescript/lib/commonjs/api/source/hls/HlsPlaybackConfiguration.d.ts +0 -0
  170. package/lib/typescript/lib/commonjs/api/source/hls/barrel.d.ts +1 -0
  171. package/lib/typescript/lib/commonjs/api/timeranges/TimeRange.d.ts +0 -0
  172. package/lib/typescript/lib/commonjs/api/timeranges/barrel.d.ts +1 -0
  173. package/lib/typescript/lib/commonjs/api/track/MediaTrack.d.ts +1 -0
  174. package/lib/typescript/lib/commonjs/api/track/Quality.d.ts +0 -0
  175. package/lib/typescript/lib/commonjs/api/track/TextTrack.d.ts +21 -0
  176. package/lib/typescript/lib/commonjs/api/track/TextTrackCue.d.ts +0 -0
  177. package/lib/typescript/lib/commonjs/api/track/Track.d.ts +0 -0
  178. package/lib/typescript/lib/commonjs/api/track/barrel.d.ts +1 -0
  179. package/lib/typescript/lib/commonjs/index.d.ts +3 -0
  180. package/lib/typescript/lib/commonjs/internal/THEOplayerView.d.ts +14 -0
  181. package/lib/typescript/lib/commonjs/internal/THEOplayerView.style.d.ts +12 -0
  182. package/lib/typescript/lib/commonjs/internal/THEOplayerView.web.d.ts +17 -0
  183. package/lib/typescript/lib/commonjs/internal/web/TrackUtils.d.ts +30 -0
  184. package/lib/typescript/lib/module/api/THEOplayerView.d.ts +1 -0
  185. package/lib/typescript/lib/module/api/barrel.d.ts +7 -0
  186. package/lib/typescript/lib/module/api/config/PlayerConfiguration.d.ts +0 -0
  187. package/lib/typescript/lib/module/api/config/barrel.d.ts +1 -0
  188. package/lib/typescript/lib/module/api/error/PlayerError.d.ts +0 -0
  189. package/lib/typescript/lib/module/api/error/barrel.d.ts +1 -0
  190. package/lib/typescript/lib/module/api/event/PlayerEvent.d.ts +1 -0
  191. package/lib/typescript/lib/module/api/event/TrackEvent.d.ts +2 -0
  192. package/lib/typescript/lib/module/api/event/barrel.d.ts +2 -0
  193. package/lib/typescript/lib/module/api/source/SourceDescription.d.ts +1 -0
  194. package/lib/typescript/lib/module/api/source/ads/Ads.d.ts +0 -0
  195. package/lib/typescript/lib/module/api/source/barrel.d.ts +4 -0
  196. package/lib/typescript/lib/module/api/source/dash/DashPlaybackConfiguration.d.ts +0 -0
  197. package/lib/typescript/lib/module/api/source/dash/barrel.d.ts +1 -0
  198. package/lib/typescript/lib/module/api/source/drm/DRMConfiguration.d.ts +0 -0
  199. package/lib/typescript/lib/module/api/source/drm/barrel.d.ts +1 -0
  200. package/lib/typescript/lib/module/api/source/hls/HlsPlaybackConfiguration.d.ts +0 -0
  201. package/lib/typescript/lib/module/api/source/hls/barrel.d.ts +1 -0
  202. package/lib/typescript/lib/module/api/timeranges/TimeRange.d.ts +0 -0
  203. package/lib/typescript/lib/module/api/timeranges/barrel.d.ts +1 -0
  204. package/lib/typescript/lib/module/api/track/MediaTrack.d.ts +1 -0
  205. package/lib/typescript/lib/module/api/track/Quality.d.ts +0 -0
  206. package/lib/typescript/lib/module/api/track/TextTrack.d.ts +20 -0
  207. package/lib/typescript/lib/module/api/track/TextTrackCue.d.ts +0 -0
  208. package/lib/typescript/lib/module/api/track/Track.d.ts +0 -0
  209. package/lib/typescript/lib/module/api/track/barrel.d.ts +2 -0
  210. package/lib/typescript/lib/module/index.d.ts +2 -0
  211. package/lib/typescript/lib/module/internal/THEOplayerView.d.ts +9 -0
  212. package/lib/typescript/lib/module/internal/THEOplayerView.style.d.ts +11 -0
  213. package/lib/typescript/lib/module/internal/THEOplayerView.web.d.ts +10 -0
  214. package/lib/typescript/lib/module/internal/web/TrackUtils.d.ts +29 -0
  215. package/lib/typescript/src/api/THEOplayerView.d.ts +178 -0
  216. package/lib/typescript/src/api/barrel.d.ts +7 -0
  217. package/lib/typescript/src/api/config/PlayerConfiguration.d.ts +14 -0
  218. package/lib/typescript/src/api/config/barrel.d.ts +1 -0
  219. package/lib/typescript/src/api/error/PlayerError.d.ts +4 -0
  220. package/lib/typescript/src/api/error/barrel.d.ts +1 -0
  221. package/lib/typescript/src/api/event/PlayerEvent.d.ts +56 -0
  222. package/lib/typescript/src/api/event/TrackEvent.d.ts +46 -0
  223. package/lib/typescript/src/api/event/barrel.d.ts +2 -0
  224. package/lib/typescript/src/api/source/SourceDescription.d.ts +268 -0
  225. package/lib/typescript/src/api/source/ads/Ads.d.ts +94 -0
  226. package/lib/typescript/src/api/source/barrel.d.ts +4 -0
  227. package/lib/typescript/src/api/source/dash/DashPlaybackConfiguration.d.ts +44 -0
  228. package/lib/typescript/src/api/source/dash/barrel.d.ts +1 -0
  229. package/lib/typescript/src/api/source/drm/DRMConfiguration.d.ts +262 -0
  230. package/lib/typescript/src/api/source/drm/barrel.d.ts +1 -0
  231. package/lib/typescript/src/api/source/hls/HlsPlaybackConfiguration.d.ts +37 -0
  232. package/lib/typescript/src/api/source/hls/barrel.d.ts +1 -0
  233. package/lib/typescript/src/api/timeranges/TimeRange.d.ts +4 -0
  234. package/lib/typescript/src/api/timeranges/barrel.d.ts +1 -0
  235. package/lib/typescript/src/api/track/MediaTrack.d.ts +55 -0
  236. package/lib/typescript/src/api/track/Quality.d.ts +79 -0
  237. package/lib/typescript/src/api/track/TextTrack.d.ts +86 -0
  238. package/lib/typescript/src/api/track/TextTrackCue.d.ts +38 -0
  239. package/lib/typescript/src/api/track/Track.d.ts +43 -0
  240. package/lib/typescript/src/api/track/barrel.d.ts +5 -0
  241. package/lib/typescript/src/index.d.ts +2 -0
  242. package/lib/typescript/src/internal/THEOplayerView.d.ts +71 -0
  243. package/lib/typescript/src/internal/THEOplayerView.style.d.ts +11 -0
  244. package/lib/typescript/src/internal/THEOplayerView.web.d.ts +22 -0
  245. package/lib/typescript/src/internal/web/TrackUtils.d.ts +5 -0
  246. package/package.json +115 -9
  247. package/react-native-theoplayer.podspec +20 -0
  248. package/src/api/THEOplayerView.ts +221 -0
  249. package/src/api/barrel.ts +7 -0
  250. package/src/api/config/PlayerConfiguration.ts +16 -0
  251. package/src/api/config/barrel.ts +1 -0
  252. package/src/api/error/PlayerError.ts +4 -0
  253. package/src/api/error/barrel.ts +1 -0
  254. package/src/api/event/PlayerEvent.ts +66 -0
  255. package/src/api/event/TrackEvent.ts +55 -0
  256. package/src/api/event/barrel.ts +2 -0
  257. package/src/api/source/SourceDescription.ts +292 -0
  258. package/src/api/source/ads/Ads.ts +101 -0
  259. package/src/api/source/barrel.ts +4 -0
  260. package/src/api/source/dash/DashPlaybackConfiguration.ts +45 -0
  261. package/src/api/source/dash/barrel.ts +1 -0
  262. package/src/api/source/drm/DRMConfiguration.ts +287 -0
  263. package/src/api/source/drm/barrel.ts +1 -0
  264. package/src/api/source/hls/HlsPlaybackConfiguration.ts +38 -0
  265. package/src/api/source/hls/barrel.ts +1 -0
  266. package/src/api/timeranges/TimeRange.ts +5 -0
  267. package/src/api/timeranges/barrel.ts +1 -0
  268. package/src/api/track/MediaTrack.ts +65 -0
  269. package/src/api/track/Quality.ts +91 -0
  270. package/src/api/track/TextTrack.ts +133 -0
  271. package/src/api/track/TextTrackCue.ts +42 -0
  272. package/src/api/track/Track.ts +47 -0
  273. package/src/api/track/barrel.ts +5 -0
  274. package/src/index.tsx +2 -0
  275. package/src/internal/THEOplayerView.style.ts +12 -0
  276. package/src/internal/THEOplayerView.tsx +301 -0
  277. package/src/internal/THEOplayerView.web.tsx +399 -0
  278. package/src/internal/web/TrackUtils.ts +44 -0
  279. package/.gitattributes +0 -1
  280. package/index.js +0 -5
  281. package/ios/IOSNativeToast.h +0 -18
  282. package/ios/IOSNativeToast.m +0 -49
  283. package/ios/RNTheoplayer.h +0 -11
  284. package/ios/RNTheoplayer.m +0 -15
  285. package/ios/RNTheoplayer.podspec +0 -23
  286. package/ios/RNTheoplayer.xcodeproj/project.pbxproj +0 -417
  287. package/ios/RNTheoplayer.xcworkspace/contents.xcworkspacedata +0 -9
@@ -0,0 +1,204 @@
1
+ package com.theoplayer.track;
2
+
3
+ import androidx.annotation.NonNull;
4
+
5
+ import com.facebook.react.bridge.Arguments;
6
+ import com.facebook.react.bridge.WritableArray;
7
+ import com.facebook.react.bridge.WritableMap;
8
+ import com.theoplayer.android.api.player.track.mediatrack.MediaTrack;
9
+ import com.theoplayer.android.api.player.track.mediatrack.MediaTrackList;
10
+ import com.theoplayer.android.api.player.track.mediatrack.quality.AudioQuality;
11
+ import com.theoplayer.android.api.player.track.mediatrack.quality.QualityList;
12
+ import com.theoplayer.android.api.player.track.mediatrack.quality.VideoQuality;
13
+ import com.theoplayer.android.api.player.track.texttrack.TextTrack;
14
+ import com.theoplayer.android.api.player.track.texttrack.TextTrackList;
15
+ import com.theoplayer.android.api.player.track.texttrack.cue.TextTrackCue;
16
+ import com.theoplayer.android.api.player.track.texttrack.cue.TextTrackCueList;
17
+
18
+ import org.json.JSONObject;
19
+
20
+ public class TrackListInfo {
21
+
22
+ private static final String PROP_ID = "id";
23
+ private static final String PROP_UID = "uid";
24
+ private static final String PROP_KIND = "kind";
25
+ private static final String PROP_LANGUAGE = "language";
26
+ private static final String PROP_MODE = "mode";
27
+ private static final String PROP_LABEL = "label";
28
+ private static final String PROP_TYPE = "type";
29
+ private static final String PROP_CODECS = "codecs";
30
+ private static final String PROP_NAME = "name";
31
+ private static final String PROP_SRC = "src";
32
+ private static final String PROP_FORCED = "forced";
33
+ private static final String PROP_AUDIO_SAMPLING_RATE = "audioSamplingRate";
34
+ private static final String PROP_BANDWIDTH = "bandwidth";
35
+ private static final String PROP_QUALITIES = "qualities";
36
+ private static final String PROP_ACTIVE_QUALITY = "activeQuality";
37
+ private static final String PROP_TARGET_QUALITY = "targetQuality";
38
+ private static final String PROP_WIDTH = "width";
39
+ private static final String PROP_HEIGHT = "height";
40
+ private static final String PROP_FRAMERATE = "framerate";
41
+ private static final String PROP_STARTTIME = "startTime";
42
+ private static final String PROP_ENDTIME = "endTime";
43
+ private static final String PROP_CUES = "cues";
44
+ private static final String PROP_CUE_CONTENT = "content";
45
+
46
+ public static WritableArray fromTextTrackList(final TextTrackList textTrackList) {
47
+ WritableArray textTracks = Arguments.createArray();
48
+ for (int i = 0; i < textTrackList.length(); i++) {
49
+ textTracks.pushMap(fromTextTrack(textTrackList.getItem(i)));
50
+ }
51
+ return textTracks;
52
+ }
53
+
54
+ public static WritableMap fromTextTrack(final TextTrack textTrack) {
55
+ WritableMap textTrackPayload = Arguments.createMap();
56
+ textTrackPayload.putString(PROP_ID, textTrack.getId());
57
+ textTrackPayload.putInt(PROP_UID, textTrack.getUid());
58
+ textTrackPayload.putString(PROP_KIND, textTrack.getKind());
59
+ textTrackPayload.putString(PROP_LANGUAGE, textTrack.getLanguage());
60
+ textTrackPayload.putString(PROP_MODE, textTrack.getMode().getMode());
61
+ textTrackPayload.putString(PROP_LABEL, textTrack.getLabel());
62
+ textTrackPayload.putString(PROP_TYPE, textTrack.getType().getType());
63
+
64
+ // THEOplayer v3.5+
65
+ textTrackPayload.putString(PROP_SRC, textTrack.getSource());
66
+ textTrackPayload.putBoolean(PROP_FORCED, textTrack.isForced());
67
+
68
+ // Optionally pass cue list.
69
+ final TextTrackCueList cueList = textTrack.getCues();
70
+ if (cueList != null) {
71
+ WritableArray cueListPayload = Arguments.createArray();
72
+ for (TextTrackCue cue : cueList) {
73
+ cueListPayload.pushMap(fromTextTrackCue(cue));
74
+ }
75
+ textTrackPayload.putArray(PROP_CUES, cueListPayload);
76
+ }
77
+ return textTrackPayload;
78
+ }
79
+
80
+ public static WritableMap fromTextTrackCue(final TextTrackCue cue) {
81
+ WritableMap cuePayload = Arguments.createMap();
82
+ cuePayload.putString(PROP_ID, cue.getId());
83
+ cuePayload.putDouble(PROP_UID, cue.getUid());
84
+ cuePayload.putDouble(PROP_STARTTIME, (long) (1e03 * cue.getStartTime()));
85
+ cuePayload.putDouble(PROP_ENDTIME, (long) (1e03 * cue.getEndTime()));
86
+ final JSONObject content = cue.getContent();
87
+ if (content != null) {
88
+ cuePayload.putString(PROP_CUE_CONTENT, content.optString("content"));
89
+ }
90
+ return cuePayload;
91
+ }
92
+
93
+ @NonNull
94
+ public static WritableArray fromAudioTrackList(@NonNull final MediaTrackList<AudioQuality> audioTrackList) {
95
+ WritableArray audioTracks = Arguments.createArray();
96
+ for (int i = 0; i < audioTrackList.length(); i++) {
97
+ final MediaTrack<AudioQuality> audioTrack = audioTrackList.getItem(i);
98
+ WritableMap audioTrackPayload = Arguments.createMap();
99
+ audioTrackPayload.putString(PROP_ID, audioTrack.getId());
100
+ audioTrackPayload.putInt(PROP_UID, audioTrack.getUid());
101
+ audioTrackPayload.putString(PROP_KIND, audioTrack.getKind());
102
+ audioTrackPayload.putString(PROP_LABEL, audioTrack.getLabel());
103
+ audioTrackPayload.putString(PROP_LANGUAGE, audioTrack.getLanguage());
104
+
105
+ final QualityList<AudioQuality> qualityList = audioTrack.getQualities();
106
+ WritableArray qualities = Arguments.createArray();
107
+ if (qualityList != null) {
108
+ for (int j = 0; j < qualityList.length(); j++) {
109
+ final AudioQuality audioQuality = qualityList.getItem(j);
110
+ WritableMap audioQualityPayload = Arguments.createMap();
111
+ audioQualityPayload.putString(PROP_ID, audioQuality.getId());
112
+ audioQualityPayload.putInt(PROP_UID, audioQuality.getUid());
113
+ audioQualityPayload.putString(PROP_CODECS, audioQuality.getCodecs());
114
+ audioQualityPayload.putString(PROP_NAME, audioQuality.getName());
115
+ audioQualityPayload.putDouble(PROP_BANDWIDTH, audioQuality.getBandwidth());
116
+ audioQualityPayload.putDouble(PROP_AUDIO_SAMPLING_RATE, audioQuality.getAudioSamplingRate());
117
+ qualities.pushMap(audioQualityPayload);
118
+ }
119
+ }
120
+ audioTrackPayload.putArray(PROP_QUALITIES, qualities);
121
+
122
+ final QualityList<AudioQuality> targetQualityList = audioTrack.getTargetQualities();
123
+ WritableArray targetQualities = Arguments.createArray();
124
+ if (targetQualityList != null) {
125
+ for (int j = 0; j < targetQualityList.length(); j++) {
126
+ final AudioQuality quality = targetQualityList.getItem(j);
127
+ WritableMap audioQualityPayload = Arguments.createMap();
128
+ audioQualityPayload.putInt(PROP_UID, quality.getUid());
129
+ targetQualities.pushMap(audioQualityPayload);
130
+ }
131
+ }
132
+
133
+ final AudioQuality activeQuality = audioTrack.getActiveQuality();
134
+ if (activeQuality != null) {
135
+ audioTrackPayload.putInt(PROP_ACTIVE_QUALITY, activeQuality.getUid());
136
+ }
137
+
138
+ final AudioQuality targetQuality = audioTrack.getTargetQuality();
139
+ if (targetQuality != null) {
140
+ audioTrackPayload.putInt(PROP_TARGET_QUALITY, targetQuality.getUid());
141
+ }
142
+
143
+ audioTracks.pushMap(audioTrackPayload);
144
+ }
145
+ return audioTracks;
146
+ }
147
+
148
+ @NonNull
149
+ static public WritableArray fromVideoTrackList(@NonNull final MediaTrackList<VideoQuality> videoTrackList) {
150
+ WritableArray videoTracks = Arguments.createArray();
151
+ for (int i = 0; i < videoTrackList.length(); i++) {
152
+ final MediaTrack<VideoQuality> videoTrack = videoTrackList.getItem(i);
153
+ WritableMap videoTrackPayload = Arguments.createMap();
154
+ videoTrackPayload.putString(PROP_ID, videoTrack.getId());
155
+ videoTrackPayload.putInt(PROP_UID, videoTrack.getUid());
156
+ videoTrackPayload.putString(PROP_KIND, videoTrack.getKind());
157
+ videoTrackPayload.putString(PROP_LABEL, videoTrack.getLabel());
158
+ videoTrackPayload.putString(PROP_LANGUAGE, videoTrack.getLanguage());
159
+
160
+ final QualityList<VideoQuality> qualityList = videoTrack.getQualities();
161
+ WritableArray qualities = Arguments.createArray();
162
+ if (qualityList != null) {
163
+ for (int j = 0; j < qualityList.length(); j++) {
164
+ final VideoQuality quality = qualityList.getItem(j);
165
+ WritableMap videoQualityPayload = Arguments.createMap();
166
+ videoQualityPayload.putString(PROP_ID, quality.getId());
167
+ videoQualityPayload.putInt(PROP_UID, quality.getUid());
168
+ videoQualityPayload.putString(PROP_CODECS, quality.getCodecs());
169
+ videoQualityPayload.putString(PROP_NAME, quality.getName());
170
+ videoQualityPayload.putDouble(PROP_BANDWIDTH, quality.getBandwidth());
171
+ videoQualityPayload.putDouble(PROP_WIDTH, quality.getWidth());
172
+ videoQualityPayload.putDouble(PROP_HEIGHT, quality.getHeight());
173
+ videoQualityPayload.putDouble(PROP_FRAMERATE, quality.getFrameRate());
174
+ qualities.pushMap(videoQualityPayload);
175
+ }
176
+ }
177
+ videoTrackPayload.putArray(PROP_QUALITIES, qualities);
178
+
179
+ final QualityList<VideoQuality> targetQualityList = videoTrack.getTargetQualities();
180
+ WritableArray targetQualities = Arguments.createArray();
181
+ if (targetQualityList != null) {
182
+ for (int j = 0; j < targetQualityList.length(); j++) {
183
+ final VideoQuality quality = targetQualityList.getItem(j);
184
+ WritableMap videoQualityPayload = Arguments.createMap();
185
+ videoQualityPayload.putInt(PROP_UID, quality.getUid());
186
+ targetQualities.pushMap(videoQualityPayload);
187
+ }
188
+ }
189
+
190
+ final VideoQuality activeQuality = videoTrack.getActiveQuality();
191
+ if (activeQuality != null) {
192
+ videoTrackPayload.putInt(PROP_ACTIVE_QUALITY, activeQuality.getUid());
193
+ }
194
+
195
+ final VideoQuality targetQuality = videoTrack.getTargetQuality();
196
+ if (targetQuality != null) {
197
+ videoTrackPayload.putInt(PROP_TARGET_QUALITY, targetQuality.getUid());
198
+ }
199
+
200
+ videoTracks.pushMap(videoTrackPayload);
201
+ }
202
+ return videoTracks;
203
+ }
204
+ }
@@ -0,0 +1,46 @@
1
+ //
2
+ // THEOplayerRCTBridge.m
3
+ // Theoplayer
4
+ //
5
+ // Created by William van Haevre on 14/01/2022.
6
+ // Copyright © 2022 Facebook. All rights reserved.
7
+ //
8
+
9
+ #import <React/RCTViewManager.h>
10
+
11
+ @interface RCT_EXTERN_MODULE(THEOplayerRCTViewManager, RCTViewManager)
12
+
13
+ RCT_EXPORT_VIEW_PROPERTY(src, NSDictionary);
14
+ RCT_EXPORT_VIEW_PROPERTY(config, NSDictionary);
15
+ RCT_EXPORT_VIEW_PROPERTY(paused, BOOL);
16
+ RCT_EXPORT_VIEW_PROPERTY(volume, NSNumber);
17
+ RCT_EXPORT_VIEW_PROPERTY(muted, BOOL);
18
+ RCT_EXPORT_VIEW_PROPERTY(playbackRate, NSNumber);
19
+ RCT_EXPORT_VIEW_PROPERTY(selectedTextTrack, NSNumber);
20
+ RCT_EXPORT_VIEW_PROPERTY(selectedAudioTrack, NSNumber);
21
+ RCT_EXPORT_VIEW_PROPERTY(selectedVideoTrack, NSNumber);
22
+ RCT_EXPORT_VIEW_PROPERTY(seek, NSNumber);
23
+ RCT_EXPORT_VIEW_PROPERTY(fullscreen, BOOL);
24
+ RCT_EXPORT_VIEW_PROPERTY(onNativePause, RCTDirectEventBlock);
25
+ RCT_EXPORT_VIEW_PROPERTY(onNativePlay, RCTDirectEventBlock);
26
+ RCT_EXPORT_VIEW_PROPERTY(onNativeSourceChange, RCTDirectEventBlock);
27
+ RCT_EXPORT_VIEW_PROPERTY(onNativeLoadStart, RCTDirectEventBlock);
28
+ RCT_EXPORT_VIEW_PROPERTY(onNativeReadyStateChange, RCTDirectEventBlock);
29
+ RCT_EXPORT_VIEW_PROPERTY(onNativeDurationChange, RCTDirectEventBlock);
30
+ RCT_EXPORT_VIEW_PROPERTY(onNativeProgress, RCTBubblingEventBlock);
31
+ RCT_EXPORT_VIEW_PROPERTY(onNativeTimeUpdate, RCTBubblingEventBlock);
32
+ RCT_EXPORT_VIEW_PROPERTY(onNativePlaying, RCTDirectEventBlock);
33
+ RCT_EXPORT_VIEW_PROPERTY(onNativeSeeking, RCTDirectEventBlock);
34
+ RCT_EXPORT_VIEW_PROPERTY(onNativeSeeked, RCTDirectEventBlock);
35
+ RCT_EXPORT_VIEW_PROPERTY(onNativeEnded, RCTDirectEventBlock);
36
+ RCT_EXPORT_VIEW_PROPERTY(onNativeError, RCTDirectEventBlock);
37
+ RCT_EXPORT_VIEW_PROPERTY(onNativeLoadedData, RCTDirectEventBlock);
38
+ RCT_EXPORT_VIEW_PROPERTY(onNativeLoadedMetadata, RCTDirectEventBlock);
39
+ RCT_EXPORT_VIEW_PROPERTY(onNativeFullscreenPlayerWillPresent, RCTDirectEventBlock);
40
+ RCT_EXPORT_VIEW_PROPERTY(onNativeFullscreenPlayerDidPresent, RCTDirectEventBlock);
41
+ RCT_EXPORT_VIEW_PROPERTY(onNativeFullscreenPlayerWillDismiss, RCTDirectEventBlock);
42
+ RCT_EXPORT_VIEW_PROPERTY(onNativeFullscreenPlayerDidDismiss, RCTDirectEventBlock);
43
+ RCT_EXPORT_VIEW_PROPERTY(onNativeTextTrackListEvent, RCTDirectEventBlock);
44
+ RCT_EXPORT_VIEW_PROPERTY(onNativeTextTrackEvent, RCTDirectEventBlock);
45
+
46
+ @end
@@ -0,0 +1,16 @@
1
+ // THEOplayerRCTDebug.swift
2
+
3
+ // General debug flag, if set to false none of the debug prints will appear
4
+ let DEBUG = true
5
+
6
+ // Debug flag to monitor incoming Theoplayer events
7
+ let DEBUG_THEOPLAYER_EVENTS = DEBUG && true
8
+
9
+ // Debug flag to monitor eventhandler setup and breakdown
10
+ let DEBUG_EVENTHANDLER = DEBUG && true
11
+
12
+ // Debug flag to monitor the interactions for each view with its underlying theoplayer instance
13
+ let DEBUG_THEOPLAYER_INTERACTION = DEBUG && true
14
+
15
+ // Debug flag to monitor all updates made on bridged properties
16
+ let DEBUG_PROP_UPDATES = DEBUG && true
@@ -0,0 +1,169 @@
1
+ // THEOplayerRCTMetadataAggregator.swift
2
+
3
+ import Foundation
4
+ import THEOplayerSDK
5
+
6
+ let EVENT_PROP_TEXT_TRACKS: String = "textTracks"
7
+ let EVENT_PROP_AUDIO_TRACKS: String = "audioTracks"
8
+ let EVENT_PROP_VIDEO_TRACKS: String = "videoTracks"
9
+ let EVENT_PROP_SELECTED_TEXT_TRACK: String = "selectedTextTrack"
10
+ let EVENT_PROP_SELECTED_AUDIO_TRACK: String = "selectedAudioTrack"
11
+ let EVENT_PROP_SELECTED_VIDEO_TRACK: String = "selectedVideoTrack"
12
+ let EVENT_PROP_DURATION: String = "duration"
13
+ let PROP_ID: String = "id"
14
+ let PROP_UID: String = "uid"
15
+ let PROP_KIND: String = "kind"
16
+ let PROP_LANGUAGE: String = "language"
17
+ let PROP_MODE: String = "mode"
18
+ let PROP_LABEL: String = "label"
19
+ let PROP_TYPE: String = "type"
20
+ let PROP_QUALITIES: String = "qualities"
21
+ let PROP_ACTIVE_QUALITY: String = "activeQuality"
22
+ let PROP_TARGET_QUALITY: String = "targetQuality"
23
+ let PROP_STARTTIME: String = "startTime"
24
+ let PROP_ENDTIME: String = "endTime"
25
+ let PROP_CUES: String = "cues"
26
+ let PROP_CUE_CONTENT: String = "content"
27
+ let PROP_SRC: String = "src"
28
+
29
+ class THEOplayerRCTMetadataAggregator {
30
+
31
+ class func aggregateMetadata(player: THEOplayer) -> [String:Any] {
32
+ let textTracks: TextTrackList = player.textTracks
33
+ let audioTracks: AudioTrackList = player.audioTracks
34
+ let videoTracks: VideoTrackList = player.videoTracks
35
+ return [
36
+ EVENT_PROP_TEXT_TRACKS : THEOplayerRCTMetadataAggregator.aggregatedTextTrackListInfo(textTracks: textTracks),
37
+ EVENT_PROP_AUDIO_TRACKS : THEOplayerRCTMetadataAggregator.aggregatedAudioTrackListInfo(audioTracks: audioTracks),
38
+ EVENT_PROP_VIDEO_TRACKS : THEOplayerRCTMetadataAggregator.aggregatedVideoTrackListInfo(videoTracks: videoTracks),
39
+ EVENT_PROP_SELECTED_TEXT_TRACK: THEOplayerRCTMetadataAggregator.selectedTextTrack(textTracks: textTracks),
40
+ EVENT_PROP_SELECTED_AUDIO_TRACK: THEOplayerRCTMetadataAggregator.selectedAudioTrack(audioTracks: audioTracks),
41
+ EVENT_PROP_SELECTED_VIDEO_TRACK: THEOplayerRCTMetadataAggregator.selectedVideoTrack(videoTracks: videoTracks),
42
+ EVENT_PROP_DURATION: player.duration ?? 0
43
+ ]
44
+ }
45
+
46
+ class func aggregatedTextTrackListInfo(textTracks: TextTrackList) -> [[String:Any]] {
47
+ var textTrackEntries:[[String:Any]] = []
48
+ guard textTracks.count > 0 else {
49
+ return textTrackEntries
50
+ }
51
+ for i in 0...textTracks.count-1 {
52
+ let textTrack: TextTrack = textTracks.get(i)
53
+ textTrackEntries.append(THEOplayerRCTMetadataAggregator.aggregatedTextTrackInfo(textTrack: textTrack))
54
+ }
55
+ return textTrackEntries
56
+ }
57
+
58
+ class func aggregatedTextTrackInfo(textTrack: TextTrack) -> [String:Any] {
59
+ var entry: [String:Any] = [:]
60
+ entry[PROP_ID] = textTrack.id
61
+ entry[PROP_UID] = textTrack.uid
62
+ entry[PROP_KIND] = textTrack.kind
63
+ entry[PROP_LANGUAGE] = textTrack.language
64
+ entry[PROP_MODE] = String(describing: textTrack.mode)
65
+ entry[PROP_LABEL] = textTrack.label
66
+ entry[PROP_TYPE] = textTrack.type
67
+ entry[PROP_SRC] = textTrack.src
68
+ // process cues when texttrack contains them
69
+ if !textTrack.cues.isEmpty {
70
+ var cueList: [[String:Any]] = []
71
+ for cue in textTrack.cues {
72
+ cueList.append(THEOplayerRCTMetadataAggregator.aggregatedTextTrackCueInfo(textTrackCue: cue))
73
+ }
74
+ entry[PROP_CUES] = cueList
75
+ }
76
+ return entry
77
+ }
78
+
79
+ class func aggregatedTextTrackCueInfo(textTrackCue: TextTrackCue) -> [String:Any] {
80
+ var entry: [String:Any] = [:]
81
+ entry[PROP_ID] = textTrackCue.id
82
+ entry[PROP_UID] = textTrackCue.uid
83
+ entry[PROP_STARTTIME] = (textTrackCue.startTime ?? 0) * 1000
84
+ entry[PROP_ENDTIME] = (textTrackCue.endTime ?? 0) * 1000
85
+ entry[PROP_CUE_CONTENT] = textTrackCue.contentString
86
+ return entry
87
+ }
88
+
89
+ private class func aggregatedAudioTrackListInfo(audioTracks: AudioTrackList) -> [[String:Any]] {
90
+ var audioTrackEntries:[[String:Any]] = []
91
+ guard audioTracks.count > 0 else {
92
+ return audioTrackEntries
93
+ }
94
+ for i in 0...audioTracks.count-1 {
95
+ let audioTrack: MediaTrack = audioTracks.get(i)
96
+ var entry: [String:Any] = [:]
97
+ entry[PROP_ID] = audioTrack.id
98
+ entry[PROP_UID] = audioTrack.uid
99
+ entry[PROP_KIND] = audioTrack.kind
100
+ entry[PROP_LANGUAGE] = audioTrack.language
101
+ entry[PROP_LABEL] = audioTrack.label
102
+ entry[PROP_QUALITIES] = [] // empty: qualities are not being exposed on iOS
103
+ //entry[PROP_ACTIVE_QUALITY] = // undefined: qualities are not being exposed on iOS
104
+ //entry[PROP_TARGET_QUALITY] = // undefined: qualities are not being exposed on iOS
105
+ audioTrackEntries.append(entry)
106
+ }
107
+ return audioTrackEntries
108
+ }
109
+
110
+ private class func aggregatedVideoTrackListInfo(videoTracks: VideoTrackList) -> [[String:Any]] {
111
+ var videoTrackEntries:[[String:Any]] = []
112
+ guard videoTracks.count > 0 else {
113
+ return videoTrackEntries
114
+ }
115
+ for i in 0...videoTracks.count-1 {
116
+ let videoTrack: MediaTrack = videoTracks.get(i)
117
+ var entry: [String:Any] = [:]
118
+ entry[PROP_ID] = videoTrack.id
119
+ entry[PROP_UID] = videoTrack.uid
120
+ entry[PROP_KIND] = videoTrack.kind
121
+ entry[PROP_LANGUAGE] = videoTrack.language
122
+ entry[PROP_LABEL] = videoTrack.label
123
+ entry[PROP_QUALITIES] = [] // empty: qualities are not being exposed on iOS
124
+ //entry[PROP_ACTIVE_QUALITY] = // undefined: qualities are not being exposed on iOS
125
+ //entry[PROP_TARGET_QUALITY] = // undefined: qualities are not being exposed on iOS
126
+ videoTrackEntries.append(entry)
127
+ }
128
+ return videoTrackEntries
129
+ }
130
+
131
+ private class func selectedTextTrack(textTracks: TextTrackList) -> Int {
132
+ guard textTracks.count > 0 else {
133
+ return 0
134
+ }
135
+ for i in 0...textTracks.count-1 {
136
+ let textTrack: TextTrack = textTracks.get(i)
137
+ if textTrack.mode == TextTrackMode.showing {
138
+ return textTrack.uid
139
+ }
140
+ }
141
+ return 0
142
+ }
143
+
144
+ private class func selectedAudioTrack(audioTracks: AudioTrackList) -> Int {
145
+ guard audioTracks.count > 0 else {
146
+ return 0
147
+ }
148
+ for i in 0...audioTracks.count-1 {
149
+ let audioTrack: MediaTrack = audioTracks.get(i)
150
+ if audioTrack.enabled {
151
+ return audioTrack.uid
152
+ }
153
+ }
154
+ return 0
155
+ }
156
+
157
+ private class func selectedVideoTrack(videoTracks: VideoTrackList) -> Int {
158
+ guard videoTracks.count > 0 else {
159
+ return 0
160
+ }
161
+ for i in 0...videoTracks.count-1 {
162
+ let videoTrack: MediaTrack = videoTracks.get(i)
163
+ if videoTracks.get(i).enabled {
164
+ return videoTrack.uid
165
+ }
166
+ }
167
+ return 0
168
+ }
169
+ }