react_hsbc_teller 2.0.69 → 2.0.71

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.
@@ -46,11 +46,13 @@ import IpadLeaveAudio from '../../assets/mp3/ipad_leave_error.mp3';
46
46
  import IpadLowPowerAudio from '../../assets/mp3/ipad_low_power.mp3';
47
47
  import ipadMediaCloseAudio from '../../assets/mp3/ipad_media_close.mp3';
48
48
  import MediaErrorAudio from '../../assets/mp3/media_error.mp3';
49
+ import startMediaError from '../../assets/mp3/startMedia_error.mp3'
49
50
  import internalJoin from '../../assets/mp3/internalJoin.mp3'
50
51
  import internalLeft from '../../assets/mp3/internalLeft.mp3'
51
52
  import leftMetting from '../../assets/mp3/leftmeeting.mp3'
52
53
  import networkWeakAudio from '../../assets/mp3/networkweak.mp3'
53
54
  import PIPictureClosedAudio from '../../assets/mp3/pip_close.mp3'
55
+ import connectErrorAudio from '../../assets/mp3/connect_error.mp3'
54
56
  import screenSharedIntervalAudio from '../../assets/mp3/share_stop_audio.mp3'
55
57
  import errorPng from '../../assets/img/tooltips2_fail.png'
56
58
  import styled from 'styled-components';
@@ -61,7 +63,7 @@ import MultiModule from '../multiModule/multiModule'//签字、抄录
61
63
  import axios from 'axios';
62
64
  import CryptoJS from "crypto-js";
63
65
 
64
- const SDK_VERISON = '2.0.69'
66
+ const SDK_VERISON = '2.0.71'
65
67
  const IDtypeFront = '请客户在其设备后置摄像头下展示证件正面(如:身份证照片页面)'
66
68
  const IDtypeBack = '请在后置摄像头下展示证件反面(如:身份证国徽页)'
67
69
  const { Option } = Select;
@@ -344,6 +346,14 @@ class Video extends Component {
344
346
  certificateValidityType: true,
345
347
  drawCanvasInterval: null,
346
348
  faceDetectionTimer: null, // 人脸检测定时器
349
+ mediaErrorModalMessage: '',
350
+ transcribeErrorModalVisible: false, // 双录异常
351
+ transcribeErrorCode: '',
352
+ presaleRecordId: '',
353
+ ipadsaleRecordId: '',
354
+ salePresaleRecordId: '',
355
+ supplesalePresaleRecordId: ''
356
+
347
357
  };
348
358
  // eslint-disable-next-line no-undef
349
359
  test_controller = '';
@@ -401,7 +411,7 @@ class Video extends Component {
401
411
  publish_config.video_profile_diy = { width: 640, height: 360, frameRate: 15, bitrate: 400 }
402
412
  publish_config.publish_video_id = 'publish_video1'
403
413
  publish_config.publish_streamId_id = 'publish_streamId1'
404
- publish_config.publish_tag = 'tag1'
414
+ publish_config.publish_tag = 'tag1customer'
405
415
  if (this.props.recordMode == 2) {
406
416
  // 分行模式,只收音 不发布摄像头
407
417
  publish_config.media_type = 2
@@ -555,7 +565,7 @@ class Video extends Component {
555
565
  {
556
566
  publish_video_id: 'publish_video1',
557
567
  publish_streamId_id: 'publish_streamId1',
558
- publish_tag: 'tag1'
568
+ publish_tag: 'tag1customer'
559
569
  },
560
570
  // {
561
571
  // publish_video_id: 'publish_video2',
@@ -624,6 +634,187 @@ class Video extends Component {
624
634
  return data
625
635
  }
626
636
  }
637
+ // 开启音频录制
638
+ enableAudioRecording = (record_business_id, type) => {
639
+ console.log('enableAudioRecording', record_business_id, type)
640
+ // true开启
641
+ console.log(this.props.needPreSale, type == 'presale' && !this.props.needPreSale)
642
+ if(!(type == 'presale' && !this.props.needPreSale)){
643
+ const that = this
644
+ const SCALE = 1.5
645
+ this.rateAll().then((res) => {
646
+ console.log('开启音频录制', res)
647
+ let list = [
648
+ {
649
+ tag: 'projectionWhiteboard',
650
+ xPosition: 0,
651
+ yPosition: 175 * SCALE,
652
+ width: 1280,
653
+ height: 720
654
+ },
655
+ {
656
+ tag: 'tag1customer',
657
+ xPosition: 0,
658
+ yPosition: 0,
659
+ width: 213 * SCALE,
660
+ height: 175 * SCALE
661
+ },
662
+ {
663
+ tag: 'customer1',
664
+ xPosition: 213 * SCALE,
665
+ yPosition: 0,
666
+ width: 213 * SCALE,
667
+ height: 175 * SCALE
668
+ },
669
+ {
670
+ tag: 'customer2',
671
+ xPosition: 426 * SCALE,
672
+ yPosition: 0,
673
+ width: 213 * SCALE,
674
+ height: 175 * SCALE
675
+ },
676
+ {
677
+ tag: 'customer3',
678
+ xPosition: 639 * SCALE,
679
+ yPosition: 0,
680
+ width: 213 * SCALE,
681
+ height: 175 * SCALE
682
+ },
683
+ {
684
+ tag: 'customer4',
685
+ xPosition: 852 * SCALE,
686
+ yPosition: 0,
687
+ width: 213 * SCALE,
688
+ height: 175 * SCALE
689
+ },
690
+ {
691
+ tag: 'customer5',
692
+ xPosition: 1065 * SCALE,
693
+ yPosition: 0,
694
+ width: 213 * SCALE,
695
+ height: 175 * SCALE
696
+ },
697
+ {
698
+ tag: 'customer6',
699
+ xPosition: 1278 * SCALE,
700
+ yPosition: 0,
701
+ width: 213 * SCALE,
702
+ height: 175 * SCALE
703
+ },
704
+ ]
705
+ Array.isArray(res) ?
706
+ res.map((item) => {
707
+ list.push({
708
+ tag: item.tag,
709
+ xPosition: 860 * SCALE,
710
+ yPosition: 235 * SCALE,
711
+ width: (420 * SCALE),
712
+ height: (420 * SCALE)
713
+ })
714
+ }) :
715
+ list.push({
716
+ tag: 'VIDEO_SOURCE_SCREEN',
717
+ xPosition: 860 * SCALE,
718
+ yPosition: 235 * SCALE,
719
+ width: (420 * SCALE),
720
+ height: (420 * SCALE)
721
+ })
722
+ // 开启业务录制的时候type传值,在后面加标识,全局的不加
723
+ const filePath = 'recordId_' + new Date().valueOf() + type;
724
+ const recordParam = {};
725
+ recordParam.width = 1280 * SCALE;
726
+ recordParam.height = 720 * SCALE;
727
+ recordParam.recordTotalStream = 0;
728
+ recordParam.startTimeout = 10;
729
+ recordParam.splitType = 1;
730
+ recordParam.endType = 1;
731
+ recordParam.crf = 26
732
+ recordParam.overlaps = [
733
+ {
734
+ tag: '', // 流 tag,如果不设置或为空,则为全局⽔印
735
+ type: 2, // 1 为时间戳⽔印;2 为⽂字⽔印;3 为图⽚⽔印
736
+ id: 2, // ⽔印 ID
737
+ enable: true,
738
+ xPosition: 16 * SCALE, // x 轴位置
739
+ yPosition: 8 * SCALE, // y 轴位置
740
+ text: `${this.props.recordMode ==1 ?'远程录制' :'网点录制'} ${this.props.salesBranchCode || ''} ${this.state.branchName || ''} ${this.props.financialOffice || ''}`,
741
+ fontSize: 16 * SCALE, // 字体⼤⼩
742
+ url: '' // ⽔印图⽚ HTTP 地址
743
+ },
744
+ {
745
+ tag: '', // 流 tag,如果不设置或为空,则为全局⽔印
746
+ type: 1, // 1 为时间戳⽔印;2 为⽂字⽔印;3 为图⽚⽔印
747
+ id: 1, // ⽔印 ID
748
+ enable: true,
749
+ xPosition: 1080 * SCALE, // x 轴位置
750
+ yPosition: 10 * SCALE, // y 轴位置
751
+ text: '', // ⽔印⽂字
752
+ fontSize: 16 * SCALE, // 字体⼤⼩
753
+ url: '' // ⽔印图⽚ HTTP 地址
754
+ },
755
+ ];
756
+ recordParam.tagPositions = list
757
+ recordParam.tagFilter = 'customer'
758
+ console.log('recordParam', recordParam);
759
+ // 开启音频录制,如果有业务id用,没用sessionid 用于在成功回调里去区分是音频还是正常
760
+ that.test_controller.StartRemoteRecord(filePath, recordParam, record_business_id ? record_business_id + '_' + type : this.state.sessionId + '_' + type)
761
+
762
+ })
763
+ }
764
+
765
+ }
766
+ // 开启ipad音频录制
767
+ enableIpadAudioRecording = (record_business_id) => {
768
+ const that = this
769
+ const filePath = 'recordId_' + new Date().valueOf() + '_ipadsale';
770
+ const recordParam = {};
771
+ recordParam.width = 1280;
772
+ recordParam.height = 720;
773
+ recordParam.recordTotalStream = 0;
774
+ recordParam.startTimeout = 10;
775
+ recordParam.splitType = 1;
776
+ recordParam.endType = 1;
777
+ recordParam.crf = 26
778
+ recordParam.overlaps = [
779
+ {
780
+ tag: '', // 流 tag,如果不设置或为空,则为全局⽔印
781
+ type: 2, // 1 为时间戳⽔印;2 为⽂字⽔印;3 为图⽚⽔印
782
+ id: 2, // ⽔印 ID
783
+ enable: true,
784
+ xPosition: 16, // x 轴位置
785
+ yPosition: 8, // y 轴位置
786
+ text: `${this.props.recordMode ==1 ?'远程录制' :'网点录制'} ${this.props.salesBranchCode || ''} ${this.state.branchName || ''} ${this.props.financialOffice || ''}`,
787
+ fontSize: 16, // 字体⼤⼩
788
+ url: '' // ⽔印图⽚ HTTP 地址
789
+ },
790
+ {
791
+ tag: '', // 流 tag,如果不设置或为空,则为全局⽔印
792
+ type: 1, // 1 为时间戳⽔印;2 为⽂字⽔印;3 为图⽚⽔印
793
+ id: 1, // ⽔印 ID
794
+ enable: true,
795
+ xPosition: 1080, // x 轴位置
796
+ yPosition: 10, // y 轴位置
797
+ text: '', // ⽔印⽂字
798
+ fontSize: 16, // 字体⼤⼩
799
+ url: '' // ⽔印图⽚ HTTP 地址
800
+ },
801
+ ];
802
+ recordParam.tagPositions = [{
803
+ tag: that.state.ipadTag,
804
+ xPosition: 0,
805
+ yPosition: 0,
806
+ width: 1280,
807
+ height: 720
808
+ },{
809
+ tag: 'tag1customer',
810
+ xPosition: 0,
811
+ yPosition: 0,
812
+ width: 0,
813
+ height: 0
814
+ }]
815
+ console.log('recordParam', recordParam);
816
+ that.test_controller.StartRemoteRecord(filePath, recordParam, record_business_id+'_ipadsale')
817
+ }
627
818
  // 开启录制
628
819
  enableServerRecording = (record_business_id, type) => {
629
820
  const that = this
@@ -653,7 +844,7 @@ class Video extends Component {
653
844
  // height: 350
654
845
  // },
655
846
  {
656
- tag: 'tag1',
847
+ tag: 'tag1customer',
657
848
  xPosition: 0,
658
849
  yPosition: 0,
659
850
  width: 213 * SCALE,
@@ -778,7 +969,7 @@ class Video extends Component {
778
969
  recordParam.height = 720;
779
970
  recordParam.recordTotalStream = 0;
780
971
  recordParam.startTimeout = 10;
781
- recordParam.splitType = 0;
972
+ recordParam.splitType = 1;
782
973
  recordParam.endType = 1;
783
974
  recordParam.crf = 26
784
975
  recordParam.overlaps = [
@@ -812,7 +1003,7 @@ class Video extends Component {
812
1003
  width: 1280,
813
1004
  height: 720
814
1005
  },{
815
- tag: 'tag1',
1006
+ tag: 'tag1customer',
816
1007
  xPosition: 0,
817
1008
  yPosition: 0,
818
1009
  width: 0,
@@ -1577,7 +1768,7 @@ class Video extends Component {
1577
1768
  })
1578
1769
  this.saveLog('aborted code:' + code)
1579
1770
  if (this.state.sessionId) {
1580
- if (code == 'SYS-01' || code == 'SYS-02') {
1771
+ if (code == 'SYS-01' || code == 'SYS-02' || String(code).includes('record-')) {
1581
1772
  this.props.joinRoomCallback({
1582
1773
  type: type,
1583
1774
  errorManage: manege,
@@ -1594,7 +1785,7 @@ class Video extends Component {
1594
1785
  }
1595
1786
 
1596
1787
  } else {
1597
- if (code == 'SYS-01' || code == 'SYS-02') {
1788
+ if (code == 'SYS-01' || code == 'SYS-02' || String(code).includes('record-')) {
1598
1789
  this.props.createRoomCallback({
1599
1790
  type: type,
1600
1791
  errorManage: manege,
@@ -1645,6 +1836,7 @@ class Video extends Component {
1645
1836
  // 开启录制
1646
1837
  this.saveLog('Start recording')
1647
1838
  this.enableServerRecording()
1839
+ this.enableAudioRecording('','presale')
1648
1840
  } else if (Mival.type == 2) {
1649
1841
  // 关闭录制
1650
1842
  this.saveLog('stop recording')
@@ -1995,9 +2187,22 @@ class Video extends Component {
1995
2187
  this.state.businessId = Mival.id;
1996
2188
  this.saveLog('Start business recording')
1997
2189
  this.enableServerRecording(Mival.id, 'startBusinessRecording')
2190
+ // supplement 1 代表补录
2191
+ if(Mival.supplement == 1) {
2192
+ this.state.supplementWithRoomId = Mival.supplementWithRoomId
2193
+ this.enableAudioRecording(Mival.id,'supplesale')
2194
+ } else {
2195
+ // 开启业务录制的基础上关闭full录制音频,并开启业务录制音频
2196
+ if(this.state.presaleRecordId) {
2197
+ this.test_controller.StopRemoteRecord(this.state.presaleRecordId)
2198
+ }
2199
+
2200
+ this.enableAudioRecording(Mival.id,'sale')
2201
+ }
1998
2202
  // 这里加定时1秒后触发Ipad录制--阿里的胡子老师要求加的,解决录制的问题
1999
2203
  setTimeout(() => {
2000
2204
  if (this.state.ipadTag) this.enableIpadRecording(Mival.id)
2205
+ if (this.state.ipadTag) this.enableIpadAudioRecording(Mival.id)
2001
2206
  }, 1000);
2002
2207
 
2003
2208
  if (this.props.whetherDetectFace && this.props.recordMode != 2){
@@ -2297,7 +2502,7 @@ class Video extends Component {
2297
2502
  this.saveLog('Failed to get device, code='+code)
2298
2503
  this.state.sessionType = false
2299
2504
  this.messageClick('获取设备失败,请检查摄像头设备是否可用或是否禁用摄像头', 'error')
2300
- this.roomCallBack(2, '获取设备失败', 1)
2505
+ this.roomCallBack(2, '获取设备失败', '1-' + code)
2301
2506
  this.showEnvDetection()
2302
2507
  };
2303
2508
  // 建立连接成功
@@ -2306,10 +2511,21 @@ class Video extends Component {
2306
2511
  this.ConnectMRTC()
2307
2512
  };
2308
2513
  this.test_controller.OnConnectFailed = (code, msg) => {
2514
+ // -101:初始化超时-102/-1004:初始化失败 (MTC close) 30001: 信令连接失败 transcribeError
2309
2515
  console.log('建立连接失败', code, msg)
2310
- this.saveLog('Failed to establish connection,' + code)
2311
- this.state.sessionType = false
2312
- this.roomCallBack(2, '连接失败', 2)
2516
+ if(code == 30001) {
2517
+ this.setState({
2518
+ transcribeErrorCode: 30001,
2519
+ transcribeErrorModalVisible: true
2520
+ })
2521
+ } else {
2522
+
2523
+ this.saveLog('Failed to establish connection,' + code)
2524
+ this.messageClick('建立连接失败', 'error')
2525
+ this.state.sessionType = false
2526
+ this.roomCallBack(2, '连接失败', '2-'+code)
2527
+ }
2528
+
2313
2529
  };
2314
2530
  // 断开连接回调
2315
2531
  this.test_controller.OnConnectClose = (code, msg) => {
@@ -2325,7 +2541,7 @@ class Video extends Component {
2325
2541
  console.log('初始化房间失败', err_code, err_msg)
2326
2542
  this.saveLog('Failed to initialize room,' + err_code)
2327
2543
  this.state.sessionType = false
2328
- this.roomCallBack(2, '初始化失败', 3)
2544
+ this.roomCallBack(2, '初始化失败', '3-' + err_code)
2329
2545
  };
2330
2546
  // 初始化成功回调
2331
2547
  this.test_controller.OnInitRoomConfigOK = () => {
@@ -2357,7 +2573,7 @@ class Video extends Component {
2357
2573
  console.log('创建房间失败', err_code, err_msg)
2358
2574
  this.saveLog('Failed to create room,' + err_code)
2359
2575
  this.state.sessionType = false
2360
- this.roomCallBack(2, '创建房间失败', 7)
2576
+ this.roomCallBack(2, '创建房间失败', '7-' + err_code)
2361
2577
  };
2362
2578
  // 初始化⾳视频成功
2363
2579
  this.test_controller.OnMediaCallSucc = (sid) => {
@@ -2370,8 +2586,13 @@ class Video extends Component {
2370
2586
  this.saveLog('OnMediaCallFail, code=' + err_code)
2371
2587
  };
2372
2588
 
2373
- const playAudioTip = () => {
2374
- this.messageClick('媒体流服务异常断开,请退出重试', 'error')
2589
+ const playAudioTip = (code) => {
2590
+ this.messageClick('媒体流服务异常断开,请刷新', 'error')
2591
+ if(code == 5003) {
2592
+ this.state.mediaErrorModalMessage = '媒体流服务异常,请刷新('+ code + ')'
2593
+ } else {
2594
+ this.state.mediaErrorModalMessage = '媒体流服务异常,请刷新('+ code + ')'
2595
+ }
2375
2596
  this.setState({
2376
2597
  mediaErrorModalVisible: true,
2377
2598
  })
@@ -2380,7 +2601,11 @@ class Video extends Component {
2380
2601
  this.mediaErrorPlay = () => {
2381
2602
  if(this.state.mediaErrorModalVisible){
2382
2603
  if (this.mediaErrorAudio) this.mediaErrorAudio.pause()
2383
- this.mediaErrorAudio = new Audio(MediaErrorAudio)
2604
+ if(code == 5003) {
2605
+ this.mediaErrorAudio = new Audio(startMediaError)
2606
+ } else {
2607
+ this.mediaErrorAudio = new Audio(MediaErrorAudio)
2608
+ }
2384
2609
  this.mediaErrorAudio.play()
2385
2610
  this.mediaErrorPlayTimer = setTimeout(this.mediaErrorPlay, 3000);
2386
2611
  }
@@ -2391,12 +2616,17 @@ class Video extends Component {
2391
2616
  this.test_controller.OnMediaClose = (code, sid) => {
2392
2617
  console.log('OnMediaClose',code, sid)
2393
2618
  if (code == 5003 || code == 5004 || code == 5005 || code == 5007 || code == 5009 || code == 5010 || code == 5011 || code == 5012) {
2394
- if (sid == this.state.publishSid) {
2619
+ if (sid == this.state.publishSid) {
2395
2620
  this.saveLog('Audio and video close notification,' + code)
2396
- this.roomCallBack(2, '音视频异常关闭', 8)
2621
+ this.roomCallBack(2, '音视频异常关闭', '8-' + code)
2397
2622
  if (code == 5007 || code == 5007 || code == 5009 || code == 5010 || code == 5011) {
2398
2623
  this.saveVideoPoint('conFail', `RM端媒体链路断开, err_code=${code}`)
2399
- playAudioTip();
2624
+ playAudioTip(code);
2625
+ }
2626
+ //5003:启动流失败(信令阶段)
2627
+ if (code == 5003) {
2628
+ this.saveVideoPoint('conFail', `RM端启动流失败, err_code=${code}`)
2629
+ playAudioTip(code);
2400
2630
  }
2401
2631
  } else if (sid == this.state.publishScreenSid) {
2402
2632
  this.state.isScreenSwitching = false
@@ -2404,7 +2634,12 @@ class Video extends Component {
2404
2634
  this.setSharedScreenTimer(false)
2405
2635
  if (code == 5007 || code == 5007 || code == 5009 || code == 5010 || code == 5011) {
2406
2636
  this.saveVideoPoint('conFail', `RM投屏媒体链路断开, err_code=${code}`)
2407
- playAudioTip();
2637
+ playAudioTip(code);
2638
+ }
2639
+ //5003:启动流失败(信令阶段)
2640
+ if (code == 5003) {
2641
+ this.saveVideoPoint('conFail', `RM投屏启动流失败, err_code=${code}`)
2642
+ playAudioTip(code);
2408
2643
  }
2409
2644
  if (code == 5012) {
2410
2645
  this.saveLog('Manual cancel share'); // 点了取消,拒绝系统授权
@@ -2429,7 +2664,7 @@ class Video extends Component {
2429
2664
  publish_config.video_profile_diy = { width: 640, height: 360, frameRate: 15, bitrate: 400 }
2430
2665
  publish_config.publish_video_id = 'publish_video1'
2431
2666
  publish_config.publish_streamId_id = 'publish_streamId1'
2432
- publish_config.publish_tag = 'tag1'
2667
+ publish_config.publish_tag = 'tag1customer'
2433
2668
  if (this.props.recordMode == 2) {
2434
2669
  // 分行模式,只收音 不发布摄像头
2435
2670
  publish_config.media_type = 2
@@ -2459,7 +2694,7 @@ class Video extends Component {
2459
2694
  // sessionType: false,
2460
2695
  // isJoinRoom: true
2461
2696
  // })
2462
- // this.roomCallBack(2, '加入失败',-5)
2697
+ this.roomCallBack(2, '加入失败','5-' + err_code)
2463
2698
  this.state.channelId = '',
2464
2699
  this.state.rtoken = '',
2465
2700
  this.state.sessionId = '',
@@ -2507,8 +2742,8 @@ class Video extends Component {
2507
2742
  // if (publish_device != 2) {
2508
2743
  // return stream
2509
2744
  // }
2510
- if (publish_tag == 'tag1') {
2511
- console.log('tag1', stream)
2745
+ if (publish_tag == 'tag1customer') {
2746
+ console.log('tag1customer', stream)
2512
2747
  let newStream = stream;
2513
2748
  if (stream.getVideoTracks()[0]) {
2514
2749
  if (this.state.beautyType || isSuccuseHs){
@@ -2679,7 +2914,11 @@ class Video extends Component {
2679
2914
  console.log('Publishing media stream failed,', sid, err_code, err_msg)
2680
2915
  if (sid == document.getElementById('publish_streamId1').name) {
2681
2916
  this.state.sessionType = false
2682
- this.roomCallBack(2, '发布失败', 4)
2917
+ this.setState({
2918
+ transcribeErrorCode: err_code,
2919
+ transcribeErrorModalVisible: true
2920
+ })
2921
+ this.roomCallBack(2, '发布失败', '4-' + err_code)
2683
2922
  } else {
2684
2923
  this.messageClick('投屏失败请重新投屏', 'error')
2685
2924
  this.setSharedScreenState(false)
@@ -2924,6 +3163,7 @@ class Video extends Component {
2924
3163
  // 如果已经开启了业务录制且ipad未在录制,立即开启ipad录制(ipad后加入)
2925
3164
  if (this.state.businessId && !this.state.ipadRecordId) {
2926
3165
  this.enableIpadRecording(this.state.businessId)
3166
+ this.enableIpadAudioRecording(this.state.businessId)
2927
3167
  }
2928
3168
  }
2929
3169
  };
@@ -3201,13 +3441,33 @@ class Video extends Component {
3201
3441
  const busId = Number(record_third_id.split('_')[0])
3202
3442
  this.ipadRecordCallback('1', true, busId)
3203
3443
  this.saveLog('mrtc OnStartIpadRecordSucc')
3444
+ } else if (String(record_third_id).includes('_presale')){
3445
+ // full录制的音频
3446
+ this.state.presaleRecordId = record_id
3447
+ this.audioPresaleRecordCallback('1', true)
3448
+ this.saveLog('mrtc OnStartPresaleRecordSucc')
3449
+ } else if (String(record_third_id).includes('_ipadsale')){
3450
+ // full录制的ipad音频
3451
+ this.state.ipadsaleRecordId = record_id
3452
+ this.audioIpadsaleRecordCallback('1', true)
3453
+ this.saveLog('mrtc OnStartIpadsaleRecordSucc')
3454
+ } else if (String(record_third_id).includes('_sale')){
3455
+ // 业务录制的音频
3456
+ this.state.salePresaleRecordId = record_id
3457
+ this.audioSalePresaleRecordCallback('1', true)
3458
+ this.saveLog('mrtc OnStartSalePresaleRecordSucc')
3459
+ } else if (String(record_third_id).includes('_supplesale')){
3460
+ // 补录业务录制的音频
3461
+ this.state.supplesalePresaleRecordId = record_id
3462
+ this.audiosuppleSalePresaleRecordCallback('1', true)
3463
+ this.saveLog('mrtc OnStartSuppleSalePresaleRecordSucc')
3204
3464
  } else {
3205
3465
  // 业务录制
3206
3466
  this.state.businessRecordId = record_id
3207
3467
  this.businessRecordCallback('1', true, record_third_id)
3208
3468
  this.saveLog('mrtc OnStartRemoteBusinessRecordSucc, businessId=' + record_third_id)
3209
3469
  }
3210
-
3470
+ // 判断是否是开启的音频录制 调用后台接口多isAudio --0否1是
3211
3471
  if (this.state.isRecordingeErrorModalVisible) {
3212
3472
  this.setState({
3213
3473
  isRecordingeErrorModalVisible: false
@@ -3229,10 +3489,31 @@ class Video extends Component {
3229
3489
  const busId = Number(record_third_id.split('_')[0])
3230
3490
  this.ipadRecordCallback('1', false, busId)
3231
3491
  this.saveLog('mrtc OnStartIpadRecordFailed, code='+err_code)
3492
+ } else if (String(record_third_id).includes('_presale')){
3493
+ // full录制的音频
3494
+ this.state.presaleRecordId = ''
3495
+ this.audioPresaleRecordCallback('1', false)
3496
+ this.saveLog('mrtc OnStartPresaleRecordFailed, code=' + err_code)
3497
+ } else if (String(record_third_id).includes('_ipadsale')){
3498
+ // 录制的ipad音频
3499
+ this.state.ipadsaleRecordId = ''
3500
+ this.audioIpadsaleRecordCallback('1', false)
3501
+ this.saveLog('mrtc OnStartIpadsaleRecordFailed, code=' + err_code)
3502
+ } else if (String(record_third_id).includes('_sale')){
3503
+ // 业务录制的音频
3504
+ this.state.salePresaleRecordId = ''
3505
+ this.audioSalePresaleRecordCallback('1', false)
3506
+ this.saveLog('mrtc OnStartSalePresaleRecordFailed, code=' + err_code)
3507
+ } else if (String(record_third_id).includes('_supplesale')){
3508
+ // 补录业务录制的音频
3509
+ this.state.supplesalePresaleRecordId = ''
3510
+ this.audiosuppleSalePresaleRecordCallback('1', false)
3511
+ this.saveLog('mrtc OnStartSuppleSalePresaleRecordFailed, code=' + err_code)
3232
3512
  } else {
3233
3513
  this.businessRecordCallback('1', false, record_third_id)
3234
3514
  this.saveLog('mrtc OnStartRemoteBusinessRecordFailed, code='+err_code + ',businessId=' + record_third_id)
3235
3515
  }
3516
+ this.roomCallBack(2, '开始服务端录制失败', 'record-' + err_code)
3236
3517
  };
3237
3518
  // 结束服务端录制成功
3238
3519
  this.test_controller.OnStopRemoteRecordSucc = (recordId, record_third_id) => {
@@ -3251,6 +3532,26 @@ class Video extends Component {
3251
3532
  this.ipadRecordCallback('2', true, busId)
3252
3533
  this.saveLog('mrtc OnStopIpadRecordSucc, recordId='+recordId)
3253
3534
  this.state.ipadRecordId = '';
3535
+ } else if (String(record_third_id).includes('_presale')){
3536
+ // full录制的音频
3537
+ this.state.presaleRecordId = ''
3538
+ this.audioPresaleRecordCallback('2', true)
3539
+ this.saveLog('mrtc OnStopPresaleRecordSucc, recordId='+recordId)
3540
+ } else if (String(record_third_id).includes('_ipadsale')){
3541
+ // 录制的ipad音频
3542
+ this.state.ipadsaleRecordId = ''
3543
+ this.audioIpadsaleRecordCallback('2', true)
3544
+ this.saveLog('mrtc OnStopIpadsaleRecordSucc, recordId='+recordId)
3545
+ } else if (String(record_third_id).includes('_sale')){
3546
+ // 业务录制的音频
3547
+ this.state.salePresaleRecordId = ''
3548
+ this.audioSalePresaleRecordCallback('2', true)
3549
+ this.saveLog('mrtc OnStopSalePresaleSucc, recordId='+recordId)
3550
+ } else if (String(record_third_id).includes('_supplesale')){
3551
+ // 补录业务录制的音频
3552
+ this.state.supplesalePresaleRecordId = ''
3553
+ this.audiosuppleSalePresaleRecordCallback('2', true)
3554
+ this.saveLog('mrtc OnStopSuppleSalePresaleRecordSucc, recordId='+recordId)
3254
3555
  } else {
3255
3556
  this.businessRecordCallback('2', true, record_third_id)
3256
3557
  this.saveLog('mrtc OnStopRemoteBusinessRecordSucc, recordId='+recordId + ',businessId=' + record_third_id)
@@ -3277,6 +3578,26 @@ class Video extends Component {
3277
3578
  const busId = Number(record_third_id.split('_')[0])
3278
3579
  this.ipadRecordCallback('2', false, busId)
3279
3580
  this.saveLog('mrtc OnStopIpadRecordFailed, err_code='+err_code)
3581
+ } else if (String(record_third_id).includes('_presale')){
3582
+ // full录制的音频
3583
+ this.state.presaleRecordId = ''
3584
+ this.audioPresaleRecordCallback('2', false)
3585
+ this.saveLog('mrtc OnStopPresaleRecordFailed, err_code='+err_code)
3586
+ } else if (String(record_third_id).includes('_ipadsale')){
3587
+ // 录制的ipad音频
3588
+ this.state.ipadsaleRecordId = ''
3589
+ this.audioIpadsaleRecordCallback('2', false)
3590
+ this.saveLog('mrtc OnStopIpadsaleRecordFailed, err_code='+err_code)
3591
+ } else if (String(record_third_id).includes('_sale')){
3592
+ // 业务录制的音频
3593
+ this.state.salePresaleRecordId = ''
3594
+ this.audioSalePresaleRecordCallback('2', false)
3595
+ this.saveLog('mrtc OnStopSalePresaleFailed, err_code='+err_code)
3596
+ } else if (String(record_third_id).includes('_supplesale')){
3597
+ // 补录业务录制的音频
3598
+ this.state.supplesalePresaleRecordId = ''
3599
+ this.audiosuppleSalePresaleRecordCallback('2', false)
3600
+ this.saveLog('mrtc OnStopSuppleSalePresaleRecordFailed, err_code='+err_code)
3280
3601
  } else {
3281
3602
  this.businessRecordCallback('2', false, record_third_id)
3282
3603
  this.saveLog('mrtc OnStopRemoteBusinessRecordFailed, err_code='+err_code+',businessId=' + record_third_id)
@@ -3690,6 +4011,91 @@ class Video extends Component {
3690
4011
  // duration: 10
3691
4012
  })
3692
4013
  }
4014
+ // full音频录制
4015
+ audioPresaleRecordCallback = async (type, status) => {
4016
+ try {
4017
+ let result = await API.videoRecordCallback({
4018
+ activityId: this.props.businessNumber,
4019
+ sessionId: this.state.sessionId,
4020
+ roomId: this.state.channelId + '',
4021
+ appId: this.state.appId,
4022
+ recordId: this.state.presaleRecordId,
4023
+ customerId: this.props.customerId,
4024
+ type: type,
4025
+ status: status,
4026
+ isAudio: '1'
4027
+ });
4028
+ console.log(result);
4029
+ } catch (err) {
4030
+ console.error(err);
4031
+ if (err.status == 502 || err.status == 404) {
4032
+ }
4033
+ }
4034
+ }
4035
+ // 业务音频录制
4036
+ audioIpadsaleRecordCallback = async (type, status) => {
4037
+ try {
4038
+ let result = await API.videoRecordCallback({
4039
+ activityId: this.props.businessNumber,
4040
+ sessionId: this.state.sessionId,
4041
+ roomId: this.state.channelId + '',
4042
+ appId: this.state.appId,
4043
+ recordId: this.state.ipadsaleRecordId,
4044
+ customerId: this.props.customerId,
4045
+ type: type,
4046
+ status: status,
4047
+ isAudio: '1'
4048
+ });
4049
+ console.log(result);
4050
+ } catch (err) {
4051
+ console.error(err);
4052
+ if (err.status == 502 || err.status == 404) {
4053
+ }
4054
+ }
4055
+ }
4056
+ // ipad音频录制
4057
+ audioSalePresaleRecordCallback = async (type, status) => {
4058
+ try {
4059
+ let result = await API.videoRecordCallback({
4060
+ activityId: this.props.businessNumber,
4061
+ sessionId: this.state.sessionId,
4062
+ roomId: this.state.channelId + '',
4063
+ appId: this.state.appId,
4064
+ recordId: this.state.salePresaleRecordId,
4065
+ customerId: this.props.customerId,
4066
+ type: type,
4067
+ status: status,
4068
+ isAudio: '1'
4069
+ });
4070
+ console.log(result);
4071
+ } catch (err) {
4072
+ console.error(err);
4073
+ if (err.status == 502 || err.status == 404) {
4074
+ }
4075
+ }
4076
+ }
4077
+ // 补录业务录制
4078
+ audiosuppleSalePresaleRecordCallback = async (type, status) => {
4079
+ try {
4080
+ let result = await API.videoRecordCallback({
4081
+ activityId: this.props.businessNumber,
4082
+ sessionId: this.state.sessionId,
4083
+ roomId: this.state.channelId + '',
4084
+ appId: this.state.appId,
4085
+ recordId: this.state.supplesalePresaleRecordId,
4086
+ customerId: this.props.customerId,
4087
+ type: type,
4088
+ status: status,
4089
+ isAudio: '1',
4090
+ supplementWithRoomId: this.state.supplementWithRoomId
4091
+ });
4092
+ console.log(result);
4093
+ } catch (err) {
4094
+ console.error(err);
4095
+ if (err.status == 502 || err.status == 404) {
4096
+ }
4097
+ }
4098
+ }
3693
4099
  // 全局录制
3694
4100
  videoRecordCallback = async (type, status) => {
3695
4101
  if (status) {
@@ -3710,7 +4116,8 @@ class Video extends Component {
3710
4116
  recordId: this.state.recordId,
3711
4117
  customerId: this.props.customerId,
3712
4118
  type: type,
3713
- status: status
4119
+ status: status,
4120
+ isFull: 1
3714
4121
  });
3715
4122
  console.log(result);
3716
4123
  } catch (err) {
@@ -4654,7 +5061,9 @@ class Video extends Component {
4654
5061
  }
4655
5062
  this.saveLog('Start business recording')
4656
5063
  if (!this.state.businessRecordId) this.enableServerRecording(this.state.businessId)
5064
+ if (!this.state.businessRecordId) this.enableAudioRecording(this.state.businessId,'presale')
4657
5065
  if (!this.state.ipadRecordId && this.state.ipadTag) this.enableIpadRecording(this.state.businessId)
5066
+ if (!this.state.ipadRecordId && this.state.ipadTag) this.enableIpadAudioRecording(this.state.businessId)
4658
5067
  clearTimeout(this.recordLoopPlayTimer)
4659
5068
  }
4660
5069
  handleOkLowPowerConfirm = () => {
@@ -4706,7 +5115,11 @@ class Video extends Component {
4706
5115
  handleOkMediaErrorConfirm = () => {
4707
5116
  // 刷新重试
4708
5117
  clearTimeout(this.mediaErrorPlayTimer)
4709
- this.handleOkEnd()
5118
+ location.reload(false);
5119
+ // this.handleOkEnd()
5120
+ }
5121
+ handleOktranscribeErrorConfirm = () => {
5122
+ location.reload(false);
4710
5123
  }
4711
5124
  handleCancelMediaError = () => {
4712
5125
  clearTimeout(this.mediaErrorPlayTimer)
@@ -7241,11 +7654,19 @@ class Video extends Component {
7241
7654
  {/* 媒体流断开提示 */}
7242
7655
  <Modal closable={false} centered={true} visible={this.state.mediaErrorModalVisible} maskClosable={false} footer={[
7243
7656
  <div key='end'>
7244
- <Button className="modelButtonCancel" onClick={this.handleCancelMediaError}>取消</Button>
7657
+ {/* <Button className="modelButtonCancel" onClick={this.handleCancelMediaError}>取消</Button> */}
7245
7658
  <Button className="modelButtonOk" type="primary" danger onClick={this.handleOkMediaErrorConfirm}>确定</Button>
7246
7659
  </div>
7247
7660
  ]}>
7248
- <div className='endModal'>媒体流服务异常断开,请退出重试</div>
7661
+ <div className='endModal'>{this.state.mediaErrorModalMessage}</div>
7662
+ </Modal>
7663
+ {/* 30001(在信令链接失败回调中)/发布失败/音视频异常回调 相关事件印象双录失败提示 */}
7664
+ <Modal closable={false} centered={true} visible={this.state.transcribeErrorModalVisible} maskClosable={false} footer={[
7665
+ <div key='end'>
7666
+ <Button className="modelButtonOk" type="primary" danger onClick={this.handleOktranscribeErrorConfirm}>确定</Button>
7667
+ </div>
7668
+ ]}>
7669
+ <div className='endModal'>{'系统异常请刷新('+ this.state.transcribeErrorCode + ')'}</div>
7249
7670
  </Modal>
7250
7671
  {/* 是否退出会议*/}
7251
7672
  <Modal closable={false} centered={true} visible={this.state.isModalVisibleEnd} maskClosable={false} footer={[
@@ -7745,7 +8166,7 @@ Video.defaultProps = {
7745
8166
  lightSensitivity: 1, // 光线敏感度系数,默认1
7746
8167
  userSide: 2,
7747
8168
  meetingDuration: null, // 会议时长,单位小时
7748
- recordMode: 1, // 录制模式 1远程录制 2网点录制
8169
+ recordMode: 1, // 录制模式 1远程录制 2网点录制 在开启单独音频流的时候1-会有多个音频流单独录制,2-只需要RM
7749
8170
  defaultBranchCode: "",// 员工网点缩写
7750
8171
  customerId: "", //客户号
7751
8172
  customerType: "", // 客户类型
@@ -7755,6 +8176,7 @@ Video.defaultProps = {
7755
8176
  audioinputNameList: ['Microphone Array (Realtek High Definition Audio(SST))'], // 默认匹配的麦克风的名称列表
7756
8177
  echoCancellation: true,
7757
8178
  noiseSuppression: true,
8179
+ needPreSale: true, // 是否开启音频录制 默认true--只控制售前full
7758
8180
  logUrl: 'http://hsbc.cn-shanghai.log.aliyuncs.com/logstores/hsbc/track?APIVersion=0.6.0&app=meeting-ui',
7759
8181
  internalUrl: 'https://wp-staff-gateway.wealth-platform.uat.ali.cloud.cn.hsbc/meeting-ui/OHB/CN/HSBC?chnlID=OHB&locale=zh_CN&chnlCC=CN&chnlGMC=HSBC&targetFunc=supervisorMeeting&sourceFunc=rmMeeting'
7760
8182
  }