@100mslive/react-native-hms 1.6.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/android/build.gradle +15 -7
  2. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +14 -15
  3. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayer.kt +248 -0
  4. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +101 -0
  5. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +10 -5
  6. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +0 -14
  7. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +90 -106
  8. package/android/src/main/java/com/reactnativehmssdk/HmssdkPackage.kt +1 -1
  9. package/android/src/main/res/layout/player_view.xml +9 -0
  10. package/ios/HMSDecoder.swift +4 -4
  11. package/ios/HMSHLSPlayerManager.m +22 -0
  12. package/ios/HMSHLSPlayerManager.swift +368 -0
  13. package/ios/HMSManager.m +1 -2
  14. package/ios/HMSManager.swift +22 -16
  15. package/ios/HMSRNSDK.swift +34 -85
  16. package/lib/commonjs/classes/HMSEncoder.js +12 -4
  17. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  18. package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
  19. package/lib/commonjs/classes/HMSMessage.js +2 -1
  20. package/lib/commonjs/classes/HMSMessage.js.map +1 -1
  21. package/lib/commonjs/classes/HMSPeer.js +55 -20
  22. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  23. package/lib/commonjs/classes/HMSPeerUpdate.js +1 -1
  24. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  25. package/lib/commonjs/classes/HMSPeersCache.js +30 -38
  26. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  27. package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -1
  28. package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
  29. package/lib/commonjs/classes/HMSSDK.js +36 -33
  30. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  31. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +147 -0
  32. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -0
  33. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +12 -0
  34. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -0
  35. package/lib/commonjs/components/HMSHLSPlayer/hooks.js +71 -0
  36. package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -0
  37. package/lib/commonjs/components/HMSHLSPlayer/index.js +63 -0
  38. package/lib/commonjs/components/HMSHLSPlayer/index.js.map +1 -0
  39. package/lib/commonjs/index.js +38 -0
  40. package/lib/commonjs/index.js.map +1 -1
  41. package/lib/commonjs/stores/hls-player-playback-slice.js +23 -0
  42. package/lib/commonjs/stores/hls-player-playback-slice.js.map +1 -0
  43. package/lib/commonjs/stores/hls-player-stats-store.js +36 -0
  44. package/lib/commonjs/stores/hls-player-stats-store.js.map +1 -0
  45. package/lib/commonjs/stores/hms-store.js +16 -0
  46. package/lib/commonjs/stores/hms-store.js.map +1 -0
  47. package/lib/commonjs/stores/types.js +6 -0
  48. package/lib/commonjs/stores/types.js.map +1 -0
  49. package/lib/commonjs/types.js +36 -0
  50. package/lib/commonjs/types.js.map +1 -0
  51. package/lib/module/classes/HMSEncoder.js +12 -4
  52. package/lib/module/classes/HMSEncoder.js.map +1 -1
  53. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  54. package/lib/module/classes/HMSMessage.js +2 -1
  55. package/lib/module/classes/HMSMessage.js.map +1 -1
  56. package/lib/module/classes/HMSPeer.js +55 -20
  57. package/lib/module/classes/HMSPeer.js.map +1 -1
  58. package/lib/module/classes/HMSPeerUpdate.js +1 -1
  59. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  60. package/lib/module/classes/HMSPeersCache.js +30 -38
  61. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  62. package/lib/module/classes/HMSRTMPConfig.js.map +1 -1
  63. package/lib/module/classes/HMSRemotePeer.js.map +1 -1
  64. package/lib/module/classes/HMSSDK.js +36 -33
  65. package/lib/module/classes/HMSSDK.js.map +1 -1
  66. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +138 -0
  67. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -0
  68. package/lib/module/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +4 -0
  69. package/lib/module/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -0
  70. package/lib/module/components/HMSHLSPlayer/hooks.js +56 -0
  71. package/lib/module/components/HMSHLSPlayer/hooks.js.map +1 -0
  72. package/lib/module/components/HMSHLSPlayer/index.js +3 -0
  73. package/lib/module/components/HMSHLSPlayer/index.js.map +1 -0
  74. package/lib/module/index.js +7 -0
  75. package/lib/module/index.js.map +1 -1
  76. package/lib/module/stores/hls-player-playback-slice.js +16 -0
  77. package/lib/module/stores/hls-player-playback-slice.js.map +1 -0
  78. package/lib/module/stores/hls-player-stats-store.js +29 -0
  79. package/lib/module/stores/hls-player-stats-store.js.map +1 -0
  80. package/lib/module/stores/hms-store.js +9 -0
  81. package/lib/module/stores/hms-store.js.map +1 -0
  82. package/lib/module/stores/types.js +2 -0
  83. package/lib/module/stores/types.js.map +1 -0
  84. package/lib/module/types.js +32 -0
  85. package/lib/module/types.js.map +1 -0
  86. package/lib/typescript/classes/HMSEncoder.d.ts +1 -0
  87. package/lib/typescript/classes/HMSLocalPeer.d.ts +0 -1
  88. package/lib/typescript/classes/HMSMessage.d.ts +2 -0
  89. package/lib/typescript/classes/HMSPeer.d.ts +10 -5
  90. package/lib/typescript/classes/HMSPeersCache.d.ts +17 -2
  91. package/lib/typescript/classes/HMSRTMPConfig.d.ts +2 -2
  92. package/lib/typescript/classes/HMSRemotePeer.d.ts +0 -1
  93. package/lib/typescript/classes/HMSSDK.d.ts +12 -17
  94. package/lib/typescript/components/HMSHLSPlayer/HMSHLSPlayer.d.ts +21 -0
  95. package/lib/typescript/components/HMSHLSPlayer/RCTHMSHLSPlayer.d.ts +19 -0
  96. package/lib/typescript/components/HMSHLSPlayer/hooks.d.ts +17 -0
  97. package/lib/typescript/components/HMSHLSPlayer/index.d.ts +2 -0
  98. package/lib/typescript/index.d.ts +3 -0
  99. package/lib/typescript/stores/hls-player-playback-slice.d.ts +5 -0
  100. package/lib/typescript/stores/hls-player-stats-store.d.ts +9 -0
  101. package/lib/typescript/stores/hms-store.d.ts +9 -0
  102. package/lib/typescript/stores/types.d.ts +25 -0
  103. package/lib/typescript/types.d.ts +63 -0
  104. package/package.json +10 -5
  105. package/react-native-hms.podspec +1 -0
  106. package/sdk-versions.json +3 -2
  107. package/src/classes/HMSEncoder.ts +15 -3
  108. package/src/classes/HMSLocalPeer.ts +0 -1
  109. package/src/classes/HMSMessage.ts +3 -1
  110. package/src/classes/HMSPeer.ts +96 -48
  111. package/src/classes/HMSPeerUpdate.ts +4 -4
  112. package/src/classes/HMSPeersCache.ts +53 -40
  113. package/src/classes/HMSRTMPConfig.ts +2 -2
  114. package/src/classes/HMSRemotePeer.ts +0 -1
  115. package/src/classes/HMSSDK.tsx +59 -47
  116. package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +235 -0
  117. package/src/components/HMSHLSPlayer/RCTHMSHLSPlayer.ts +38 -0
  118. package/src/components/HMSHLSPlayer/hooks.ts +100 -0
  119. package/src/components/HMSHLSPlayer/index.ts +9 -0
  120. package/src/index.ts +8 -0
  121. package/src/stores/hls-player-playback-slice.ts +25 -0
  122. package/src/stores/hls-player-stats-store.ts +37 -0
  123. package/src/stores/hms-store.ts +11 -0
  124. package/src/stores/types.ts +49 -0
  125. package/src/types.ts +119 -0
  126. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  127. package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
  128. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  129. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  130. package/android/.gradle/6.9/gc.properties +0 -0
  131. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  132. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  133. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  134. package/android/.gradle/checksums/checksums.lock +0 -0
  135. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  136. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  137. package/android/.gradle/vcs-1/gc.properties +0 -0
  138. package/android/.idea/compiler.xml +0 -6
  139. package/android/.idea/gradle.xml +0 -18
  140. package/android/.idea/jarRepositories.xml +0 -50
  141. package/android/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml +0 -16
  142. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml +0 -11
  143. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml +0 -13
  144. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_1_aar.xml +0 -16
  145. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_1_aar.xml +0 -13
  146. package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml +0 -11
  147. package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml +0 -13
  148. package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +0 -16
  149. package/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml +0 -11
  150. package/android/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_1_3_aar.xml +0 -13
  151. package/android/.idea/libraries/Gradle__androidx_core_core_1_7_0_aar.xml +0 -16
  152. package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +0 -13
  153. package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +0 -13
  154. package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +0 -16
  155. package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml +0 -16
  156. package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +0 -13
  157. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_4_0.xml +0 -11
  158. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +0 -13
  159. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml +0 -13
  160. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_4_0_aar.xml +0 -13
  161. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml +0 -13
  162. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml +0 -13
  163. package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +0 -13
  164. package/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml +0 -13
  165. package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +0 -16
  166. package/android/.idea/libraries/Gradle__androidx_tracing_tracing_1_1_0_aar.xml +0 -13
  167. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml +0 -13
  168. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml +0 -13
  169. package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml +0 -13
  170. package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +0 -13
  171. package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_0_3_0_aar.xml +0 -14
  172. package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +0 -15
  173. package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +0 -18
  174. package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +0 -18
  175. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +0 -18
  176. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +0 -18
  177. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +0 -15
  178. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +0 -15
  179. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +0 -15
  180. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +0 -15
  181. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +0 -15
  182. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +0 -15
  183. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +0 -15
  184. package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +0 -15
  185. package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml +0 -13
  186. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_71_0_rc_0_debug_aar.xml +0 -14
  187. package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_4.xml +0 -13
  188. package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_4.xml +0 -13
  189. package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_4_aar.xml +0 -14
  190. package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +0 -13
  191. package/android/.idea/libraries/Gradle__com_github_100mslive_android_sdk_lib_2_5_1_aar.xml +0 -10
  192. package/android/.idea/libraries/Gradle__com_github_100mslive_webrtc_m104_hms_1_3_aar.xml +0 -10
  193. package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +0 -13
  194. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_2.xml +0 -13
  195. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_2.xml +0 -13
  196. package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +0 -13
  197. package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +0 -13
  198. package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +0 -13
  199. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +0 -13
  200. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_10.xml +0 -13
  201. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_10.xml +0 -13
  202. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_10.xml +0 -13
  203. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_10.xml +0 -13
  204. package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_6_0.xml +0 -13
  205. package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_6_0.xml +0 -13
  206. package/android/.idea/misc.xml +0 -9
  207. package/android/.idea/modules/android.androidTest.iml +0 -203
  208. package/android/.idea/modules/android.iml +0 -40
  209. package/android/.idea/modules/android.main.iml +0 -199
  210. package/android/.idea/modules/android.unitTest.iml +0 -197
  211. package/android/.idea/modules.xml +0 -11
  212. package/android/.idea/sonarlint/issuestore/3/c/3c46088b6add3088181589d8ed726652742b6221 +0 -5
  213. package/android/.idea/sonarlint/issuestore/a/8/a8c9f5ddd88723818e51ae3cf8693d02355a8691 +0 -0
  214. package/android/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 +0 -0
  215. package/android/.idea/sonarlint/issuestore/index.pb +0 -7
  216. package/android/.idea/vcs.xml +0 -6
@@ -1,11 +1,14 @@
1
1
  import { NativeModules } from 'react-native';
2
- import type { HMSPeer } from './HMSPeer';
3
2
  import { HMSEncoder } from './HMSEncoder';
4
3
  import { HMSPeerUpdate } from './HMSPeerUpdate';
5
4
  import { HMSTrackUpdate } from './HMSTrackUpdate';
6
5
  import type { HMSTrack } from './HMSTrack';
7
6
  import { HMSTrackType } from './HMSTrackType';
8
7
  import { HMSTrackSource } from './HMSTrackSource';
8
+ import type { HMSNetworkQuality } from './HMSNetworkQuality';
9
+ import type { HMSRole } from './HMSRole';
10
+ import type { HMSAudioTrack } from './HMSAudioTrack';
11
+ import type { HMSVideoTrack } from './HMSVideoTrack';
9
12
 
10
13
  const { HMSManager } = NativeModules;
11
14
 
@@ -26,9 +29,18 @@ export const clearHmsPeersCache = () => {
26
29
  hmsPeersCache = undefined;
27
30
  };
28
31
 
29
- export type HMSPeerCacheProps = Partial<
30
- Omit<HMSPeer, 'peerID' | 'customerDescription'>
31
- >;
32
+ export type HMSPeerCacheProps = {
33
+ peerID?: string | undefined;
34
+ name?: string | undefined;
35
+ isLocal?: boolean | undefined;
36
+ networkQuality?: HMSNetworkQuality | undefined;
37
+ customerUserID?: string | undefined;
38
+ metadata?: string | undefined;
39
+ role?: HMSRole | undefined;
40
+ audioTrack?: HMSAudioTrack | undefined;
41
+ videoTrack?: HMSVideoTrack | undefined;
42
+ auxiliaryTracks?: HMSTrack[] | undefined;
43
+ };
32
44
 
33
45
  export class HMSPeersCache {
34
46
  private _data = new Map<string, HMSPeerCacheProps>();
@@ -66,12 +78,19 @@ export class HMSPeersCache {
66
78
  ) {
67
79
  const peerObj = this._data.get(peerId);
68
80
 
81
+ if (updateType === HMSPeerUpdate.PEER_JOINED) {
82
+ if (!peerObj) {
83
+ this._data.set(peerId, data);
84
+ }
85
+ return;
86
+ }
87
+
69
88
  if (updateType === HMSPeerUpdate.PEER_LEFT) {
70
89
  this._data.delete(peerId);
71
90
  return;
72
91
  }
73
92
 
74
- let updatedObj = { ...peerObj };
93
+ let updatedObj = peerObj || {};
75
94
 
76
95
  switch (updateType) {
77
96
  case HMSTrackUpdate.TRACK_ADDED: {
@@ -79,7 +98,8 @@ export class HMSPeersCache {
79
98
 
80
99
  if (track.source === HMSTrackSource.REGULAR) {
81
100
  if (track.type === HMSTrackType.VIDEO) {
82
- updatedObj.videoTrack = { ...track, isDegraded: false };
101
+ updatedObj.videoTrack = track;
102
+ updatedObj.videoTrack.isDegraded = false;
83
103
  } else if (track.type === HMSTrackType.AUDIO) {
84
104
  updatedObj.audioTrack = track;
85
105
  }
@@ -102,12 +122,9 @@ export class HMSPeersCache {
102
122
  updatedObj.audioTrack = undefined;
103
123
  }
104
124
  } else if (Array.isArray(updatedObj.auxiliaryTracks)) {
105
- updatedObj = {
106
- ...updatedObj,
107
- auxiliaryTracks: updatedObj.auxiliaryTracks.filter(
108
- (auxiliaryTrack) => auxiliaryTrack.trackId !== track.trackId
109
- ),
110
- };
125
+ updatedObj.auxiliaryTracks = updatedObj.auxiliaryTracks.filter(
126
+ (auxiliaryTrack) => auxiliaryTrack.trackId !== track.trackId
127
+ );
111
128
  }
112
129
  break;
113
130
  }
@@ -117,10 +134,9 @@ export class HMSPeersCache {
117
134
 
118
135
  if (track.source === HMSTrackSource.REGULAR) {
119
136
  if (track.type === HMSTrackType.VIDEO) {
120
- updatedObj.videoTrack = {
121
- ...track,
122
- isDegraded: updatedObj.videoTrack?.isDegraded || false,
123
- };
137
+ const oldIsDegraded = updatedObj.videoTrack?.isDegraded || false;
138
+ updatedObj.videoTrack = track;
139
+ updatedObj.videoTrack.isDegraded = oldIsDegraded;
124
140
  } else if (track.type === HMSTrackType.AUDIO) {
125
141
  updatedObj.audioTrack = track;
126
142
  }
@@ -147,30 +163,26 @@ export class HMSPeersCache {
147
163
 
148
164
  if (track.source === HMSTrackSource.REGULAR) {
149
165
  if (track.type === HMSTrackType.VIDEO) {
150
- updatedObj.videoTrack = {
151
- ...track,
152
- isDegraded: updateType === HMSTrackUpdate.TRACK_DEGRADED,
153
- };
166
+ updatedObj.videoTrack = track;
167
+ updatedObj.videoTrack.isDegraded =
168
+ updateType === HMSTrackUpdate.TRACK_DEGRADED;
154
169
  } else if (track.type === HMSTrackType.AUDIO) {
155
170
  updatedObj.audioTrack = track;
156
171
  }
157
172
  } else {
158
173
  if (Array.isArray(updatedObj.auxiliaryTracks)) {
159
- updatedObj = {
160
- ...updatedObj,
161
- auxiliaryTracks: updatedObj.auxiliaryTracks.map(
162
- (auxiliaryTrack) => {
163
- if (auxiliaryTrack.trackId === track.trackId) {
164
- return {
165
- ...auxiliaryTrack,
166
- isDegraded: updateType === HMSTrackUpdate.TRACK_DEGRADED,
167
- };
168
- }
169
-
170
- return auxiliaryTrack;
174
+ updatedObj.auxiliaryTracks = updatedObj.auxiliaryTracks.map(
175
+ (auxiliaryTrack) => {
176
+ if (auxiliaryTrack.trackId === track.trackId) {
177
+ return {
178
+ ...auxiliaryTrack,
179
+ isDegraded: updateType === HMSTrackUpdate.TRACK_DEGRADED,
180
+ };
171
181
  }
172
- ),
173
- };
182
+
183
+ return auxiliaryTrack;
184
+ }
185
+ );
174
186
  } else {
175
187
  updatedObj.auxiliaryTracks = [track];
176
188
  }
@@ -187,11 +199,12 @@ export class HMSPeersCache {
187
199
  );
188
200
  break;
189
201
  }
190
- case HMSPeerUpdate.METADATA_CHANGED:
191
- case HMSPeerUpdate.NAME_CHANGED:
192
- case HMSPeerUpdate.PEER_JOINED:
193
- case HMSPeerUpdate.ROLE_CHANGED: {
194
- updatedObj = { ...updatedObj, ...data };
202
+ case HMSPeerUpdate.METADATA_CHANGED: {
203
+ updatedObj.metadata = data.metadata;
204
+ break;
205
+ }
206
+ case HMSPeerUpdate.NAME_CHANGED: {
207
+ updatedObj.name = data.name;
195
208
  break;
196
209
  }
197
210
  default: {
@@ -243,7 +256,7 @@ export function getPeerPropertyFromNative<T extends keyof HMSPeerCacheProps>(
243
256
  ? HMSEncoder.encodeHmsAuxiliaryTracks(data.auxiliaryTracks, id)
244
257
  : undefined;
245
258
  } else if (property === 'name') {
246
- value = data?.[property] || '';
259
+ value = data?.[property];
247
260
  } else {
248
261
  value = data ? data[property] : undefined;
249
262
  }
@@ -1,13 +1,13 @@
1
1
  import type { HMSRtmpVideoResolution } from './HMSRtmpVideoResolution';
2
2
 
3
3
  export class HMSRTMPConfig {
4
- meetingURL: string;
4
+ meetingURL?: string;
5
5
  rtmpURLs?: Array<string>;
6
6
  record: boolean;
7
7
  resolution?: HMSRtmpVideoResolution;
8
8
 
9
9
  constructor(params: {
10
- meetingURL: string;
10
+ meetingURL?: string;
11
11
  rtmpURLs?: Array<string>;
12
12
  record: boolean;
13
13
  resolution?: HMSRtmpVideoResolution;
@@ -16,7 +16,6 @@ export class HMSRemotePeer extends HMSPeer {
16
16
 
17
17
  constructor(params: {
18
18
  peerID: string;
19
- customerDescription?: string;
20
19
  remoteAudioTrackData?: {
21
20
  trackId: string;
22
21
  source?: number | string;
@@ -314,11 +314,14 @@ export class HMSSDK {
314
314
  type: type || null,
315
315
  id: this.id,
316
316
  });
317
- return await HMSManager.sendBroadcastMessage({
318
- message,
319
- type: type || null,
320
- id: this.id,
321
- });
317
+ const data: { messageId: string | undefined } =
318
+ await HMSManager.sendBroadcastMessage({
319
+ message,
320
+ type: type || null,
321
+ id: this.id,
322
+ });
323
+
324
+ return data;
322
325
  };
323
326
 
324
327
  /**
@@ -340,12 +343,15 @@ export class HMSSDK {
340
343
  id: this.id,
341
344
  type: type || null,
342
345
  });
343
- return await HMSManager.sendGroupMessage({
344
- message,
345
- roles: HMSHelper.getRoleNames(roles),
346
- id: this.id,
347
- type: type || null,
348
- });
346
+ const data: { messageId: string | undefined } =
347
+ await HMSManager.sendGroupMessage({
348
+ message,
349
+ roles: HMSHelper.getRoleNames(roles),
350
+ id: this.id,
351
+ type: type || null,
352
+ });
353
+
354
+ return data;
349
355
  };
350
356
 
351
357
  /**
@@ -367,12 +373,15 @@ export class HMSSDK {
367
373
  id: this.id,
368
374
  type: type || null,
369
375
  });
370
- return await HMSManager.sendDirectMessage({
371
- message,
372
- peerId: peer.peerID,
373
- id: this.id,
374
- type: type || null,
375
- });
376
+ const data: { messageId: string | undefined } =
377
+ await HMSManager.sendDirectMessage({
378
+ message,
379
+ peerId: peer.peerID,
380
+ id: this.id,
381
+ type: type || null,
382
+ });
383
+
384
+ return data;
376
385
  };
377
386
 
378
387
  /**
@@ -993,6 +1002,7 @@ export class HMSSDK {
993
1002
  };
994
1003
 
995
1004
  /**
1005
+ * Android Only
996
1006
  * - This wrapper function used to switch output to device other than the default, currently available only for android.
997
1007
  *
998
1008
  * checkout {@link https://www.100ms.live/docs/react-native/v2/features/audio-output-routing#switch-audio-focus-to-another-device} for more info
@@ -1013,6 +1023,19 @@ export class HMSSDK {
1013
1023
  }
1014
1024
  };
1015
1025
 
1026
+ switchAudioOutputUsingIOSUI = () => {
1027
+ logger?.verbose('#Function switchAudioOutputUsingIOSUI', {
1028
+ id: this.id,
1029
+ });
1030
+ if (Platform.OS !== 'ios') {
1031
+ throw new Error(
1032
+ '#Function `switchAudioOutputUsingIOSUI` is only available on iOS, use `switchAudioOutput` method instead!'
1033
+ );
1034
+ }
1035
+
1036
+ return HMSManager.switchAudioOutputUsingIOSUI({ id: this.id });
1037
+ };
1038
+
1016
1039
  /**
1017
1040
  * - This wrapper function used to change Audio Mode manually, currently available only for android.
1018
1041
  *
@@ -1058,36 +1081,6 @@ export class HMSSDK {
1058
1081
  }
1059
1082
  };
1060
1083
 
1061
- /**
1062
- * @deprecated Older SessionMetaData APIs has been deprecated in favour of newer Session Store APIs.
1063
- * You can subscribe to `ON_SESSION_STORE_AVAILABLE` event to get notified when the `HMSSessionStore`
1064
- * is available and use `set` method on `HMSSessionStore` instance
1065
- * checkout {@link https://www.100ms.live/docs/react-native/v2/how-to-guides/}
1066
- */
1067
- setSessionMetaData = async (sessionMetaData: string | null) => {
1068
- logger?.verbose('#Function setSessionMetaData', {
1069
- id: this.id,
1070
- sessionMetaData,
1071
- });
1072
- return await HMSManager.setSessionMetaData({
1073
- id: this.id,
1074
- sessionMetaData,
1075
- });
1076
- };
1077
-
1078
- /**
1079
- * @deprecated Older SessionMetaData APIs has been deprecated in favour of newer Session Store APIs.
1080
- * You can subscribe to `ON_SESSION_STORE_AVAILABLE` event to get notified when the `HMSSessionStore`
1081
- * is available and use `get` or `addKeyChangeListener` method on `HMSSessionStore` instance
1082
- * checkout {@link https://www.100ms.live/docs/react-native/v2/how-to-guides/}
1083
- */
1084
- getSessionMetaData = async () => {
1085
- logger?.verbose('#Function getSessionMetaData', {
1086
- id: this.id,
1087
- });
1088
- return await HMSManager.getSessionMetaData({ id: this.id });
1089
- };
1090
-
1091
1084
  getRemoteVideoTrackFromTrackId = async (trackId: string) => {
1092
1085
  logger?.verbose('#Function getRemoteVideoTrackFromTrackId', {
1093
1086
  id: this.id,
@@ -1116,6 +1109,25 @@ export class HMSSDK {
1116
1109
  return HMSEncoder.encodeHmsRemoteAudioTrack(remoteAudioTrackData, this.id);
1117
1110
  };
1118
1111
 
1112
+ getPeerFromPeerId = (peerId: string) => {
1113
+ logger?.verbose('#Function getPeerFromPeerId', {
1114
+ id: this.id,
1115
+ peerId,
1116
+ });
1117
+ // Getting Peer Cache
1118
+ const peersCache = getHmsPeersCache();
1119
+
1120
+ // If Peer Cache doesn't exist, return `undefined` as we don't have Peer
1121
+ if (!peersCache) return;
1122
+
1123
+ const peerRole = peersCache.getProperty(peerId, 'role');
1124
+
1125
+ // If Peer doesn't have valid Role, return `undefined` as we don't have Peer
1126
+ if (!peerRole) return;
1127
+
1128
+ return HMSEncoder.encodeHmsPeer({ peerID: peerId });
1129
+ };
1130
+
1119
1131
  /**
1120
1132
  * - This is a prototype event listener that takes action and listens for updates related to that particular action
1121
1133
  *
@@ -0,0 +1,235 @@
1
+ import React, { useImperativeHandle, useRef } from 'react';
2
+ import { View, StyleSheet, UIManager, findNodeHandle } from 'react-native';
3
+ import type { StyleProp, ViewStyle } from 'react-native';
4
+
5
+ import {
6
+ setHMSHLSPlayerCue,
7
+ setHMSHLSPlayerPlaybackError,
8
+ setHMSHLSPlayerPlaybackState,
9
+ setHMSHLSPlayerStats,
10
+ setHMSHLSPlayerStatsError,
11
+ } from './hooks';
12
+ import {
13
+ HmsHlsPlaybackEventHandler,
14
+ HmsHlsStatsEventHandler,
15
+ RCTHMSHLSPlayer,
16
+ RCTHMSHLSPlayerRef,
17
+ RCTHMSHLSPlayerViewManagerConfig,
18
+ } from './RCTHMSHLSPlayer';
19
+ import {
20
+ HMSHLSPlayerPlaybackEventTypes,
21
+ HMSHLSPlayerStatsEventTypes,
22
+ } from '../../types';
23
+ import type { HMSHLSPlayerPlaybackCueEventData } from '../../types';
24
+ import { HMSEncoder } from '../../classes/HMSEncoder';
25
+ import type { HMSHLSPlayerPlaybackCue } from '../../stores/types';
26
+
27
+ export interface HMSHLSPlayerProps {
28
+ url?: string;
29
+ style?: StyleProp<ViewStyle>;
30
+ containerStyle?: StyleProp<ViewStyle>;
31
+ aspectRatio?: number;
32
+ enableStats?: boolean;
33
+ enableControls?: boolean;
34
+ }
35
+
36
+ export interface HMSHLSPlayerRefProperties {
37
+ play: (url?: string) => void;
38
+ stop: () => void;
39
+ pause: () => void;
40
+ resume: () => void;
41
+ seekForward: (seconds: number) => void;
42
+ seekBackward: (seconds: number) => void;
43
+ seekToLivePosition: () => void;
44
+ setVolume: (level: number) => void;
45
+ }
46
+
47
+ const _HMSHLSPlayer: React.ForwardRefRenderFunction<
48
+ HMSHLSPlayerRefProperties,
49
+ HMSHLSPlayerProps
50
+ > = (
51
+ {
52
+ url = '',
53
+ style,
54
+ containerStyle,
55
+ aspectRatio = 9 / 16,
56
+ enableStats,
57
+ enableControls = false,
58
+ },
59
+ ref
60
+ ) => {
61
+ const hmsHlsPlayerRef = useRef<RCTHMSHLSPlayerRef | null>(null);
62
+
63
+ useImperativeHandle(
64
+ ref,
65
+ () => ({
66
+ play: (url?: string) => {
67
+ if (hmsHlsPlayerRef.current) {
68
+ UIManager.dispatchViewManagerCommand(
69
+ findNodeHandle(hmsHlsPlayerRef.current),
70
+ RCTHMSHLSPlayerViewManagerConfig.Commands.play,
71
+ url ? [url] : ['']
72
+ );
73
+ }
74
+ },
75
+ stop: () => {
76
+ if (hmsHlsPlayerRef.current) {
77
+ UIManager.dispatchViewManagerCommand(
78
+ findNodeHandle(hmsHlsPlayerRef.current),
79
+ RCTHMSHLSPlayerViewManagerConfig.Commands.stop,
80
+ undefined
81
+ );
82
+ }
83
+ },
84
+ pause: () => {
85
+ if (hmsHlsPlayerRef.current) {
86
+ UIManager.dispatchViewManagerCommand(
87
+ findNodeHandle(hmsHlsPlayerRef.current),
88
+ RCTHMSHLSPlayerViewManagerConfig.Commands.pause,
89
+ undefined
90
+ );
91
+ }
92
+ },
93
+ resume: () => {
94
+ if (hmsHlsPlayerRef.current) {
95
+ UIManager.dispatchViewManagerCommand(
96
+ findNodeHandle(hmsHlsPlayerRef.current),
97
+ RCTHMSHLSPlayerViewManagerConfig.Commands.resume,
98
+ undefined
99
+ );
100
+ }
101
+ },
102
+ seekForward: (seconds: number) => {
103
+ if (typeof seconds !== 'number') {
104
+ throw new Error(
105
+ seconds
106
+ ? 'seconds must be a `number` type'
107
+ : 'seconds was not provided'
108
+ );
109
+ }
110
+
111
+ if (hmsHlsPlayerRef.current) {
112
+ UIManager.dispatchViewManagerCommand(
113
+ findNodeHandle(hmsHlsPlayerRef.current),
114
+ RCTHMSHLSPlayerViewManagerConfig.Commands.seekForward,
115
+ [seconds]
116
+ );
117
+ }
118
+ },
119
+ seekBackward: (seconds: number) => {
120
+ if (typeof seconds !== 'number') {
121
+ throw new Error(
122
+ seconds
123
+ ? 'seconds must be a `number` type'
124
+ : 'seconds was not provided'
125
+ );
126
+ }
127
+
128
+ if (hmsHlsPlayerRef.current) {
129
+ UIManager.dispatchViewManagerCommand(
130
+ findNodeHandle(hmsHlsPlayerRef.current),
131
+ RCTHMSHLSPlayerViewManagerConfig.Commands.seekBackward,
132
+ [seconds]
133
+ );
134
+ }
135
+ },
136
+ seekToLivePosition: () => {
137
+ if (hmsHlsPlayerRef.current) {
138
+ UIManager.dispatchViewManagerCommand(
139
+ findNodeHandle(hmsHlsPlayerRef.current),
140
+ RCTHMSHLSPlayerViewManagerConfig.Commands.seekToLivePosition,
141
+ undefined
142
+ );
143
+ }
144
+ },
145
+ setVolume: (level: number) => {
146
+ if (typeof level !== 'number') {
147
+ throw new Error(
148
+ level ? 'level must be a `number` type' : 'level was not provided'
149
+ );
150
+ }
151
+
152
+ if (hmsHlsPlayerRef.current) {
153
+ UIManager.dispatchViewManagerCommand(
154
+ findNodeHandle(hmsHlsPlayerRef.current),
155
+ RCTHMSHLSPlayerViewManagerConfig.Commands.setVolume,
156
+ [level]
157
+ );
158
+ }
159
+ },
160
+ }),
161
+ []
162
+ );
163
+
164
+ // Handle HLS Playback events
165
+ const handleHLSPlaybackEvent: HmsHlsPlaybackEventHandler = ({
166
+ nativeEvent,
167
+ }) => {
168
+ const { event, data } = nativeEvent;
169
+
170
+ if (event === HMSHLSPlayerPlaybackEventTypes.ON_PLAYBACK_CUE_EVENT) {
171
+ const transformedData = HMSEncoder.transformHMSHLSCueEventData<
172
+ HMSHLSPlayerPlaybackCueEventData,
173
+ HMSHLSPlayerPlaybackCue
174
+ >(data);
175
+ setHMSHLSPlayerCue(transformedData);
176
+ } else if (
177
+ event === HMSHLSPlayerPlaybackEventTypes.ON_PLAYBACK_FAILURE_EVENT
178
+ ) {
179
+ setHMSHLSPlayerPlaybackError(data.error);
180
+ } else {
181
+ setHMSHLSPlayerPlaybackState(data.state);
182
+ }
183
+ };
184
+
185
+ // Handle HLS Stats events
186
+ const handleHLSStatsEvent: HmsHlsStatsEventHandler = ({ nativeEvent }) => {
187
+ const { event, data } = nativeEvent;
188
+
189
+ if (event === HMSHLSPlayerStatsEventTypes.ON_STATS_EVENT_ERROR) {
190
+ setHMSHLSPlayerStatsError(data);
191
+ } else {
192
+ setHMSHLSPlayerStats(data);
193
+ }
194
+ };
195
+
196
+ return (
197
+ <View style={[styles.container, containerStyle]}>
198
+ <View style={[styles.playerWrapper, style]}>
199
+ <RCTHMSHLSPlayer
200
+ ref={hmsHlsPlayerRef}
201
+ url={url}
202
+ style={[styles.player, { aspectRatio }]}
203
+ enableStats={enableStats}
204
+ enableControls={enableControls}
205
+ onHmsHlsPlaybackEvent={handleHLSPlaybackEvent}
206
+ onHmsHlsStatsEvent={handleHLSStatsEvent}
207
+ />
208
+ </View>
209
+ </View>
210
+ );
211
+ };
212
+
213
+ export const HMSHLSPlayer = React.forwardRef<
214
+ HMSHLSPlayerRefProperties,
215
+ HMSHLSPlayerProps
216
+ >(_HMSHLSPlayer);
217
+
218
+ const styles = StyleSheet.create({
219
+ container: {
220
+ flex: 1,
221
+ alignItems: 'center',
222
+ justifyContent: 'center',
223
+ },
224
+ playerWrapper: {
225
+ backgroundColor: '#000000',
226
+ alignItems: 'center',
227
+ justifyContent: 'center',
228
+ },
229
+ player: {
230
+ width: '100%',
231
+ maxHeight: '100%',
232
+ maxWidth: '100%',
233
+ aspectRatio: 9 / 16,
234
+ },
235
+ });
@@ -0,0 +1,38 @@
1
+ import {
2
+ requireNativeComponent,
3
+ StyleProp,
4
+ NativeSyntheticEvent,
5
+ ViewStyle,
6
+ UIManager,
7
+ NativeMethods,
8
+ } from 'react-native';
9
+ import type {
10
+ HMSHLSPlayerPlaybackEvent,
11
+ HMSHLSPlayerStatsEvent,
12
+ } from '../../types';
13
+
14
+ export type HmsHlsPlaybackEventHandler = (
15
+ event: NativeSyntheticEvent<HMSHLSPlayerPlaybackEvent>
16
+ ) => void;
17
+
18
+ export type HmsHlsStatsEventHandler = (
19
+ event: NativeSyntheticEvent<HMSHLSPlayerStatsEvent>
20
+ ) => void;
21
+
22
+ export type RCTHMSHLSPlayerProps = {
23
+ url?: string;
24
+ style?: StyleProp<ViewStyle>;
25
+ enableStats?: boolean;
26
+ enableControls?: boolean;
27
+ onHmsHlsPlaybackEvent?: HmsHlsPlaybackEventHandler;
28
+ onHmsHlsStatsEvent?: HmsHlsStatsEventHandler;
29
+ };
30
+
31
+ export const RCTHMSHLSPlayer =
32
+ requireNativeComponent<RCTHMSHLSPlayerProps>('HMSHLSPlayer');
33
+
34
+ export type RCTHMSHLSPlayerRef = React.Component<RCTHMSHLSPlayerProps> &
35
+ Readonly<NativeMethods>;
36
+
37
+ export const RCTHMSHLSPlayerViewManagerConfig =
38
+ UIManager.getViewManagerConfig('HMSHLSPlayer');