@100mslive/react-native-hms 1.5.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/reactnativehmssdk/HMSAudioshareActivity.kt +44 -44
- package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +12 -12
- package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +35 -35
- package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +52 -24
- package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +245 -62
- package/android/src/main/java/com/reactnativehmssdk/HMSSDKViewManager.kt +4 -3
- package/android/src/main/java/com/reactnativehmssdk/HMSView.kt +40 -33
- package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +41 -41
- package/android/src/main/java/com/reactnativehmssdk/PipActionReceiver.kt +2 -2
- package/ios/HMSConstants.swift +3 -1
- package/ios/HMSDecoder.swift +1 -1
- package/ios/HMSHelper.swift +44 -7
- package/ios/HMSManager.m +8 -0
- package/ios/HMSManager.swift +35 -1
- package/ios/HMSRNSDK.swift +268 -38
- package/lib/commonjs/classes/HMSAudioMixerSource.js.map +1 -1
- package/lib/commonjs/classes/HMSAudioTrackSettings.js +14 -0
- package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSEncoder.js +2 -1
- package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
- package/lib/commonjs/classes/HMSIOSAudioMode.js +13 -0
- package/lib/commonjs/classes/HMSIOSAudioMode.js.map +1 -0
- package/lib/commonjs/classes/HMSLocalAudioTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSLocalVideoTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSLogger.js.map +1 -1
- package/lib/commonjs/classes/HMSNativeEventEmitter.js.map +1 -1
- package/lib/commonjs/classes/HMSPeer.js.map +1 -1
- package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
- package/lib/commonjs/classes/HMSRemoteAudioTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSRemoteVideoTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSRoom.js.map +1 -1
- package/lib/commonjs/classes/HMSRoomCache.js.map +1 -1
- package/lib/commonjs/classes/HMSSDK.js +50 -0
- package/lib/commonjs/classes/HMSSDK.js.map +1 -1
- package/lib/commonjs/classes/HMSSessionStore.js +173 -0
- package/lib/commonjs/classes/HMSSessionStore.js.map +1 -0
- package/lib/commonjs/classes/HMSUpdateListenerActions.js +8 -0
- package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
- package/lib/commonjs/classes/HMSVideoTrackSettings.js +5 -0
- package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
- package/lib/commonjs/classes/HmsView.js +19 -29
- package/lib/commonjs/classes/HmsView.js.map +1 -1
- package/lib/commonjs/index.js +12 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/emitter/EventEmitter.js +162 -0
- package/lib/commonjs/utils/emitter/EventEmitter.js.map +1 -0
- package/lib/commonjs/utils/emitter/_EmitterSubscription.js +46 -0
- package/lib/commonjs/utils/emitter/_EmitterSubscription.js.map +1 -0
- package/lib/commonjs/utils/emitter/_EventSubscription.js +36 -0
- package/lib/commonjs/utils/emitter/_EventSubscription.js.map +1 -0
- package/lib/commonjs/utils/emitter/_EventSubscriptionVendor.js +90 -0
- package/lib/commonjs/utils/emitter/_EventSubscriptionVendor.js.map +1 -0
- package/lib/commonjs/utils/index.js +17 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/module/classes/HMSAudioMixerSource.js.map +1 -1
- package/lib/module/classes/HMSAudioTrackSettings.js +14 -0
- package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
- package/lib/module/classes/HMSEncoder.js +2 -1
- package/lib/module/classes/HMSEncoder.js.map +1 -1
- package/lib/module/classes/HMSIOSAudioMode.js +6 -0
- package/lib/module/classes/HMSIOSAudioMode.js.map +1 -0
- package/lib/module/classes/HMSLocalAudioTrack.js.map +1 -1
- package/lib/module/classes/HMSLocalVideoTrack.js.map +1 -1
- package/lib/module/classes/HMSLogger.js.map +1 -1
- package/lib/module/classes/HMSNativeEventEmitter.js.map +1 -1
- package/lib/module/classes/HMSPeer.js.map +1 -1
- package/lib/module/classes/HMSPeersCache.js.map +1 -1
- package/lib/module/classes/HMSRemoteAudioTrack.js.map +1 -1
- package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
- package/lib/module/classes/HMSRoom.js.map +1 -1
- package/lib/module/classes/HMSRoomCache.js.map +1 -1
- package/lib/module/classes/HMSSDK.js +50 -0
- package/lib/module/classes/HMSSDK.js.map +1 -1
- package/lib/module/classes/HMSSessionStore.js +166 -0
- package/lib/module/classes/HMSSessionStore.js.map +1 -0
- package/lib/module/classes/HMSUpdateListenerActions.js +8 -0
- package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
- package/lib/module/classes/HMSVideoTrackSettings.js +5 -0
- package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
- package/lib/module/classes/HmsView.js +21 -31
- package/lib/module/classes/HmsView.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/emitter/EventEmitter.js +151 -0
- package/lib/module/utils/emitter/EventEmitter.js.map +1 -0
- package/lib/module/utils/emitter/_EmitterSubscription.js +39 -0
- package/lib/module/utils/emitter/_EmitterSubscription.js.map +1 -0
- package/lib/module/utils/emitter/_EventSubscription.js +29 -0
- package/lib/module/utils/emitter/_EventSubscription.js.map +1 -0
- package/lib/module/utils/emitter/_EventSubscriptionVendor.js +83 -0
- package/lib/module/utils/emitter/_EventSubscriptionVendor.js.map +1 -0
- package/lib/module/utils/index.js +2 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/typescript/classes/HMSAudioTrackSettings.d.ts +14 -0
- package/lib/typescript/classes/HMSIOSAudioMode.d.ts +4 -0
- package/lib/typescript/classes/HMSSDK.d.ts +16 -0
- package/lib/typescript/classes/HMSSessionStore.d.ts +63 -0
- package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +9 -1
- package/lib/typescript/classes/HMSVideoTrackSettings.d.ts +5 -0
- package/lib/typescript/index.d.ts +2 -0
- package/lib/typescript/utils/emitter/EventEmitter.d.ts +91 -0
- package/lib/typescript/utils/emitter/_EmitterSubscription.d.ts +29 -0
- package/lib/typescript/utils/emitter/_EventSubscription.d.ts +19 -0
- package/lib/typescript/utils/emitter/_EventSubscriptionVendor.d.ts +44 -0
- package/lib/typescript/utils/index.d.ts +1 -0
- package/package.json +21 -2
- package/sdk-versions.json +2 -2
- package/src/classes/HMSAudioTrackSettings.ts +16 -0
- package/src/classes/HMSEncoder.ts +1 -0
- package/src/classes/HMSIOSAudioMode.ts +4 -0
- package/src/classes/HMSSDK.tsx +70 -4
- package/src/classes/HMSSessionStore.ts +209 -0
- package/src/classes/HMSUpdateListenerActions.ts +8 -0
- package/src/classes/HMSVideoTrackSettings.ts +5 -0
- package/src/classes/HmsView.tsx +21 -32
- package/src/index.ts +5 -0
- package/src/utils/emitter/EventEmitter.ts +160 -0
- package/src/utils/emitter/_EmitterSubscription.ts +44 -0
- package/src/utils/emitter/_EventSubscription.ts +28 -0
- package/src/utils/emitter/_EventSubscriptionVendor.ts +89 -0
- package/src/utils/index.ts +1 -0
|
@@ -28,7 +28,7 @@ class HMSSDKViewManager : SimpleViewManager<HMSView>() {
|
|
|
28
28
|
return MapBuilder.builder<String, Any>()
|
|
29
29
|
.put(
|
|
30
30
|
"topChange",
|
|
31
|
-
MapBuilder.of("phasedRegistrationNames", MapBuilder.of("bubbled", "onChange"))
|
|
31
|
+
MapBuilder.of("phasedRegistrationNames", MapBuilder.of("bubbled", "onChange")),
|
|
32
32
|
)
|
|
33
33
|
.build()
|
|
34
34
|
}
|
|
@@ -36,7 +36,7 @@ class HMSSDKViewManager : SimpleViewManager<HMSView>() {
|
|
|
36
36
|
override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any>? {
|
|
37
37
|
return MapBuilder.of(
|
|
38
38
|
"captureFrame",
|
|
39
|
-
MapBuilder.of("registrationName", "onDataReturned")
|
|
39
|
+
MapBuilder.of("registrationName", "onDataReturned"),
|
|
40
40
|
)
|
|
41
41
|
}
|
|
42
42
|
|
|
@@ -64,9 +64,10 @@ class HMSSDKViewManager : SimpleViewManager<HMSView>() {
|
|
|
64
64
|
val trackId = data.getString("trackId")
|
|
65
65
|
val id = data.getString("id")
|
|
66
66
|
val mirror = data.getBoolean("mirror")
|
|
67
|
+
val scaleType = data.getString("scaleType")
|
|
67
68
|
val hmsCollection = getHms()
|
|
68
69
|
if (hmsCollection != null) {
|
|
69
|
-
view.setData(id, trackId, hmsCollection, mirror)
|
|
70
|
+
view.setData(id, trackId, hmsCollection, mirror, scaleType)
|
|
70
71
|
}
|
|
71
72
|
}
|
|
72
73
|
|
|
@@ -3,6 +3,7 @@ package com.reactnativehmssdk
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.content.Context
|
|
5
5
|
import android.os.Build
|
|
6
|
+
import android.util.Log
|
|
6
7
|
import android.view.LayoutInflater
|
|
7
8
|
import android.widget.FrameLayout
|
|
8
9
|
import androidx.annotation.RequiresApi
|
|
@@ -14,61 +15,68 @@ import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
|
14
15
|
import live.hms.video.media.tracks.HMSVideoTrack
|
|
15
16
|
import live.hms.video.utils.HmsUtilities
|
|
16
17
|
import live.hms.videoview.HMSVideoView
|
|
18
|
+
import live.hms.videoview.VideoViewStateChangeListener
|
|
17
19
|
import org.webrtc.RendererCommon
|
|
18
20
|
|
|
19
21
|
@SuppressLint("ViewConstructor")
|
|
20
22
|
class HMSView(context: ReactContext) : FrameLayout(context) {
|
|
21
|
-
private var hmsVideoView: HMSVideoView =
|
|
23
|
+
private var hmsVideoView: HMSVideoView? = null
|
|
22
24
|
private var videoTrack: HMSVideoTrack? = null
|
|
23
|
-
private var scaleTypeApplied: Boolean = false
|
|
24
25
|
private var sdkId: String = "12345"
|
|
25
|
-
private var currentScaleType: RendererCommon.ScalingType =
|
|
26
|
-
RendererCommon.ScalingType.SCALE_ASPECT_FILL
|
|
27
26
|
private var disableAutoSimulcastLayerSelect = false
|
|
27
|
+
private var jsCanApplyStyles = false
|
|
28
28
|
|
|
29
29
|
init {
|
|
30
30
|
val inflater = getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
|
31
31
|
val view = inflater.inflate(R.layout.hms_view, this)
|
|
32
32
|
|
|
33
33
|
hmsVideoView = view.findViewById(R.id.hmsVideoView)
|
|
34
|
-
hmsVideoView
|
|
35
|
-
|
|
36
|
-
hmsVideoView
|
|
37
|
-
hmsVideoView
|
|
34
|
+
hmsVideoView?.setEnableHardwareScaler(false)
|
|
35
|
+
|
|
36
|
+
hmsVideoView?.setMirror(false)
|
|
37
|
+
hmsVideoView?.disableAutoSimulcastLayerSelect(disableAutoSimulcastLayerSelect)
|
|
38
|
+
|
|
39
|
+
hmsVideoView?.addVideoViewStateChangeListener(object : VideoViewStateChangeListener {
|
|
40
|
+
override fun onResolutionChange(newWidth: Int, newHeight: Int) {
|
|
41
|
+
super.onResolutionChange(newWidth, newHeight)
|
|
42
|
+
if (!jsCanApplyStyles) {
|
|
43
|
+
val event: WritableMap = Arguments.createMap()
|
|
44
|
+
context.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "topChange", event)
|
|
45
|
+
jsCanApplyStyles = true
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
})
|
|
38
49
|
}
|
|
39
50
|
|
|
40
51
|
@RequiresApi(Build.VERSION_CODES.N)
|
|
41
52
|
fun captureHmsView(args: ReadableArray?) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
private fun onReceiveNativeEvent() {
|
|
46
|
-
val event: WritableMap = Arguments.createMap()
|
|
47
|
-
event.putString("message", "MyMessage")
|
|
48
|
-
val reactContext = context as ReactContext
|
|
49
|
-
reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "topChange", event)
|
|
53
|
+
hmsVideoView?.let {
|
|
54
|
+
HMSHelper.captureSurfaceView(it, sdkId, args, context, id)
|
|
55
|
+
}
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
override fun onDetachedFromWindow() {
|
|
53
59
|
super.onDetachedFromWindow()
|
|
54
|
-
hmsVideoView
|
|
60
|
+
hmsVideoView?.removeTrack()
|
|
55
61
|
}
|
|
56
62
|
|
|
57
63
|
override fun onAttachedToWindow() {
|
|
58
64
|
super.onAttachedToWindow()
|
|
59
|
-
|
|
60
|
-
if
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
|
|
66
|
+
videoTrack?.let { // Safe Call Operator to check if videoTrack is not null
|
|
67
|
+
hmsVideoView?.addTrack(it) // add the videoTrack to the hmsVideoView
|
|
68
|
+
} ?: run { // Elvis Operator to handle the case when videoTrack is null
|
|
69
|
+
Log.e(
|
|
70
|
+
"HMSView",
|
|
71
|
+
"HMSView attached to window, but it's videoTrack is null",
|
|
72
|
+
) // log an error message
|
|
65
73
|
}
|
|
66
74
|
}
|
|
67
75
|
|
|
68
76
|
fun updateZOrderMediaOverlay(setZOrderMediaOverlay: Boolean?) {
|
|
69
77
|
if (setZOrderMediaOverlay != null && setZOrderMediaOverlay) {
|
|
70
78
|
// hmsVideoView.setZOrderOnTop(true);
|
|
71
|
-
hmsVideoView
|
|
79
|
+
hmsVideoView?.setZOrderMediaOverlay(setZOrderMediaOverlay)
|
|
72
80
|
}
|
|
73
81
|
}
|
|
74
82
|
|
|
@@ -76,18 +84,15 @@ class HMSView(context: ReactContext) : FrameLayout(context) {
|
|
|
76
84
|
if (scaleType != null) {
|
|
77
85
|
when (scaleType) {
|
|
78
86
|
"ASPECT_FIT" -> {
|
|
79
|
-
hmsVideoView
|
|
80
|
-
currentScaleType = RendererCommon.ScalingType.SCALE_ASPECT_FIT
|
|
87
|
+
hmsVideoView?.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT)
|
|
81
88
|
return
|
|
82
89
|
}
|
|
83
90
|
"ASPECT_FILL" -> {
|
|
84
|
-
hmsVideoView
|
|
85
|
-
currentScaleType = RendererCommon.ScalingType.SCALE_ASPECT_FILL
|
|
91
|
+
hmsVideoView?.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL)
|
|
86
92
|
return
|
|
87
93
|
}
|
|
88
94
|
"ASPECT_BALANCED" -> {
|
|
89
|
-
hmsVideoView
|
|
90
|
-
currentScaleType = RendererCommon.ScalingType.SCALE_ASPECT_BALANCED
|
|
95
|
+
hmsVideoView?.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_BALANCED)
|
|
91
96
|
return
|
|
92
97
|
}
|
|
93
98
|
else -> {
|
|
@@ -101,7 +106,8 @@ class HMSView(context: ReactContext) : FrameLayout(context) {
|
|
|
101
106
|
id: String?,
|
|
102
107
|
trackId: String?,
|
|
103
108
|
hmsCollection: MutableMap<String, HMSRNSDK>,
|
|
104
|
-
mirror: Boolean
|
|
109
|
+
mirror: Boolean?,
|
|
110
|
+
scaleType: String?,
|
|
105
111
|
) {
|
|
106
112
|
if (id != null) {
|
|
107
113
|
sdkId = id
|
|
@@ -110,8 +116,9 @@ class HMSView(context: ReactContext) : FrameLayout(context) {
|
|
|
110
116
|
|
|
111
117
|
if (trackId != null && hms != null) {
|
|
112
118
|
if (mirror != null) {
|
|
113
|
-
hmsVideoView
|
|
119
|
+
hmsVideoView?.setMirror(mirror)
|
|
114
120
|
}
|
|
121
|
+
updateScaleType(scaleType)
|
|
115
122
|
// TODO: can be optimized here
|
|
116
123
|
videoTrack = hms.getRoom()?.let { HmsUtilities.getVideoTrack(trackId, it) }
|
|
117
124
|
}
|
|
@@ -119,7 +126,7 @@ class HMSView(context: ReactContext) : FrameLayout(context) {
|
|
|
119
126
|
|
|
120
127
|
fun updateAutoSimulcast(autoSimulcast: Boolean?) {
|
|
121
128
|
autoSimulcast?.let {
|
|
122
|
-
hmsVideoView
|
|
129
|
+
hmsVideoView?.disableAutoSimulcastLayerSelect(!it)
|
|
123
130
|
}
|
|
124
131
|
}
|
|
125
132
|
}
|
|
@@ -13,41 +13,41 @@ import live.hms.video.sdk.HMSActionResultListener
|
|
|
13
13
|
|
|
14
14
|
class HmsScreenshareActivity : ComponentActivity() {
|
|
15
15
|
private var resultLauncher: ActivityResultLauncher<Intent> =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
)
|
|
31
|
-
finish()
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
mediaProjectionPermissionResultData
|
|
35
|
-
)
|
|
36
|
-
} else {
|
|
37
|
-
val id = intent.getStringExtra("id")
|
|
38
|
-
val error =
|
|
39
|
-
HMSException(
|
|
40
|
-
103,
|
|
41
|
-
"RESULT_CANCELED",
|
|
42
|
-
"RESULT_CANCELED",
|
|
43
|
-
"RESULT_CANCELED",
|
|
44
|
-
"RESULT_CANCELED"
|
|
16
|
+
this.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
|
|
17
|
+
if (result.resultCode == Activity.RESULT_OK) {
|
|
18
|
+
val mediaProjectionPermissionResultData: Intent? = result.data
|
|
19
|
+
val id = intent.getStringExtra("id")
|
|
20
|
+
HMSManager.hmsCollection[id]?.hmsSDK?.startScreenshare(
|
|
21
|
+
object : HMSActionResultListener {
|
|
22
|
+
override fun onError(error: HMSException) {
|
|
23
|
+
finish()
|
|
24
|
+
HMSManager.hmsCollection[id]?.screenshareCallback?.reject(error)
|
|
25
|
+
HMSManager.hmsCollection[id]?.emitHMSError(error)
|
|
26
|
+
}
|
|
27
|
+
override fun onSuccess() {
|
|
28
|
+
HMSManager.hmsCollection[id]?.screenshareCallback?.resolve(
|
|
29
|
+
HMSManager.hmsCollection[id]?.emitHMSSuccess(),
|
|
45
30
|
)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
31
|
+
finish()
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
mediaProjectionPermissionResultData,
|
|
35
|
+
)
|
|
36
|
+
} else {
|
|
37
|
+
val id = intent.getStringExtra("id")
|
|
38
|
+
val error =
|
|
39
|
+
HMSException(
|
|
40
|
+
103,
|
|
41
|
+
"RESULT_CANCELED",
|
|
42
|
+
"RESULT_CANCELED",
|
|
43
|
+
"RESULT_CANCELED",
|
|
44
|
+
"RESULT_CANCELED",
|
|
45
|
+
)
|
|
46
|
+
HMSManager.hmsCollection[id]?.screenshareCallback?.reject(error)
|
|
47
|
+
HMSManager.hmsCollection[id]?.emitHMSError(error)
|
|
48
|
+
finish()
|
|
50
49
|
}
|
|
50
|
+
}
|
|
51
51
|
|
|
52
52
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
53
53
|
super.onCreate(savedInstanceState)
|
|
@@ -60,20 +60,20 @@ class HmsScreenshareActivity : ComponentActivity() {
|
|
|
60
60
|
if (isScreenShared !== null && !isScreenShared) {
|
|
61
61
|
try {
|
|
62
62
|
val mediaProjectionManager =
|
|
63
|
-
|
|
63
|
+
getSystemService(Context.MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
|
|
64
64
|
resultLauncher.launch(mediaProjectionManager.createScreenCaptureIntent())
|
|
65
65
|
} catch (e: Exception) {
|
|
66
66
|
println(e)
|
|
67
67
|
}
|
|
68
68
|
} else {
|
|
69
69
|
HMSManager.hmsCollection[id]?.emitHMSError(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
70
|
+
HMSException(
|
|
71
|
+
103,
|
|
72
|
+
"SCREENSHARE_IS_ALREADY_RUNNING",
|
|
73
|
+
"SCREENSHARE_IS_ALREADY_RUNNING",
|
|
74
|
+
"SCREENSHARE_IS_ALREADY_RUNNING",
|
|
75
|
+
"SCREENSHARE_IS_ALREADY_RUNNING",
|
|
76
|
+
),
|
|
77
77
|
)
|
|
78
78
|
finish()
|
|
79
79
|
}
|
|
@@ -16,7 +16,7 @@ data class PIPActions(val endMeet: PIPAction, val localAudio: PIPAction, val loc
|
|
|
16
16
|
class PipActionReceiver(
|
|
17
17
|
val toggleLocalAudio: () -> Unit,
|
|
18
18
|
val toggleLocalVideo: () -> Unit,
|
|
19
|
-
val endMeeting: () -> Unit
|
|
19
|
+
val endMeeting: () -> Unit,
|
|
20
20
|
) : BroadcastReceiver() {
|
|
21
21
|
companion object {
|
|
22
22
|
var sdkIdForPIP: String? = null
|
|
@@ -25,7 +25,7 @@ class PipActionReceiver(
|
|
|
25
25
|
val PIPActions = PIPActions(
|
|
26
26
|
endMeet = PIPAction(title = "End", description = "End Meeting", requestCode = 346),
|
|
27
27
|
localAudio = PIPAction(title = "Mic", description = "Toggle Mic", requestCode = 344),
|
|
28
|
-
localVideo = PIPAction(title = "Camera", description = "Toggle Camera", requestCode = 345)
|
|
28
|
+
localVideo = PIPAction(title = "Camera", description = "Toggle Camera", requestCode = 345),
|
|
29
29
|
)
|
|
30
30
|
}
|
|
31
31
|
|
package/ios/HMSConstants.swift
CHANGED
|
@@ -16,7 +16,7 @@ struct HMSConstants {
|
|
|
16
16
|
static let ON_PEER_UPDATE = "3"
|
|
17
17
|
static let ON_TRACK_UPDATE = "ON_TRACK_UPDATE"
|
|
18
18
|
static let ON_ROLE_CHANGE_REQUEST = "ON_ROLE_CHANGE_REQUEST"
|
|
19
|
-
static let ON_CHANGE_TRACK_STATE_REQUEST = "ON_CHANGE_TRACK_STATE_REQUEST"
|
|
19
|
+
static let ON_CHANGE_TRACK_STATE_REQUEST = "ON_CHANGE_TRACK_STATE_REQUEST"
|
|
20
20
|
static let ON_REMOVED_FROM_ROOM = "ON_REMOVED_FROM_ROOM"
|
|
21
21
|
static let ON_ERROR = "ON_ERROR"
|
|
22
22
|
static let ON_MESSAGE = "ON_MESSAGE"
|
|
@@ -28,4 +28,6 @@ struct HMSConstants {
|
|
|
28
28
|
static let ON_LOCAL_VIDEO_STATS = "ON_LOCAL_VIDEO_STATS"
|
|
29
29
|
static let ON_REMOTE_AUDIO_STATS = "ON_REMOTE_AUDIO_STATS"
|
|
30
30
|
static let ON_REMOTE_VIDEO_STATS = "ON_REMOTE_VIDEO_STATS"
|
|
31
|
+
static let ON_SESSION_STORE_AVAILABLE = "ON_SESSION_STORE_AVAILABLE"
|
|
32
|
+
static let ON_SESSION_STORE_CHANGED = "ON_SESSION_STORE_CHANGED"
|
|
31
33
|
}
|
package/ios/HMSDecoder.swift
CHANGED
|
@@ -278,7 +278,7 @@ class HMSDecoder: NSObject {
|
|
|
278
278
|
return ["trackId": localVideo.trackId, "source": localVideo.source, "trackDescription": localVideo.trackDescription, "settings": getHmsVideoTrackSettings(localVideo.settings), "isMute": localVideo.isMute(), "type": type, "kind": type]
|
|
279
279
|
}
|
|
280
280
|
|
|
281
|
-
static func getHmsAudioTrackSettings(_ hmsAudioTrackSettings: HMSAudioTrackSettings?) -> [String: Any] {
|
|
281
|
+
static func getHmsAudioTrackSettings(_ hmsAudioTrackSettings: HMSAudioTrackSettings?) -> [String: Any?] {
|
|
282
282
|
|
|
283
283
|
guard let settings = hmsAudioTrackSettings else { return [String: Any]() }
|
|
284
284
|
|
package/ios/HMSHelper.swift
CHANGED
|
@@ -172,15 +172,21 @@ class HMSHelper: NSObject {
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
static func getLocalAudioSettings(_ settings: NSDictionary?, _ hms: HMSSDK?, _ delegate: HMSManager?, _ id: String) -> HMSAudioTrackSettings? {
|
|
175
|
-
|
|
175
|
+
|
|
176
|
+
guard let settings = settings
|
|
177
|
+
else {
|
|
178
|
+
print(#function, "No Local Audio Settings passed.")
|
|
176
179
|
return nil
|
|
177
180
|
}
|
|
178
|
-
|
|
181
|
+
|
|
182
|
+
let initialState = settings.value(forKey: "initialState") as? String
|
|
179
183
|
let initialStateEncoded = HMSHelper.getHMSTrackSettingsInitState(initialState)
|
|
180
184
|
|
|
185
|
+
let audioMode = getAudioMode(from: settings["audioMode"] as? String)
|
|
186
|
+
|
|
181
187
|
if #available(iOS 13.0, *) {
|
|
182
188
|
var audioMixerSourceMap: [String: HMSAudioNode]?
|
|
183
|
-
if let playerNode = settings
|
|
189
|
+
if let playerNode = settings.value(forKey: "audioSource") as? [String] {
|
|
184
190
|
audioMixerSourceMap = [String: HMSAudioNode]()
|
|
185
191
|
for node in playerNode {
|
|
186
192
|
if audioMixerSourceMap?[node] == nil {
|
|
@@ -190,7 +196,7 @@ class HMSHelper: NSObject {
|
|
|
190
196
|
do {
|
|
191
197
|
audioMixerSourceMap?["screen_broadcast_audio_receiver_node"] = try hms?.screenBroadcastAudioReceiverNode()
|
|
192
198
|
} catch {
|
|
193
|
-
delegate?.emitEvent("ON_ERROR", ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
199
|
+
delegate?.emitEvent("ON_ERROR", ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
194
200
|
}
|
|
195
201
|
} else {
|
|
196
202
|
audioMixerSourceMap?[node] = HMSAudioFilePlayerNode()
|
|
@@ -203,15 +209,33 @@ class HMSHelper: NSObject {
|
|
|
203
209
|
do {
|
|
204
210
|
self.audioMixerSourceHashMap = audioMixerSourceMap
|
|
205
211
|
let audioMixerSource = try HMSAudioMixerSource(nodes: audioMixerSourceMap.values.map {$0})
|
|
206
|
-
|
|
212
|
+
|
|
213
|
+
return HMSAudioTrackSettings.build { builder in
|
|
214
|
+
|
|
215
|
+
builder.initialMuteState = initialStateEncoded
|
|
216
|
+
|
|
217
|
+
builder.audioSource = audioMixerSource
|
|
218
|
+
|
|
219
|
+
if let audioMode = audioMode {
|
|
220
|
+
builder.audioMode = audioMode
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
207
224
|
} catch {
|
|
208
|
-
delegate?.emitEvent("ON_ERROR", ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
225
|
+
delegate?.emitEvent("ON_ERROR", ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
209
226
|
return nil
|
|
210
227
|
}
|
|
211
228
|
}
|
|
212
229
|
}
|
|
213
230
|
|
|
214
|
-
return HMSAudioTrackSettings
|
|
231
|
+
return HMSAudioTrackSettings.build { builder in
|
|
232
|
+
|
|
233
|
+
builder.initialMuteState = initialStateEncoded
|
|
234
|
+
|
|
235
|
+
if let audioMode = audioMode {
|
|
236
|
+
builder.audioMode = audioMode
|
|
237
|
+
}
|
|
238
|
+
}
|
|
215
239
|
}
|
|
216
240
|
|
|
217
241
|
static func getAudioMixerSourceMap() -> [String: HMSAudioNode]? {
|
|
@@ -318,4 +342,17 @@ class HMSHelper: NSObject {
|
|
|
318
342
|
}
|
|
319
343
|
return nil
|
|
320
344
|
}
|
|
345
|
+
|
|
346
|
+
private static func getAudioMode(from mode: String?) -> HMSAudioMode? {
|
|
347
|
+
switch mode {
|
|
348
|
+
case "voice":
|
|
349
|
+
return .voice
|
|
350
|
+
|
|
351
|
+
case "music":
|
|
352
|
+
return .music
|
|
353
|
+
|
|
354
|
+
default:
|
|
355
|
+
return nil
|
|
356
|
+
}
|
|
357
|
+
}
|
|
321
358
|
}
|
package/ios/HMSManager.m
CHANGED
|
@@ -72,4 +72,12 @@ RCT_EXTERN_METHOD(setVideoTrackLayer: (NSDictionary) data :(RCTPromiseResolveBlo
|
|
|
72
72
|
#pragma mark - Advanced Camera Controls
|
|
73
73
|
|
|
74
74
|
RCT_EXTERN_METHOD(captureImageAtMaxSupportedResolution: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
75
|
+
|
|
76
|
+
#pragma mark - Session Store
|
|
77
|
+
|
|
78
|
+
RCT_EXTERN_METHOD(getSessionMetadataForKey: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
79
|
+
RCT_EXTERN_METHOD(setSessionMetadataForKey: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
80
|
+
RCT_EXTERN_METHOD(addKeyChangeListener: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
81
|
+
RCT_EXTERN_METHOD(removeKeyChangeListener: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
|
|
82
|
+
|
|
75
83
|
@end
|
package/ios/HMSManager.swift
CHANGED
|
@@ -36,7 +36,7 @@ class HMSManager: RCTEventEmitter {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
override func supportedEvents() -> [String]! {
|
|
39
|
-
return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED]
|
|
39
|
+
return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED, HMSConstants.ON_SESSION_STORE_AVAILABLE, HMSConstants.ON_SESSION_STORE_CHANGED]
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
// MARK: - HMS SDK Delegate Callbacks
|
|
@@ -551,4 +551,38 @@ class HMSManager: RCTEventEmitter {
|
|
|
551
551
|
|
|
552
552
|
hms?.captureImageAtMaxSupportedResolution(data, resolve, reject)
|
|
553
553
|
}
|
|
554
|
+
|
|
555
|
+
// MARK: - Session Store
|
|
556
|
+
|
|
557
|
+
@objc
|
|
558
|
+
func getSessionMetadataForKey(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
559
|
+
|
|
560
|
+
let hms = HMSHelper.getHms(data, hmsCollection)
|
|
561
|
+
|
|
562
|
+
hms?.getSessionMetadataForKey(data, resolve, reject)
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
@objc
|
|
566
|
+
func setSessionMetadataForKey(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
567
|
+
|
|
568
|
+
let hms = HMSHelper.getHms(data, hmsCollection)
|
|
569
|
+
|
|
570
|
+
hms?.setSessionMetadataForKey(data, resolve, reject)
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
@objc
|
|
574
|
+
func addKeyChangeListener(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
575
|
+
|
|
576
|
+
let hms = HMSHelper.getHms(data, hmsCollection)
|
|
577
|
+
|
|
578
|
+
hms?.addKeyChangeListener(data, resolve, reject)
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
@objc
|
|
582
|
+
func removeKeyChangeListener(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
583
|
+
|
|
584
|
+
let hms = HMSHelper.getHms(data, hmsCollection)
|
|
585
|
+
|
|
586
|
+
hms?.removeKeyChangeListener(data, resolve, reject)
|
|
587
|
+
}
|
|
554
588
|
}
|