@100mslive/react-native-hms 1.1.1 → 1.2.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 (101) hide show
  1. package/README.md +145 -340
  2. package/android/build.gradle +1 -1
  3. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +205 -75
  4. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +127 -127
  5. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +153 -115
  6. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +147 -17
  7. package/android/src/main/java/com/reactnativehmssdk/HMSSDKViewManager.kt +7 -7
  8. package/ios/HMSDecoder.swift +205 -129
  9. package/ios/HMSHelper.swift +3 -3
  10. package/ios/HMSManager.m +3 -0
  11. package/ios/HMSManager.swift +22 -1
  12. package/ios/HMSRNSDK.swift +228 -79
  13. package/ios/HMSView.m +2 -0
  14. package/ios/HMSView.swift +35 -3
  15. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/yogesh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  16. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -1
  17. package/lib/commonjs/classes/HMSChangeTrackStateRequest.js.map +1 -1
  18. package/lib/commonjs/classes/HMSEncoder.js +133 -84
  19. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  20. package/lib/commonjs/classes/HMSHLSStreamingState.js.map +1 -1
  21. package/lib/commonjs/classes/HMSLocalVideoTrack.js +0 -2
  22. package/lib/commonjs/classes/HMSLocalVideoTrack.js.map +1 -1
  23. package/lib/commonjs/classes/HMSMessageRecipient.js +1 -1
  24. package/lib/commonjs/classes/HMSMessageRecipient.js.map +1 -1
  25. package/lib/commonjs/classes/HMSNativeEventEmitter.js +106 -0
  26. package/lib/commonjs/classes/HMSNativeEventEmitter.js.map +1 -0
  27. package/lib/commonjs/classes/HMSPeer.js +4 -0
  28. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  29. package/lib/commonjs/classes/HMSPublishSettings.js +0 -6
  30. package/lib/commonjs/classes/HMSPublishSettings.js.map +1 -1
  31. package/lib/commonjs/classes/HMSRole.js +0 -6
  32. package/lib/commonjs/classes/HMSRole.js.map +1 -1
  33. package/lib/commonjs/classes/HMSRoleChangeRequest.js +3 -1
  34. package/lib/commonjs/classes/HMSRoleChangeRequest.js.map +1 -1
  35. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -1
  36. package/lib/commonjs/classes/HMSSDK.js +465 -137
  37. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  38. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -1
  39. package/lib/commonjs/classes/HMSSubscribeSettings.js +0 -2
  40. package/lib/commonjs/classes/HMSSubscribeSettings.js.map +1 -1
  41. package/lib/commonjs/index.js.map +1 -1
  42. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  43. package/lib/module/classes/HMSChangeTrackStateRequest.js.map +1 -1
  44. package/lib/module/classes/HMSEncoder.js +133 -84
  45. package/lib/module/classes/HMSEncoder.js.map +1 -1
  46. package/lib/module/classes/HMSHLSStreamingState.js.map +1 -1
  47. package/lib/module/classes/HMSLocalVideoTrack.js +0 -2
  48. package/lib/module/classes/HMSLocalVideoTrack.js.map +1 -1
  49. package/lib/module/classes/HMSMessageRecipient.js +1 -1
  50. package/lib/module/classes/HMSMessageRecipient.js.map +1 -1
  51. package/lib/module/classes/HMSNativeEventEmitter.js +99 -0
  52. package/lib/module/classes/HMSNativeEventEmitter.js.map +1 -0
  53. package/lib/module/classes/HMSPeer.js +4 -0
  54. package/lib/module/classes/HMSPeer.js.map +1 -1
  55. package/lib/module/classes/HMSPublishSettings.js +0 -6
  56. package/lib/module/classes/HMSPublishSettings.js.map +1 -1
  57. package/lib/module/classes/HMSRole.js +0 -6
  58. package/lib/module/classes/HMSRole.js.map +1 -1
  59. package/lib/module/classes/HMSRoleChangeRequest.js +3 -1
  60. package/lib/module/classes/HMSRoleChangeRequest.js.map +1 -1
  61. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
  62. package/lib/module/classes/HMSSDK.js +466 -138
  63. package/lib/module/classes/HMSSDK.js.map +1 -1
  64. package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
  65. package/lib/module/classes/HMSSubscribeSettings.js +0 -2
  66. package/lib/module/classes/HMSSubscribeSettings.js.map +1 -1
  67. package/lib/module/index.js.map +1 -1
  68. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +4 -4
  69. package/lib/typescript/classes/HMSChangeTrackStateRequest.d.ts +2 -2
  70. package/lib/typescript/classes/HMSEncoder.d.ts +3 -0
  71. package/lib/typescript/classes/HMSHLSStreamingState.d.ts +2 -2
  72. package/lib/typescript/classes/HMSLocalVideoTrack.d.ts +0 -2
  73. package/lib/typescript/classes/HMSMessageRecipient.d.ts +2 -2
  74. package/lib/typescript/classes/HMSNativeEventEmitter.d.ts +13 -0
  75. package/lib/typescript/classes/HMSPublishSettings.d.ts +8 -15
  76. package/lib/typescript/classes/HMSRole.d.ts +0 -6
  77. package/lib/typescript/classes/HMSRoleChangeRequest.d.ts +2 -2
  78. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +4 -4
  79. package/lib/typescript/classes/HMSSDK.d.ts +2 -12
  80. package/lib/typescript/classes/HMSServerRecordingState.d.ts +2 -2
  81. package/lib/typescript/classes/HMSSubscribeSettings.d.ts +0 -2
  82. package/lib/typescript/index.d.ts +1 -0
  83. package/package.json +5 -4
  84. package/react-native-hms.podspec +1 -1
  85. package/sdk-versions.json +3 -2
  86. package/src/classes/HMSBrowserRecordingState.ts +4 -4
  87. package/src/classes/HMSChangeTrackStateRequest.ts +2 -2
  88. package/src/classes/HMSEncoder.ts +186 -99
  89. package/src/classes/HMSHLSStreamingState.ts +2 -2
  90. package/src/classes/HMSLocalVideoTrack.ts +0 -2
  91. package/src/classes/HMSMessageRecipient.ts +3 -3
  92. package/src/classes/HMSNativeEventEmitter.ts +86 -0
  93. package/src/classes/HMSPeer.ts +4 -0
  94. package/src/classes/HMSPublishSettings.ts +8 -18
  95. package/src/classes/HMSRole.ts +0 -9
  96. package/src/classes/HMSRoleChangeRequest.ts +5 -3
  97. package/src/classes/HMSRtmpStreamingState.ts +4 -4
  98. package/src/classes/HMSSDK.tsx +629 -269
  99. package/src/classes/HMSServerRecordingState.ts +2 -2
  100. package/src/classes/HMSSubscribeSettings.ts +1 -7
  101. package/src/index.ts +1 -0
@@ -11,8 +11,6 @@ import android.webkit.URLUtil
11
11
  import androidx.annotation.RequiresApi
12
12
  import com.facebook.react.bridge.*
13
13
  import com.facebook.react.uimanager.events.RCTEventEmitter
14
- import java.io.ByteArrayOutputStream
15
- import java.util.*
16
14
  import live.hms.video.audio.HMSAudioManager
17
15
  import live.hms.video.error.HMSException
18
16
  import live.hms.video.events.AgentType
@@ -27,12 +25,14 @@ import live.hms.video.services.LogAlarmManager
27
25
  import live.hms.video.utils.HMSLogger
28
26
  import live.hms.video.utils.HmsUtilities
29
27
  import org.webrtc.SurfaceViewRenderer
28
+ import java.io.ByteArrayOutputStream
29
+ import java.util.*
30
30
 
31
31
  object HMSHelper {
32
32
 
33
33
  fun areAllRequiredKeysAvailable(
34
- map: ReadableMap?,
35
- requiredKeys: Array<Pair<String, String>>
34
+ map: ReadableMap?,
35
+ requiredKeys: Array<Pair<String, String>>
36
36
  ): Boolean {
37
37
  if (map == null) {
38
38
  return false
@@ -64,8 +64,8 @@ object HMSHelper {
64
64
  }
65
65
 
66
66
  fun getUnavailableRequiredKey(
67
- map: ReadableMap?,
68
- requiredKeys: Array<Pair<String, String>>
67
+ map: ReadableMap?,
68
+ requiredKeys: Array<Pair<String, String>>
69
69
  ): String? {
70
70
  if (map == null) {
71
71
  return "Object_Is_Null"
@@ -111,8 +111,8 @@ object HMSHelper {
111
111
  }
112
112
 
113
113
  fun getRolesFromRoleNames(
114
- targetedRoles: ArrayList<String>?,
115
- roles: List<HMSRole>?
114
+ targetedRoles: ArrayList<String>?,
115
+ roles: List<HMSRole>?
116
116
  ): List<HMSRole> {
117
117
  val encodedRoles: MutableList<HMSRole> = mutableListOf()
118
118
 
@@ -162,10 +162,10 @@ object HMSHelper {
162
162
 
163
163
  fun getFrameworkInfo(data: ReadableMap?): FrameworkInfo? {
164
164
  if (data != null &&
165
- this.areAllRequiredKeysAvailable(
166
- data,
167
- arrayOf(Pair("version", "String"), Pair("sdkVersion", "String"))
168
- )
165
+ this.areAllRequiredKeysAvailable(
166
+ data,
167
+ arrayOf(Pair("version", "String"), Pair("sdkVersion", "String"))
168
+ )
169
169
  ) {
170
170
  val version = data.getString("version") as String
171
171
  val sdkVersion = data.getString("sdkVersion") as String
@@ -176,14 +176,14 @@ object HMSHelper {
176
176
 
177
177
  fun getLogSettings(data: ReadableMap?): HMSLogSettings? {
178
178
  if (data != null &&
179
- this.areAllRequiredKeysAvailable(
180
- data,
181
- arrayOf(
182
- Pair("level", "String"),
183
- Pair("maxDirSizeInBytes", "String"),
184
- Pair("isLogStorageEnabled", "Boolean")
185
- )
179
+ this.areAllRequiredKeysAvailable(
180
+ data,
181
+ arrayOf(
182
+ Pair("level", "String"),
183
+ Pair("maxDirSizeInBytes", "String"),
184
+ Pair("isLogStorageEnabled", "Boolean")
186
185
  )
186
+ )
187
187
  ) {
188
188
  val level = getLogLevel(data.getString("level"))
189
189
  val maxDirSizeInBytes = getLogAlarmManager(data.getString("maxDirSizeInBytes"))
@@ -358,7 +358,7 @@ object HMSHelper {
358
358
  var hlsMeetingUrlVariant: List<HMSHLSMeetingURLVariant>? = null
359
359
  if (areAllRequiredKeysAvailable(data, arrayOf(Pair("meetingURLVariants", "Array")))) {
360
360
  val meetingURLVariants =
361
- data.getArray("meetingURLVariants")?.toArrayList() as? ArrayList<HashMap<String, String>>
361
+ data.getArray("meetingURLVariants")?.toArrayList() as? ArrayList<HashMap<String, String>>
362
362
  hlsMeetingUrlVariant = getHMSHLSMeetingURLVariants(meetingURLVariants)
363
363
  }
364
364
  var hlsRecordingConfig: HMSHlsRecordingConfig? = null
@@ -370,7 +370,7 @@ object HMSHelper {
370
370
  }
371
371
 
372
372
  private fun getHMSHLSMeetingURLVariants(
373
- hmsMeetingURLVariants: ArrayList<HashMap<String, String>>?
373
+ hmsMeetingURLVariants: ArrayList<HashMap<String, String>>?
374
374
  ): List<HMSHLSMeetingURLVariant> {
375
375
  val meetingURLVariants = mutableListOf<HMSHLSMeetingURLVariant>()
376
376
  if (hmsMeetingURLVariants !== null) {
@@ -387,16 +387,16 @@ object HMSHelper {
387
387
  var singleFilePerLayer = false
388
388
  var videoOnDemand = false
389
389
  if (areAllRequiredKeysAvailable(
390
- hmsHlsRecordingConfig,
391
- arrayOf(Pair("singleFilePerLayer", "Boolean"))
392
- )
390
+ hmsHlsRecordingConfig,
391
+ arrayOf(Pair("singleFilePerLayer", "Boolean"))
392
+ )
393
393
  ) {
394
394
  singleFilePerLayer = hmsHlsRecordingConfig.getBoolean("singleFilePerLayer")
395
395
  }
396
396
  if (areAllRequiredKeysAvailable(
397
- hmsHlsRecordingConfig,
398
- arrayOf(Pair("videoOnDemand", "Boolean"))
399
- )
397
+ hmsHlsRecordingConfig,
398
+ arrayOf(Pair("videoOnDemand", "Boolean"))
399
+ )
400
400
  ) {
401
401
  videoOnDemand = hmsHlsRecordingConfig.getBoolean("videoOnDemand")
402
402
  }
@@ -406,7 +406,7 @@ object HMSHelper {
406
406
  }
407
407
 
408
408
  private fun getHMSHLSMeetingURLVariant(
409
- hmsMeetingURLVariant: HashMap<String, String>?
409
+ hmsMeetingURLVariant: HashMap<String, String>?
410
410
  ): HMSHLSMeetingURLVariant {
411
411
  var meetingURLVariant = HMSHLSMeetingURLVariant("", "")
412
412
  if (hmsMeetingURLVariant !== null) {
@@ -451,95 +451,95 @@ object HMSHelper {
451
451
 
452
452
  fun getHmsConfig(credentials: ReadableMap): HMSConfig {
453
453
  var config =
454
- HMSConfig(
455
- credentials.getString("username") as String,
456
- credentials.getString("authToken") as String,
457
- )
454
+ HMSConfig(
455
+ credentials.getString("username") as String,
456
+ credentials.getString("authToken") as String
457
+ )
458
458
 
459
459
  when {
460
460
  areAllRequiredKeysAvailable(
461
- credentials,
462
- arrayOf(
463
- Pair("endpoint", "String"),
464
- Pair("metadata", "String"),
465
- Pair("captureNetworkQualityInPreview", "Boolean")
466
- )
461
+ credentials,
462
+ arrayOf(
463
+ Pair("endpoint", "String"),
464
+ Pair("metadata", "String"),
465
+ Pair("captureNetworkQualityInPreview", "Boolean")
466
+ )
467
467
  ) -> {
468
468
  config =
469
- HMSConfig(
470
- credentials.getString("username") as String,
471
- credentials.getString("authToken") as String,
472
- initEndpoint = credentials.getString("endpoint") as String,
473
- metadata = credentials.getString("metadata") as String,
474
- captureNetworkQualityInPreview =
475
- credentials.getBoolean("captureNetworkQualityInPreview"),
476
- )
469
+ HMSConfig(
470
+ credentials.getString("username") as String,
471
+ credentials.getString("authToken") as String,
472
+ initEndpoint = credentials.getString("endpoint") as String,
473
+ metadata = credentials.getString("metadata") as String,
474
+ captureNetworkQualityInPreview =
475
+ credentials.getBoolean("captureNetworkQualityInPreview")
476
+ )
477
477
  }
478
478
  areAllRequiredKeysAvailable(
479
- credentials,
480
- arrayOf(Pair("endpoint", "String"), Pair("metadata", "String"))
479
+ credentials,
480
+ arrayOf(Pair("endpoint", "String"), Pair("metadata", "String"))
481
481
  ) -> {
482
482
  config =
483
- HMSConfig(
484
- credentials.getString("username") as String,
485
- credentials.getString("authToken") as String,
486
- initEndpoint = credentials.getString("endpoint") as String,
487
- metadata = credentials.getString("metadata") as String,
488
- )
483
+ HMSConfig(
484
+ credentials.getString("username") as String,
485
+ credentials.getString("authToken") as String,
486
+ initEndpoint = credentials.getString("endpoint") as String,
487
+ metadata = credentials.getString("metadata") as String
488
+ )
489
489
  }
490
490
  areAllRequiredKeysAvailable(
491
- credentials,
492
- arrayOf(Pair("endpoint", "String"), Pair("captureNetworkQualityInPreview", "Boolean"))
491
+ credentials,
492
+ arrayOf(Pair("endpoint", "String"), Pair("captureNetworkQualityInPreview", "Boolean"))
493
493
  ) -> {
494
494
  config =
495
- HMSConfig(
496
- credentials.getString("username") as String,
497
- credentials.getString("authToken") as String,
498
- initEndpoint = credentials.getString("endpoint") as String,
499
- captureNetworkQualityInPreview =
500
- credentials.getBoolean("captureNetworkQualityInPreview"),
501
- )
495
+ HMSConfig(
496
+ credentials.getString("username") as String,
497
+ credentials.getString("authToken") as String,
498
+ initEndpoint = credentials.getString("endpoint") as String,
499
+ captureNetworkQualityInPreview =
500
+ credentials.getBoolean("captureNetworkQualityInPreview")
501
+ )
502
502
  }
503
503
  areAllRequiredKeysAvailable(
504
- credentials,
505
- arrayOf(Pair("metadata", "String"), Pair("captureNetworkQualityInPreview", "Boolean"))
504
+ credentials,
505
+ arrayOf(Pair("metadata", "String"), Pair("captureNetworkQualityInPreview", "Boolean"))
506
506
  ) -> {
507
507
  config =
508
- HMSConfig(
509
- credentials.getString("username") as String,
510
- credentials.getString("authToken") as String,
511
- metadata = credentials.getString("metadata") as String,
512
- captureNetworkQualityInPreview =
513
- credentials.getBoolean("captureNetworkQualityInPreview"),
514
- )
508
+ HMSConfig(
509
+ credentials.getString("username") as String,
510
+ credentials.getString("authToken") as String,
511
+ metadata = credentials.getString("metadata") as String,
512
+ captureNetworkQualityInPreview =
513
+ credentials.getBoolean("captureNetworkQualityInPreview")
514
+ )
515
515
  }
516
516
  areAllRequiredKeysAvailable(credentials, arrayOf(Pair("endpoint", "String"))) -> {
517
517
  config =
518
- HMSConfig(
519
- credentials.getString("username") as String,
520
- credentials.getString("authToken") as String,
521
- initEndpoint = credentials.getString("endpoint") as String,
522
- )
518
+ HMSConfig(
519
+ credentials.getString("username") as String,
520
+ credentials.getString("authToken") as String,
521
+ initEndpoint = credentials.getString("endpoint") as String
522
+ )
523
523
  }
524
524
  areAllRequiredKeysAvailable(credentials, arrayOf(Pair("metadata", "String"))) -> {
525
525
  config =
526
- HMSConfig(
527
- credentials.getString("username") as String,
528
- credentials.getString("authToken") as String,
529
- metadata = credentials.getString("metadata") as String,
530
- )
526
+ HMSConfig(
527
+ credentials.getString("username") as String,
528
+ credentials.getString("authToken") as String,
529
+ metadata = credentials.getString("metadata") as String
530
+ )
531
531
  }
532
532
  areAllRequiredKeysAvailable(
533
- credentials,
534
- arrayOf(Pair("captureNetworkQualityInPreview", "Boolean"))
533
+ credentials,
534
+ arrayOf(Pair("captureNetworkQualityInPreview", "Boolean"))
535
535
  ) -> {
536
536
  config =
537
- HMSConfig(
538
- credentials.getString("username") as String,
539
- credentials.getString("authToken") as String,
540
- captureNetworkQualityInPreview =
541
- credentials.getBoolean("captureNetworkQualityInPreview")
542
- )
537
+ HMSConfig(
538
+ credentials.getString("username") as String,
539
+ credentials.getString("authToken") as String,
540
+ captureNetworkQualityInPreview =
541
+ credentials.getBoolean("captureNetworkQualityInPreview")
542
+ )
543
543
  }
544
544
  }
545
545
  return config
@@ -547,11 +547,11 @@ object HMSHelper {
547
547
 
548
548
  @RequiresApi(Build.VERSION_CODES.N)
549
549
  fun captureSurfaceView(
550
- surfaceView: SurfaceViewRenderer,
551
- sdkId: String,
552
- args: ReadableArray?,
553
- context: Context,
554
- id: Int
550
+ surfaceView: SurfaceViewRenderer,
551
+ sdkId: String,
552
+ args: ReadableArray?,
553
+ context: Context,
554
+ id: Int
555
555
  ) {
556
556
  val output = Arguments.createMap()
557
557
  if (args != null) {
@@ -562,40 +562,40 @@ object HMSHelper {
562
562
  val reactContext = context as ReactContext
563
563
  try {
564
564
  val bitmap: Bitmap =
565
- Bitmap.createBitmap(surfaceView.width, surfaceView.height, Bitmap.Config.ARGB_8888)
565
+ Bitmap.createBitmap(surfaceView.width, surfaceView.height, Bitmap.Config.ARGB_8888)
566
566
  PixelCopy.request(
567
- surfaceView,
568
- bitmap,
569
- { copyResult ->
570
- if (copyResult == PixelCopy.SUCCESS) {
571
- Log.d("captureSurfaceView", "bitmap: $bitmap")
572
- val byteArrayOutputStream = ByteArrayOutputStream()
573
- bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream)
574
- val byteArray = byteArrayOutputStream.toByteArray()
575
- val encoded: String = Base64.encodeToString(byteArray, Base64.DEFAULT)
576
- Log.d("captureSurfaceView", "Base64: $encoded")
577
- output.putString("result", encoded)
578
- reactContext
579
- .getJSModule(RCTEventEmitter::class.java)
580
- .receiveEvent(id, "captureFrame", output)
581
- } else {
582
- Log.e("captureSurfaceView", "copyResult: $copyResult")
583
- HMSManager.hmsCollection[sdkId]?.emitHMSError(
584
- HMSException(
585
- 103,
586
- copyResult.toString(),
587
- copyResult.toString(),
588
- copyResult.toString(),
589
- copyResult.toString()
590
- )
567
+ surfaceView,
568
+ bitmap,
569
+ { copyResult ->
570
+ if (copyResult == PixelCopy.SUCCESS) {
571
+ Log.d("captureSurfaceView", "bitmap: $bitmap")
572
+ val byteArrayOutputStream = ByteArrayOutputStream()
573
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream)
574
+ val byteArray = byteArrayOutputStream.toByteArray()
575
+ val encoded: String = Base64.encodeToString(byteArray, Base64.DEFAULT)
576
+ Log.d("captureSurfaceView", "Base64: $encoded")
577
+ output.putString("result", encoded)
578
+ reactContext
579
+ .getJSModule(RCTEventEmitter::class.java)
580
+ .receiveEvent(id, "captureFrame", output)
581
+ } else {
582
+ Log.e("captureSurfaceView", "copyResult: $copyResult")
583
+ HMSManager.hmsCollection[sdkId]?.emitHMSError(
584
+ HMSException(
585
+ 103,
586
+ copyResult.toString(),
587
+ copyResult.toString(),
588
+ copyResult.toString(),
589
+ copyResult.toString()
591
590
  )
592
- output.putString("error", copyResult.toString())
593
- reactContext
594
- .getJSModule(RCTEventEmitter::class.java)
595
- .receiveEvent(id, "captureFrame", output)
596
- }
597
- },
598
- Handler()
591
+ )
592
+ output.putString("error", copyResult.toString())
593
+ reactContext
594
+ .getJSModule(RCTEventEmitter::class.java)
595
+ .receiveEvent(id, "captureFrame", output)
596
+ }
597
+ },
598
+ Handler()
599
599
  )
600
600
  } catch (e: Exception) {
601
601
  Log.e("captureSurfaceView", "error: $e")