@100mslive/react-native-hms 0.8.4 → 0.9.2

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 (201) hide show
  1. package/README.md +247 -26
  2. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  3. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  4. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  5. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  6. package/android/.gradle/checksums/checksums.lock +0 -0
  7. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  8. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  9. package/android/.idea/gradle.xml +13 -0
  10. package/android/.idea/misc.xml +9 -0
  11. package/android/.idea/modules/android.iml +18 -0
  12. package/android/.idea/modules.xml +8 -0
  13. package/android/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 +0 -0
  14. package/android/.idea/sonarlint/issuestore/index.pb +3 -0
  15. package/android/.idea/vcs.xml +6 -0
  16. package/android/build.gradle +4 -2
  17. package/android/local.properties +8 -0
  18. package/android/src/main/java/com/reactnativehmssdk/HmsDecoder.kt +67 -5
  19. package/android/src/main/java/com/reactnativehmssdk/HmsHelper.kt +67 -64
  20. package/android/src/main/java/com/reactnativehmssdk/HmsModule.kt +97 -6
  21. package/android/src/main/java/com/reactnativehmssdk/HmsSDK.kt +302 -118
  22. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +77 -0
  23. package/android/src/main/java/com/reactnativehmssdk/HmsView.kt +28 -3
  24. package/android/src/main/java/com/reactnativehmssdk/HmssdkViewManager.kt +10 -1
  25. package/android/src/main/res/layout/hms_view.xml +19 -0
  26. package/ios/HmsDecoder.swift +250 -123
  27. package/ios/HmsHelper.swift +70 -38
  28. package/ios/HmsManager.m +11 -3
  29. package/ios/HmsManager.swift +123 -66
  30. package/ios/HmsSDK.swift +384 -195
  31. package/ios/HmsView.swift +50 -68
  32. package/ios/VideoCollectionViewCell.swift +4 -4
  33. package/lib/commonjs/classes/HMSBrowserRecordingState.js +6 -0
  34. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -1
  35. package/lib/commonjs/classes/HMSEncoder.js +180 -3
  36. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  37. package/lib/commonjs/classes/HMSHLSConfig.js +23 -0
  38. package/lib/commonjs/classes/HMSHLSConfig.js.map +1 -0
  39. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js +23 -0
  40. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js.map +1 -0
  41. package/lib/commonjs/classes/HMSHLSRecordingConfig.js +23 -0
  42. package/lib/commonjs/classes/HMSHLSRecordingConfig.js.map +1 -0
  43. package/lib/commonjs/classes/HMSHLSRecordingState.js +29 -0
  44. package/lib/commonjs/classes/HMSHLSRecordingState.js.map +1 -0
  45. package/lib/commonjs/classes/HMSHLSStreamingState.js +23 -0
  46. package/lib/commonjs/classes/HMSHLSStreamingState.js.map +1 -0
  47. package/lib/commonjs/classes/HMSHLSVariant.js +29 -0
  48. package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -0
  49. package/lib/commonjs/classes/HMSLocalAudioStats.js +26 -0
  50. package/lib/commonjs/classes/HMSLocalAudioStats.js.map +1 -0
  51. package/lib/commonjs/classes/HMSLocalVideoStats.js +32 -0
  52. package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -0
  53. package/lib/commonjs/classes/HMSLogger.js +48 -21
  54. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  55. package/lib/commonjs/classes/HMSMessage.js +4 -1
  56. package/lib/commonjs/classes/HMSMessage.js.map +1 -1
  57. package/lib/commonjs/classes/HMSMessageRecipient.js +26 -0
  58. package/lib/commonjs/classes/HMSMessageRecipient.js.map +1 -0
  59. package/lib/commonjs/classes/HMSMessageRecipientType.js +15 -0
  60. package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -0
  61. package/lib/commonjs/classes/HMSPeerUpdate.js +1 -7
  62. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  63. package/lib/commonjs/classes/HMSPermissions.js +2 -2
  64. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  65. package/lib/commonjs/classes/HMSRTCStats.js +38 -0
  66. package/lib/commonjs/classes/HMSRTCStats.js.map +1 -0
  67. package/lib/commonjs/classes/HMSRTCStatsReport.js +26 -0
  68. package/lib/commonjs/classes/HMSRTCStatsReport.js.map +1 -0
  69. package/lib/commonjs/classes/HMSRemoteAudioStats.js +32 -0
  70. package/lib/commonjs/classes/HMSRemoteAudioStats.js.map +1 -0
  71. package/lib/commonjs/classes/HMSRemoteVideoStats.js +38 -0
  72. package/lib/commonjs/classes/HMSRemoteVideoStats.js.map +1 -0
  73. package/lib/commonjs/classes/HMSRoom.js +9 -0
  74. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  75. package/lib/commonjs/classes/HMSRoomUpdate.js +7 -0
  76. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  77. package/lib/commonjs/classes/HMSRtmpStreamingState.js +6 -0
  78. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -1
  79. package/lib/commonjs/classes/HMSSDK.js +488 -114
  80. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  81. package/lib/commonjs/classes/HMSServerRecordingState.js +3 -0
  82. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -1
  83. package/lib/commonjs/classes/HMSUpdateListenerActions.js +5 -0
  84. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  85. package/lib/commonjs/classes/HmsView.js +26 -4
  86. package/lib/commonjs/classes/HmsView.js.map +1 -1
  87. package/lib/commonjs/index.js +196 -0
  88. package/lib/commonjs/index.js.map +1 -1
  89. package/lib/module/classes/HMSBrowserRecordingState.js +6 -0
  90. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  91. package/lib/module/classes/HMSEncoder.js +172 -3
  92. package/lib/module/classes/HMSEncoder.js.map +1 -1
  93. package/lib/module/classes/HMSHLSConfig.js +14 -0
  94. package/lib/module/classes/HMSHLSConfig.js.map +1 -0
  95. package/lib/module/classes/HMSHLSMeetingURLVariant.js +14 -0
  96. package/lib/module/classes/HMSHLSMeetingURLVariant.js.map +1 -0
  97. package/lib/module/classes/HMSHLSRecordingConfig.js +14 -0
  98. package/lib/module/classes/HMSHLSRecordingConfig.js.map +1 -0
  99. package/lib/module/classes/HMSHLSRecordingState.js +20 -0
  100. package/lib/module/classes/HMSHLSRecordingState.js.map +1 -0
  101. package/lib/module/classes/HMSHLSStreamingState.js +14 -0
  102. package/lib/module/classes/HMSHLSStreamingState.js.map +1 -0
  103. package/lib/module/classes/HMSHLSVariant.js +20 -0
  104. package/lib/module/classes/HMSHLSVariant.js.map +1 -0
  105. package/lib/module/classes/HMSLocalAudioStats.js +17 -0
  106. package/lib/module/classes/HMSLocalAudioStats.js.map +1 -0
  107. package/lib/module/classes/HMSLocalVideoStats.js +23 -0
  108. package/lib/module/classes/HMSLocalVideoStats.js.map +1 -0
  109. package/lib/module/classes/HMSLogger.js +48 -21
  110. package/lib/module/classes/HMSLogger.js.map +1 -1
  111. package/lib/module/classes/HMSMessage.js +4 -1
  112. package/lib/module/classes/HMSMessage.js.map +1 -1
  113. package/lib/module/classes/HMSMessageRecipient.js +17 -0
  114. package/lib/module/classes/HMSMessageRecipient.js.map +1 -0
  115. package/lib/module/classes/HMSMessageRecipientType.js +8 -0
  116. package/lib/module/classes/HMSMessageRecipientType.js.map +1 -0
  117. package/lib/module/classes/HMSPeerUpdate.js +1 -7
  118. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  119. package/lib/module/classes/HMSPermissions.js +2 -2
  120. package/lib/module/classes/HMSPermissions.js.map +1 -1
  121. package/lib/module/classes/HMSRTCStats.js +29 -0
  122. package/lib/module/classes/HMSRTCStats.js.map +1 -0
  123. package/lib/module/classes/HMSRTCStatsReport.js +17 -0
  124. package/lib/module/classes/HMSRTCStatsReport.js.map +1 -0
  125. package/lib/module/classes/HMSRemoteAudioStats.js +23 -0
  126. package/lib/module/classes/HMSRemoteAudioStats.js.map +1 -0
  127. package/lib/module/classes/HMSRemoteVideoStats.js +29 -0
  128. package/lib/module/classes/HMSRemoteVideoStats.js.map +1 -0
  129. package/lib/module/classes/HMSRoom.js +9 -0
  130. package/lib/module/classes/HMSRoom.js.map +1 -1
  131. package/lib/module/classes/HMSRoomUpdate.js +7 -0
  132. package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
  133. package/lib/module/classes/HMSRtmpStreamingState.js +6 -0
  134. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
  135. package/lib/module/classes/HMSSDK.js +476 -115
  136. package/lib/module/classes/HMSSDK.js.map +1 -1
  137. package/lib/module/classes/HMSServerRecordingState.js +3 -0
  138. package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
  139. package/lib/module/classes/HMSUpdateListenerActions.js +5 -0
  140. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  141. package/lib/module/classes/HmsView.js +23 -4
  142. package/lib/module/classes/HmsView.js.map +1 -1
  143. package/lib/module/index.js +14 -0
  144. package/lib/module/index.js.map +1 -1
  145. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +4 -0
  146. package/lib/typescript/classes/HMSEncoder.d.ts +23 -0
  147. package/lib/typescript/classes/HMSHLSConfig.d.ts +10 -0
  148. package/lib/typescript/classes/HMSHLSMeetingURLVariant.d.ts +8 -0
  149. package/lib/typescript/classes/HMSHLSRecordingConfig.d.ts +8 -0
  150. package/lib/typescript/classes/HMSHLSRecordingState.d.ts +12 -0
  151. package/lib/typescript/classes/HMSHLSStreamingState.d.ts +9 -0
  152. package/lib/typescript/classes/HMSHLSVariant.d.ts +12 -0
  153. package/lib/typescript/classes/HMSLocalAudioStats.d.ts +10 -0
  154. package/lib/typescript/classes/HMSLocalVideoStats.d.ts +15 -0
  155. package/lib/typescript/classes/HMSLogger.d.ts +2 -0
  156. package/lib/typescript/classes/HMSMessage.d.ts +8 -4
  157. package/lib/typescript/classes/HMSMessageRecipient.d.ts +13 -0
  158. package/lib/typescript/classes/HMSMessageRecipientType.d.ts +5 -0
  159. package/lib/typescript/classes/HMSPeerUpdate.d.ts +2 -8
  160. package/lib/typescript/classes/HMSPermissions.d.ts +2 -2
  161. package/lib/typescript/classes/HMSRTCStats.d.ts +18 -0
  162. package/lib/typescript/classes/HMSRTCStatsReport.d.ts +11 -0
  163. package/lib/typescript/classes/HMSRemoteAudioStats.d.ts +14 -0
  164. package/lib/typescript/classes/HMSRemoteVideoStats.d.ts +19 -0
  165. package/lib/typescript/classes/HMSRoom.d.ts +8 -0
  166. package/lib/typescript/classes/HMSRoomUpdate.d.ts +8 -1
  167. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +4 -0
  168. package/lib/typescript/classes/HMSSDK.d.ts +325 -14
  169. package/lib/typescript/classes/HMSServerRecordingState.d.ts +2 -0
  170. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +6 -1
  171. package/lib/typescript/index.d.ts +14 -0
  172. package/package.json +1 -2
  173. package/react-native-hms.podspec +1 -1
  174. package/src/classes/HMSBrowserRecordingState.ts +10 -1
  175. package/src/classes/HMSEncoder.ts +193 -3
  176. package/src/classes/HMSHLSConfig.ts +15 -0
  177. package/src/classes/HMSHLSMeetingURLVariant.ts +9 -0
  178. package/src/classes/HMSHLSRecordingConfig.ts +9 -0
  179. package/src/classes/HMSHLSRecordingState.ts +18 -0
  180. package/src/classes/HMSHLSStreamingState.ts +11 -0
  181. package/src/classes/HMSHLSVariant.ts +18 -0
  182. package/src/classes/HMSLocalAudioStats.ts +15 -0
  183. package/src/classes/HMSLocalVideoStats.ts +23 -0
  184. package/src/classes/HMSLogger.ts +17 -3
  185. package/src/classes/HMSMessage.ts +11 -5
  186. package/src/classes/HMSMessageRecipient.ts +19 -0
  187. package/src/classes/HMSMessageRecipientType.ts +5 -0
  188. package/src/classes/HMSPeerUpdate.ts +1 -7
  189. package/src/classes/HMSPermissions.ts +3 -3
  190. package/src/classes/HMSRTCStats.ts +27 -0
  191. package/src/classes/HMSRTCStatsReport.ts +17 -0
  192. package/src/classes/HMSRemoteAudioStats.ts +21 -0
  193. package/src/classes/HMSRemoteVideoStats.ts +29 -0
  194. package/src/classes/HMSRoom.ts +11 -0
  195. package/src/classes/HMSRoomUpdate.ts +7 -0
  196. package/src/classes/HMSRtmpStreamingState.ts +10 -1
  197. package/src/classes/HMSSDK.tsx +618 -30
  198. package/src/classes/HMSServerRecordingState.ts +7 -1
  199. package/src/classes/HMSUpdateListenerActions.ts +5 -0
  200. package/src/classes/HmsView.tsx +32 -4
  201. package/src/index.ts +14 -0
@@ -0,0 +1,77 @@
1
+ package com.reactnativehmssdk
2
+
3
+ import android.app.Activity
4
+ import android.content.Context
5
+ import android.content.Intent
6
+ import android.media.projection.MediaProjectionManager
7
+ import android.os.Bundle
8
+ import androidx.activity.ComponentActivity
9
+ import androidx.activity.result.ActivityResultLauncher
10
+ import androidx.activity.result.contract.ActivityResultContracts
11
+ import com.facebook.react.bridge.Arguments
12
+ import com.facebook.react.bridge.WritableMap
13
+ import live.hms.video.error.HMSException
14
+ import live.hms.video.sdk.HMSActionResultListener
15
+
16
+ class HmsScreenshareActivity : ComponentActivity() {
17
+ private var resultLauncher: ActivityResultLauncher<Intent> =
18
+ this.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
19
+ if (result.resultCode == Activity.RESULT_OK) {
20
+ val mediaProjectionPermissionResultData: Intent? = result.data
21
+ val id = intent.getStringExtra("id")
22
+ HmsModule.hmsCollection[id]?.hmsSDK?.startScreenshare(
23
+ object : HMSActionResultListener {
24
+ override fun onError(error: HMSException) {
25
+ finish()
26
+ HmsModule.hmsCollection[id]?.screenshareCallback?.reject(error)
27
+ HmsModule.hmsCollection[id]?.emitHMSError(error)
28
+ }
29
+ override fun onSuccess() {
30
+ HmsModule.hmsCollection[id]?.screenshareCallback?.resolve(
31
+ HmsModule.hmsCollection[id]?.emitHMSSuccess()
32
+ )
33
+ finish()
34
+ }
35
+ },
36
+ mediaProjectionPermissionResultData
37
+ )
38
+ } else {
39
+ val id = intent.getStringExtra("id")
40
+ val data: WritableMap = Arguments.createMap()
41
+ data.putBoolean("success", true)
42
+ data.putString("message", "RESULT_CANCELED")
43
+ HmsModule.hmsCollection[id]?.screenshareCallback?.resolve(data)
44
+ finish()
45
+ }
46
+ }
47
+
48
+ override fun onCreate(savedInstanceState: Bundle?) {
49
+ super.onCreate(savedInstanceState)
50
+ startScreenshare()
51
+ }
52
+
53
+ private fun startScreenshare() {
54
+ val id = intent.getStringExtra("id")
55
+ val isScreenShared = HmsModule.hmsCollection[id]?.hmsSDK?.isScreenShared()
56
+ if (isScreenShared !== null && !isScreenShared) {
57
+ try {
58
+ val mediaProjectionManager =
59
+ getSystemService(Context.MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
60
+ resultLauncher.launch(mediaProjectionManager.createScreenCaptureIntent())
61
+ } catch (e: Exception) {
62
+ println(e)
63
+ }
64
+ } else {
65
+ HmsModule.hmsCollection[id]?.emitHMSError(
66
+ HMSException(
67
+ 103,
68
+ "SCREENSHARE_IS_ALREADY_RUNNING",
69
+ "SCREENSHARE_IS_ALREADY_RUNNING",
70
+ "SCREENSHARE_IS_ALREADY_RUNNING",
71
+ "SCREENSHARE_IS_ALREADY_RUNNING"
72
+ )
73
+ )
74
+ finish()
75
+ }
76
+ }
77
+ }
@@ -1,8 +1,13 @@
1
1
  package com.reactnativehmssdk
2
2
 
3
3
  import android.annotation.SuppressLint
4
+ import android.content.Context
5
+ import android.view.LayoutInflater
4
6
  import android.widget.FrameLayout
7
+ import com.facebook.react.bridge.Arguments
5
8
  import com.facebook.react.bridge.ReactContext
9
+ import com.facebook.react.bridge.WritableMap
10
+ import com.facebook.react.uimanager.events.RCTEventEmitter
6
11
  import live.hms.video.media.tracks.HMSTrackType
7
12
  import live.hms.video.media.tracks.HMSVideoTrack
8
13
  import live.hms.video.utils.SharedEglContext
@@ -14,11 +19,23 @@ class HmsView(context: ReactContext) : FrameLayout(context) {
14
19
  private var surfaceView: SurfaceViewRenderer = SurfaceViewRenderer(context)
15
20
  private var videoTrack: HMSVideoTrack? = null
16
21
  private var localTrack: String? = null
22
+ private var scaleTypeApplied: Boolean = false
23
+ private var currentScaleType: RendererCommon.ScalingType =
24
+ RendererCommon.ScalingType.SCALE_ASPECT_FILL
17
25
 
18
26
  init {
27
+ val inflater = getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
28
+ val view = inflater.inflate(R.layout.hms_view, this)
29
+
30
+ surfaceView = view.findViewById(R.id.surfaceView)
19
31
  surfaceView.setEnableHardwareScaler(true)
20
- surfaceView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT)
21
- addView(surfaceView)
32
+ }
33
+
34
+ private fun onReceiveNativeEvent() {
35
+ val event: WritableMap = Arguments.createMap()
36
+ event.putString("message", "MyMessage")
37
+ val reactContext = context as ReactContext
38
+ reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "topChange", event)
22
39
  }
23
40
 
24
41
  override fun onDetachedFromWindow() {
@@ -31,6 +48,12 @@ class HmsView(context: ReactContext) : FrameLayout(context) {
31
48
  super.onAttachedToWindow()
32
49
  surfaceView.init(SharedEglContext.context, null)
33
50
  videoTrack?.addSink(surfaceView)
51
+ if (!scaleTypeApplied) {
52
+ if (currentScaleType != RendererCommon.ScalingType.SCALE_ASPECT_FILL) {
53
+ onReceiveNativeEvent()
54
+ }
55
+ scaleTypeApplied = true
56
+ }
34
57
  }
35
58
 
36
59
  fun updateScaleType(scaleType: String?) {
@@ -38,14 +61,17 @@ class HmsView(context: ReactContext) : FrameLayout(context) {
38
61
  when (scaleType) {
39
62
  "ASPECT_FIT" -> {
40
63
  surfaceView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT)
64
+ currentScaleType = RendererCommon.ScalingType.SCALE_ASPECT_FIT
41
65
  return
42
66
  }
43
67
  "ASPECT_FILL" -> {
44
68
  surfaceView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL)
69
+ currentScaleType = RendererCommon.ScalingType.SCALE_ASPECT_FILL
45
70
  return
46
71
  }
47
72
  "ASPECT_BALANCED" -> {
48
73
  surfaceView.setScalingType((RendererCommon.ScalingType.SCALE_ASPECT_BALANCED))
74
+ currentScaleType = RendererCommon.ScalingType.SCALE_ASPECT_BALANCED
49
75
  return
50
76
  }
51
77
  else -> {
@@ -62,7 +88,6 @@ class HmsView(context: ReactContext) : FrameLayout(context) {
62
88
  mirror: Boolean?
63
89
  ) {
64
90
  var sdkId = "12345"
65
-
66
91
  if (id != null) {
67
92
  sdkId = id
68
93
  }
@@ -1,6 +1,7 @@
1
1
  package com.reactnativehmssdk
2
2
 
3
3
  import com.facebook.react.bridge.ReadableMap
4
+ import com.facebook.react.common.MapBuilder
4
5
  import com.facebook.react.uimanager.SimpleViewManager
5
6
  import com.facebook.react.uimanager.ThemedReactContext
6
7
  import com.facebook.react.uimanager.annotations.ReactProp
@@ -18,13 +19,21 @@ class HmssdkViewManager : SimpleViewManager<HmsView>() {
18
19
  return HmsView(reactContext)
19
20
  }
20
21
 
22
+ override fun getExportedCustomBubblingEventTypeConstants(): MutableMap<String, Any>? {
23
+ return MapBuilder.builder<String, Any>()
24
+ .put(
25
+ "topChange",
26
+ MapBuilder.of("phasedRegistrationNames", MapBuilder.of("bubbled", "onChange"))
27
+ )
28
+ .build()
29
+ }
30
+
21
31
  @ReactProp(name = "data")
22
32
  fun setData(view: HmsView, data: ReadableMap) {
23
33
  val trackId = data.getString("trackId")
24
34
  // val sink = data.getBoolean("sink")
25
35
  val id = data.getString("id")
26
36
  val mirror = data.getBoolean("mirror")
27
-
28
37
  val hmsCollection = getHms()
29
38
  if (hmsCollection != null) {
30
39
  view.setData(id, trackId, hmsCollection, mirror)
@@ -0,0 +1,19 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
+ xmlns:app="http://schemas.android.com/apk/res-auto"
4
+ xmlns:tools="http://schemas.android.com/tools"
5
+ android:layout_width="match_parent"
6
+ android:layout_height="match_parent"
7
+ android:background="#000">
8
+
9
+ <org.webrtc.SurfaceViewRenderer
10
+ android:id="@+id/surfaceView"
11
+ android:layout_width="wrap_content"
12
+ android:layout_height="wrap_content"
13
+ android:layout_gravity="center"
14
+ app:layout_constraintBottom_toBottomOf="parent"
15
+ app:layout_constraintEnd_toEndOf="parent"
16
+ app:layout_constraintStart_toStartOf="parent"
17
+ app:layout_constraintTop_toTopOf="parent" />
18
+
19
+ </FrameLayout>