@100mslive/react-native-hms 1.6.2 → 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.
- package/android/build.gradle +16 -8
- package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +14 -15
- package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayer.kt +248 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +101 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +10 -5
- package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +0 -14
- package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +79 -103
- package/android/src/main/java/com/reactnativehmssdk/HmssdkPackage.kt +1 -1
- package/android/src/main/res/layout/player_view.xml +9 -0
- package/ios/HMSDecoder.swift +4 -4
- package/ios/HMSHLSPlayerManager.m +22 -0
- package/ios/HMSHLSPlayerManager.swift +368 -0
- package/ios/HMSManager.m +1 -2
- package/ios/HMSManager.swift +22 -16
- package/ios/HMSRNSDK.swift +30 -81
- package/lib/commonjs/classes/HMSEncoder.js +11 -4
- package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
- package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
- package/lib/commonjs/classes/HMSPeer.js +55 -20
- package/lib/commonjs/classes/HMSPeer.js.map +1 -1
- package/lib/commonjs/classes/HMSPeerUpdate.js +1 -1
- package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
- package/lib/commonjs/classes/HMSPeersCache.js +30 -38
- package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
- package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -1
- package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
- package/lib/commonjs/classes/HMSSDK.js +30 -30
- package/lib/commonjs/classes/HMSSDK.js.map +1 -1
- package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +147 -0
- package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -0
- package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +12 -0
- package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -0
- package/lib/commonjs/components/HMSHLSPlayer/hooks.js +71 -0
- package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -0
- package/lib/commonjs/components/HMSHLSPlayer/index.js +63 -0
- package/lib/commonjs/components/HMSHLSPlayer/index.js.map +1 -0
- package/lib/commonjs/index.js +38 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/stores/hls-player-playback-slice.js +23 -0
- package/lib/commonjs/stores/hls-player-playback-slice.js.map +1 -0
- package/lib/commonjs/stores/hls-player-stats-store.js +36 -0
- package/lib/commonjs/stores/hls-player-stats-store.js.map +1 -0
- package/lib/commonjs/stores/hms-store.js +16 -0
- package/lib/commonjs/stores/hms-store.js.map +1 -0
- package/lib/commonjs/stores/types.js +6 -0
- package/lib/commonjs/stores/types.js.map +1 -0
- package/lib/commonjs/types.js +36 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/module/classes/HMSEncoder.js +11 -4
- package/lib/module/classes/HMSEncoder.js.map +1 -1
- package/lib/module/classes/HMSLocalPeer.js.map +1 -1
- package/lib/module/classes/HMSPeer.js +55 -20
- package/lib/module/classes/HMSPeer.js.map +1 -1
- package/lib/module/classes/HMSPeerUpdate.js +1 -1
- package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
- package/lib/module/classes/HMSPeersCache.js +30 -38
- package/lib/module/classes/HMSPeersCache.js.map +1 -1
- package/lib/module/classes/HMSRTMPConfig.js.map +1 -1
- package/lib/module/classes/HMSRemotePeer.js.map +1 -1
- package/lib/module/classes/HMSSDK.js +30 -30
- package/lib/module/classes/HMSSDK.js.map +1 -1
- package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +138 -0
- package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -0
- package/lib/module/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +4 -0
- package/lib/module/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -0
- package/lib/module/components/HMSHLSPlayer/hooks.js +56 -0
- package/lib/module/components/HMSHLSPlayer/hooks.js.map +1 -0
- package/lib/module/components/HMSHLSPlayer/index.js +3 -0
- package/lib/module/components/HMSHLSPlayer/index.js.map +1 -0
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/stores/hls-player-playback-slice.js +16 -0
- package/lib/module/stores/hls-player-playback-slice.js.map +1 -0
- package/lib/module/stores/hls-player-stats-store.js +29 -0
- package/lib/module/stores/hls-player-stats-store.js.map +1 -0
- package/lib/module/stores/hms-store.js +9 -0
- package/lib/module/stores/hms-store.js.map +1 -0
- package/lib/module/stores/types.js +2 -0
- package/lib/module/stores/types.js.map +1 -0
- package/lib/module/types.js +32 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/classes/HMSEncoder.d.ts +1 -0
- package/lib/typescript/classes/HMSLocalPeer.d.ts +0 -1
- package/lib/typescript/classes/HMSPeer.d.ts +10 -5
- package/lib/typescript/classes/HMSPeersCache.d.ts +17 -2
- package/lib/typescript/classes/HMSRTMPConfig.d.ts +2 -2
- package/lib/typescript/classes/HMSRemotePeer.d.ts +0 -1
- package/lib/typescript/classes/HMSSDK.d.ts +3 -14
- package/lib/typescript/components/HMSHLSPlayer/HMSHLSPlayer.d.ts +21 -0
- package/lib/typescript/components/HMSHLSPlayer/RCTHMSHLSPlayer.d.ts +19 -0
- package/lib/typescript/components/HMSHLSPlayer/hooks.d.ts +17 -0
- package/lib/typescript/components/HMSHLSPlayer/index.d.ts +2 -0
- package/lib/typescript/index.d.ts +3 -0
- package/lib/typescript/stores/hls-player-playback-slice.d.ts +5 -0
- package/lib/typescript/stores/hls-player-stats-store.d.ts +9 -0
- package/lib/typescript/stores/hms-store.d.ts +9 -0
- package/lib/typescript/stores/types.d.ts +25 -0
- package/lib/typescript/types.d.ts +63 -0
- package/package.json +4 -1
- package/react-native-hms.podspec +1 -0
- package/sdk-versions.json +3 -2
- package/src/classes/HMSEncoder.ts +14 -3
- package/src/classes/HMSLocalPeer.ts +0 -1
- package/src/classes/HMSPeer.ts +96 -48
- package/src/classes/HMSPeerUpdate.ts +4 -4
- package/src/classes/HMSPeersCache.ts +53 -40
- package/src/classes/HMSRTMPConfig.ts +2 -2
- package/src/classes/HMSRemotePeer.ts +0 -1
- package/src/classes/HMSSDK.tsx +33 -30
- package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +235 -0
- package/src/components/HMSHLSPlayer/RCTHMSHLSPlayer.ts +38 -0
- package/src/components/HMSHLSPlayer/hooks.ts +100 -0
- package/src/components/HMSHLSPlayer/index.ts +9 -0
- package/src/index.ts +8 -0
- package/src/stores/hls-player-playback-slice.ts +25 -0
- package/src/stores/hls-player-stats-store.ts +37 -0
- package/src/stores/hms-store.ts +11 -0
- package/src/stores/types.ts +49 -0
- package/src/types.ts +119 -0
- package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/6.9/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/checksums/checksums.lock +0 -0
- package/android/.gradle/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/.idea/compiler.xml +0 -6
- package/android/.idea/gradle.xml +0 -18
- package/android/.idea/jarRepositories.xml +0 -50
- package/android/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml +0 -11
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_1_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_1_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml +0 -11
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml +0 -11
- package/android/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_1_3_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_core_core_1_7_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_4_0.xml +0 -11
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_4_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_tracing_tracing_1_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_0_3_0_aar.xml +0 -14
- package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_71_0_rc_0_debug_aar.xml +0 -14
- package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_4.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_4.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_4_aar.xml +0 -14
- package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +0 -13
- package/android/.idea/libraries/Gradle__com_github_100mslive_android_sdk_lib_2_5_1_aar.xml +0 -10
- package/android/.idea/libraries/Gradle__com_github_100mslive_webrtc_m104_hms_1_3_aar.xml +0 -10
- package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_2.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_2.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +0 -13
- package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_6_0.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_6_0.xml +0 -13
- package/android/.idea/misc.xml +0 -9
- package/android/.idea/modules/android.androidTest.iml +0 -203
- package/android/.idea/modules/android.iml +0 -40
- package/android/.idea/modules/android.main.iml +0 -199
- package/android/.idea/modules/android.unitTest.iml +0 -197
- package/android/.idea/modules.xml +0 -11
- package/android/.idea/sonarlint/issuestore/3/c/3c46088b6add3088181589d8ed726652742b6221 +0 -5
- package/android/.idea/sonarlint/issuestore/a/8/a8c9f5ddd88723818e51ae3cf8693d02355a8691 +0 -0
- package/android/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 +0 -0
- package/android/.idea/sonarlint/issuestore/index.pb +0 -7
- package/android/.idea/vcs.xml +0 -6
package/src/classes/HMSSDK.tsx
CHANGED
|
@@ -1002,6 +1002,7 @@ export class HMSSDK {
|
|
|
1002
1002
|
};
|
|
1003
1003
|
|
|
1004
1004
|
/**
|
|
1005
|
+
* Android Only
|
|
1005
1006
|
* - This wrapper function used to switch output to device other than the default, currently available only for android.
|
|
1006
1007
|
*
|
|
1007
1008
|
* checkout {@link https://www.100ms.live/docs/react-native/v2/features/audio-output-routing#switch-audio-focus-to-another-device} for more info
|
|
@@ -1022,6 +1023,19 @@ export class HMSSDK {
|
|
|
1022
1023
|
}
|
|
1023
1024
|
};
|
|
1024
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
|
+
|
|
1025
1039
|
/**
|
|
1026
1040
|
* - This wrapper function used to change Audio Mode manually, currently available only for android.
|
|
1027
1041
|
*
|
|
@@ -1067,36 +1081,6 @@ export class HMSSDK {
|
|
|
1067
1081
|
}
|
|
1068
1082
|
};
|
|
1069
1083
|
|
|
1070
|
-
/**
|
|
1071
|
-
* @deprecated Older SessionMetaData APIs has been deprecated in favour of newer Session Store APIs.
|
|
1072
|
-
* You can subscribe to `ON_SESSION_STORE_AVAILABLE` event to get notified when the `HMSSessionStore`
|
|
1073
|
-
* is available and use `set` method on `HMSSessionStore` instance
|
|
1074
|
-
* checkout {@link https://www.100ms.live/docs/react-native/v2/how-to-guides/}
|
|
1075
|
-
*/
|
|
1076
|
-
setSessionMetaData = async (sessionMetaData: string | null) => {
|
|
1077
|
-
logger?.verbose('#Function setSessionMetaData', {
|
|
1078
|
-
id: this.id,
|
|
1079
|
-
sessionMetaData,
|
|
1080
|
-
});
|
|
1081
|
-
return await HMSManager.setSessionMetaData({
|
|
1082
|
-
id: this.id,
|
|
1083
|
-
sessionMetaData,
|
|
1084
|
-
});
|
|
1085
|
-
};
|
|
1086
|
-
|
|
1087
|
-
/**
|
|
1088
|
-
* @deprecated Older SessionMetaData APIs has been deprecated in favour of newer Session Store APIs.
|
|
1089
|
-
* You can subscribe to `ON_SESSION_STORE_AVAILABLE` event to get notified when the `HMSSessionStore`
|
|
1090
|
-
* is available and use `get` or `addKeyChangeListener` method on `HMSSessionStore` instance
|
|
1091
|
-
* checkout {@link https://www.100ms.live/docs/react-native/v2/how-to-guides/}
|
|
1092
|
-
*/
|
|
1093
|
-
getSessionMetaData = async () => {
|
|
1094
|
-
logger?.verbose('#Function getSessionMetaData', {
|
|
1095
|
-
id: this.id,
|
|
1096
|
-
});
|
|
1097
|
-
return await HMSManager.getSessionMetaData({ id: this.id });
|
|
1098
|
-
};
|
|
1099
|
-
|
|
1100
1084
|
getRemoteVideoTrackFromTrackId = async (trackId: string) => {
|
|
1101
1085
|
logger?.verbose('#Function getRemoteVideoTrackFromTrackId', {
|
|
1102
1086
|
id: this.id,
|
|
@@ -1125,6 +1109,25 @@ export class HMSSDK {
|
|
|
1125
1109
|
return HMSEncoder.encodeHmsRemoteAudioTrack(remoteAudioTrackData, this.id);
|
|
1126
1110
|
};
|
|
1127
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
|
+
|
|
1128
1131
|
/**
|
|
1129
1132
|
* - This is a prototype event listener that takes action and listens for updates related to that particular action
|
|
1130
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');
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { DependencyList, useEffect } from 'react';
|
|
2
|
+
import { shallow } from 'zustand/shallow';
|
|
3
|
+
|
|
4
|
+
import { useHMSHLSPlayerStatsStore } from '../../stores/hls-player-stats-store';
|
|
5
|
+
import { useHMSStore } from '../../stores/hms-store';
|
|
6
|
+
import type { HMSHLSPlayerStatsUpdateEventData } from '../../types';
|
|
7
|
+
import type {
|
|
8
|
+
HMSHLSPlayerCue,
|
|
9
|
+
HMSHLSPlayerPlaybackError,
|
|
10
|
+
HMSHLSPlayerStatsError,
|
|
11
|
+
} from '../../stores/types';
|
|
12
|
+
|
|
13
|
+
// use latest state (with component rerender)
|
|
14
|
+
|
|
15
|
+
export const useHMSHLSPlayerPlaybackState = () => {
|
|
16
|
+
return useHMSStore((state) => state.playbackState);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const useHMSHLSPlayerStats = () => {
|
|
20
|
+
return useHMSHLSPlayerStatsStore(
|
|
21
|
+
(state) => ({
|
|
22
|
+
stats: state.stats,
|
|
23
|
+
error: state.error,
|
|
24
|
+
}),
|
|
25
|
+
shallow
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const useHMSHLSPlayerStat = <
|
|
30
|
+
T extends keyof HMSHLSPlayerStatsUpdateEventData
|
|
31
|
+
>(
|
|
32
|
+
stat: T
|
|
33
|
+
) => {
|
|
34
|
+
return useHMSHLSPlayerStatsStore((state) => state.stats[stat]);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// // The distance of current playback position from the live edge of HLS stream
|
|
38
|
+
// export const useIsHLSStreamLive = (liveOffsetMillis: number = 1000) => {
|
|
39
|
+
// return useHMSHLSPlayerStatsStore((state) => state.stats.distanceFromLive < liveOffsetMillis);
|
|
40
|
+
// }
|
|
41
|
+
|
|
42
|
+
// get latest state (without component rerender)
|
|
43
|
+
|
|
44
|
+
export const useHMSHLSPlayerStatsError = (
|
|
45
|
+
callback: (error: NonNullable<HMSHLSPlayerStatsError>) => void,
|
|
46
|
+
deps: DependencyList
|
|
47
|
+
) => {
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
return useHMSHLSPlayerStatsStore.subscribe(
|
|
50
|
+
(state) => state.error,
|
|
51
|
+
(data) => {
|
|
52
|
+
if (data) callback(data);
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
}, deps);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const useHMSHLSPlayerPlaybackError = (
|
|
59
|
+
callback: (error: NonNullable<HMSHLSPlayerPlaybackError>) => void,
|
|
60
|
+
deps: DependencyList
|
|
61
|
+
) => {
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
return useHMSStore.subscribe(
|
|
64
|
+
(state) => state.error,
|
|
65
|
+
(data) => {
|
|
66
|
+
if (data) callback(data);
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
}, deps);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const useHMSHLSPlayerCue = (
|
|
73
|
+
callback: (error: NonNullable<HMSHLSPlayerCue>) => void,
|
|
74
|
+
deps: DependencyList
|
|
75
|
+
) => {
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
return useHMSStore.subscribe(
|
|
78
|
+
(state) => state.cue,
|
|
79
|
+
(data) => {
|
|
80
|
+
if (data) callback(data);
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
}, deps);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
// state setters
|
|
87
|
+
|
|
88
|
+
export const setHMSHLSPlayerPlaybackState =
|
|
89
|
+
useHMSStore.getState().setPlaybackState;
|
|
90
|
+
|
|
91
|
+
export const setHMSHLSPlayerCue = useHMSStore.getState().setCue;
|
|
92
|
+
|
|
93
|
+
export const setHMSHLSPlayerPlaybackError =
|
|
94
|
+
useHMSStore.getState().setPlaybackError;
|
|
95
|
+
|
|
96
|
+
export const setHMSHLSPlayerStats =
|
|
97
|
+
useHMSHLSPlayerStatsStore.getState().changeStats;
|
|
98
|
+
|
|
99
|
+
export const setHMSHLSPlayerStatsError =
|
|
100
|
+
useHMSHLSPlayerStatsStore.getState().setError;
|
package/src/index.ts
CHANGED
|
@@ -88,4 +88,12 @@ export type {
|
|
|
88
88
|
export type { HmsViewComponent as HMSView } from './classes/HmsView';
|
|
89
89
|
|
|
90
90
|
import { HMSSDK as HmsManager } from './classes/HMSSDK';
|
|
91
|
+
|
|
92
|
+
// 100ms Components
|
|
93
|
+
export * from './components/HMSHLSPlayer';
|
|
94
|
+
|
|
95
|
+
// 100ms types
|
|
96
|
+
export * from './types';
|
|
97
|
+
export * from './stores/types';
|
|
98
|
+
|
|
91
99
|
export default HmsManager;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { StateCreator } from 'zustand';
|
|
2
|
+
import { HMSHLSPlayerPlaybackState } from '../types';
|
|
3
|
+
import type {
|
|
4
|
+
HMSHLSPlayerPlaybackCue,
|
|
5
|
+
HMSHLSPlayerPlaybackError,
|
|
6
|
+
HMSHLSPlayerPlaybackSlice,
|
|
7
|
+
HMSStore,
|
|
8
|
+
} from './types';
|
|
9
|
+
|
|
10
|
+
export const createHMSHLSPlayerPlaybackSlice: StateCreator<
|
|
11
|
+
HMSStore,
|
|
12
|
+
[],
|
|
13
|
+
[],
|
|
14
|
+
HMSHLSPlayerPlaybackSlice
|
|
15
|
+
> = (set) => ({
|
|
16
|
+
cue: undefined,
|
|
17
|
+
setCue: (cue: HMSHLSPlayerPlaybackCue) => set({ cue }),
|
|
18
|
+
|
|
19
|
+
playbackState: HMSHLSPlayerPlaybackState.UNKNOWN,
|
|
20
|
+
setPlaybackState: (playbackState: HMSHLSPlayerPlaybackState) =>
|
|
21
|
+
set({ playbackState }),
|
|
22
|
+
|
|
23
|
+
error: undefined,
|
|
24
|
+
setPlaybackError: (error: HMSHLSPlayerPlaybackError) => set({ error }),
|
|
25
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
import { subscribeWithSelector } from 'zustand/middleware';
|
|
3
|
+
import type {
|
|
4
|
+
HMSHLSPlayerStats,
|
|
5
|
+
HMSHLSPlayerStatsError,
|
|
6
|
+
HMSHLSPlayerStatsStore,
|
|
7
|
+
} from './types';
|
|
8
|
+
|
|
9
|
+
export const useHMSHLSPlayerStatsStore = create<HMSHLSPlayerStatsStore>()(
|
|
10
|
+
subscribeWithSelector((set) => ({
|
|
11
|
+
// Handle Stats
|
|
12
|
+
stats: {
|
|
13
|
+
// bandwidth
|
|
14
|
+
bandWidthEstimate: 0,
|
|
15
|
+
totalBytesLoaded: 0,
|
|
16
|
+
|
|
17
|
+
// bufferedDuration
|
|
18
|
+
bufferedDuration: 0,
|
|
19
|
+
|
|
20
|
+
// distanceFromLive
|
|
21
|
+
distanceFromLive: 0,
|
|
22
|
+
|
|
23
|
+
// frameInfo
|
|
24
|
+
droppedFrameCount: 0,
|
|
25
|
+
|
|
26
|
+
// videoInfo
|
|
27
|
+
averageBitrate: 0,
|
|
28
|
+
videoHeight: 0,
|
|
29
|
+
videoWidth: 0,
|
|
30
|
+
},
|
|
31
|
+
changeStats: (stats: HMSHLSPlayerStats) => set({ stats }),
|
|
32
|
+
|
|
33
|
+
// Handle Stats Error
|
|
34
|
+
error: undefined,
|
|
35
|
+
setError: (error: HMSHLSPlayerStatsError) => set({ error }),
|
|
36
|
+
}))
|
|
37
|
+
);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
import { subscribeWithSelector } from 'zustand/middleware';
|
|
3
|
+
|
|
4
|
+
import { createHMSHLSPlayerPlaybackSlice } from './hls-player-playback-slice';
|
|
5
|
+
import type { HMSStore } from './types';
|
|
6
|
+
|
|
7
|
+
export const useHMSStore = create<HMSStore>()(
|
|
8
|
+
subscribeWithSelector((...a) => ({
|
|
9
|
+
...createHMSHLSPlayerPlaybackSlice(...a),
|
|
10
|
+
}))
|
|
11
|
+
);
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Stores
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
HMSHLSPlayerPlaybackState,
|
|
5
|
+
HMSHLSPlayerPlaybackCueEventData,
|
|
6
|
+
HMSHLSPlayerPlaybackFailureEventData,
|
|
7
|
+
HMSHLSPlayerStatsErrorEventData,
|
|
8
|
+
HMSHLSPlayerStatsUpdateEventData,
|
|
9
|
+
} from '../types';
|
|
10
|
+
|
|
11
|
+
export type HMSStore = HMSHLSPlayerPlaybackSlice;
|
|
12
|
+
export type HMSHLSPlayerStatsStore = HMSHLSPlayerStatsSlice;
|
|
13
|
+
|
|
14
|
+
// HLS Player Playback Slice
|
|
15
|
+
|
|
16
|
+
export interface HMSHLSPlayerPlaybackCue
|
|
17
|
+
extends Omit<HMSHLSPlayerPlaybackCueEventData, 'endDate' | 'startDate'> {
|
|
18
|
+
endDate?: Date;
|
|
19
|
+
startDate: Date;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type HMSHLSPlayerCue = HMSHLSPlayerPlaybackCue | undefined;
|
|
23
|
+
|
|
24
|
+
export type HMSHLSPlayerPlaybackError =
|
|
25
|
+
| HMSHLSPlayerPlaybackFailureEventData['error']
|
|
26
|
+
| undefined;
|
|
27
|
+
|
|
28
|
+
export interface HMSHLSPlayerPlaybackSlice {
|
|
29
|
+
cue: HMSHLSPlayerCue;
|
|
30
|
+
playbackState: HMSHLSPlayerPlaybackState;
|
|
31
|
+
error: HMSHLSPlayerPlaybackError;
|
|
32
|
+
setCue(cue: HMSHLSPlayerPlaybackCue): void;
|
|
33
|
+
setPlaybackState(playbackState: HMSHLSPlayerPlaybackState): void;
|
|
34
|
+
setPlaybackError(error: HMSHLSPlayerPlaybackError): void;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// HLS Player Stats Slice
|
|
38
|
+
|
|
39
|
+
export type HMSHLSPlayerStats = HMSHLSPlayerStatsUpdateEventData;
|
|
40
|
+
export type HMSHLSPlayerStatsError =
|
|
41
|
+
| HMSHLSPlayerStatsErrorEventData
|
|
42
|
+
| undefined;
|
|
43
|
+
|
|
44
|
+
export interface HMSHLSPlayerStatsSlice {
|
|
45
|
+
stats: HMSHLSPlayerStats;
|
|
46
|
+
error: HMSHLSPlayerStatsError | undefined;
|
|
47
|
+
changeStats(stats: HMSHLSPlayerStats): void;
|
|
48
|
+
setError(error: HMSHLSPlayerStatsError): void;
|
|
49
|
+
}
|