JLChen
2021-04-02 728ceead4ea3f18abcb6f70772e64e4549f9dcac
xamarin/ESVideoPhoneSDKXamarin/ESVideoPhoneSDKXamarin/ESVideoMonitorViewController.m
@@ -13,13 +13,13 @@
#import <ESVideoPhoneSDk/ESError.h>
#import "ESvideoVideoIntercomViewController.h"
#import <Photos/Photos.h>
#import "AudioSessionHelper.h"
//#import "AudioSessionHelper.h"
#import "CBToast.h"
#import "ESVideo.h"
@interface ESVideoMonitorViewController ()<ESVideoPhoneDelegate>
@property (nonatomic,strong) AudioSessionHelper    *sessionHelper;
//@property (nonatomic,strong) AudioSessionHelper    *sessionHelper;
@property (nonatomic,strong) ESVideoPhone          *es;
@property (nonatomic,assign) BOOL                  playing;
@property (nonatomic,assign) BOOL                  isInterrupt;
@@ -120,7 +120,7 @@
    UIView *TopView =  [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, APP_TOP_BAR_HEIGHT)];
    TopView.backgroundColor = HEXCOLORA(0xF9F9F9,1.0);
    [TopView addSubview:self.backButton];
    [TopView addSubview:self.moreButton];
//    [TopView addSubview:self.moreButton];
    [self.view addSubview:TopView];
    TopView.layer.shadowColor = [UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:0.25].CGColor;
    TopView.layer.shadowOffset = CGSizeMake(0,0.5);
@@ -179,7 +179,7 @@
        _centerView.backgroundColor = UIColor.whiteColor;
        [self setRadiusWithView:_centerView];
        
        _topUILabel= [[UILabel alloc] initWithFrame:CGRectMake(80, 20, APP_SCREEN_WIDTH-160, 24)];
        _topUILabel= [[UILabel alloc] initWithFrame:CGRectMake(80, GetRealHeight(20), APP_SCREEN_WIDTH-160, GetRealHeight(24))];
        _topUILabel.font = [UIFont fontWithName:APP_UIFont_BOLD size:15.0];
        _topUILabel.textColor = HEXCOLORA(0x333333, 1.0);
        //        _topUILabel.text = @"二次确认机";
@@ -230,9 +230,9 @@
- (UIView *)homeView{
    if (_homeView == nil) {
        _homeView = [[UIView alloc] initWithFrame:CGRectMake(0, 268, APP_SCREEN_WIDTH, 36)];
        _homeView = [[UIView alloc] initWithFrame:CGRectMake(0, GetRealHeight(268), APP_SCREEN_WIDTH, GetRealHeight(36))];
        _homeView.backgroundColor = HEXCOLORA(0x232323, 1.0);
        UIImageView *mUIImageView= [[UIImageView alloc] initWithFrame:CGRectMake(20, 4, 28, 28)];
        UIImageView *mUIImageView= [[UIImageView alloc] initWithFrame:CGRectMake(GetRealWidth(20), GetRealHeight(4), GetRealHeight(28), GetRealHeight(28))];
        mUIImageView.image = [UIImage imageNamed:@"ic_esvideo_home"];
        [mUIImageView setContentMode:UIViewContentModeScaleAspectFit];
        [_homeView addSubview:mUIImageView];
@@ -244,7 +244,7 @@
- (UILabel *)homeUILabel{
    if (_homeUILabel == nil) {
        _homeUILabel = [[UILabel alloc] initWithFrame:CGRectMake(52, 8, APP_SCREEN_WIDTH - 100, 20)];
        _homeUILabel = [[UILabel alloc] initWithFrame:CGRectMake(GetRealWidth(52), 0, APP_SCREEN_WIDTH - GetRealWidth(100), _homeView.frame.size.height)];
        _homeUILabel.font = [UIFont fontWithName:APP_UIFont size:12.0];
        _homeUILabel.textColor = [UIColor whiteColor];
        //        _homeUILabel.text = @"1栋203";
@@ -256,7 +256,7 @@
- (UIButton *)screenshotImgBtn{
    if (_screenshotImgBtn == nil) {
        _screenshotImgBtn = [[UIButton alloc] initWithFrame:CGRectMake(80, 404, 58, 58)];
        _screenshotImgBtn = [[UIButton alloc] initWithFrame:CGRectMake(GetRealWidth(80), GetRealHeight(404), GetRealHeight(58), GetRealHeight(58))];
        [_screenshotImgBtn setImage:[UIImage imageNamed:@"ic_esvideo_takephoto_unselect"] forState:UIControlStateNormal];
        //        [_screenshotImgBtn setImage:[UIImage imageNamed:@"ic_esvideo_takephoto_select"] forState:UIControlStateSelected];
        [_screenshotImgBtn.imageView setContentMode:UIViewContentModeScaleAspectFit];
@@ -285,7 +285,7 @@
- (UIButton *)screenshotTextBtn{
    if (_screenshotTextBtn == nil) {
        _screenshotTextBtn = [[UIButton alloc] initWithFrame:CGRectMake(59, 470, 100, 21)];
        _screenshotTextBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, GetRealHeight(470), GetRealWidth(100), GetRealHeight(21))];
        [_screenshotTextBtn setTitle:@"截图" forState:UIControlStateNormal];
        _screenshotTextBtn.titleLabel.textAlignment = NSTextAlignmentCenter;
        _screenshotTextBtn.titleLabel.font = [UIFont fontWithName:APP_UIFont size:15.0];
@@ -294,13 +294,14 @@
        [_screenshotTextBtn addTarget:self action:@selector(screenshotAction) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside];
        [_screenshotTextBtn addTarget:self action:@selector(screenshotDownAction) forControlEvents:UIControlEventTouchDown];
        _screenshotTextBtn.adjustsImageWhenHighlighted = NO;
        _screenshotTextBtn.center = CGPointMake(_screenshotImgBtn.center.x, GetRealHeight(484));
    }
    return _screenshotTextBtn;
}
- (UIButton *)unlockImgBtn{
    if (_unlockImgBtn == nil) {
        _unlockImgBtn = [[UIButton alloc] initWithFrame:CGRectMake(APP_SCREEN_WIDTH-138, 404, 58, 58)];
        _unlockImgBtn = [[UIButton alloc] initWithFrame:CGRectMake(APP_SCREEN_WIDTH-GetRealWidth(80)- GetRealHeight(58), GetRealHeight(404),  GetRealHeight(58),  GetRealHeight(58))];
        [_unlockImgBtn setImage:[UIImage imageNamed:@"ic_esvideo_unlock_unselect"] forState:UIControlStateNormal];
        //        [_unlockImgBtn setImage:[UIImage imageNamed:@"ic_esvideo_unlock_select"] forState:UIControlStateSelected];
        [_unlockImgBtn.imageView setContentMode:UIViewContentModeScaleAspectFit];
@@ -328,7 +329,7 @@
- (UIButton *)unlockTextBtn{
    if (_unlockTextBtn == nil) {
        _unlockTextBtn = [[UIButton alloc] initWithFrame:CGRectMake(216, 470, 100, 21)];
        _unlockTextBtn = [[UIButton alloc] initWithFrame:CGRectMake(216, GetRealHeight(470), GetRealWidth(100), GetRealHeight(21))];
        [_unlockTextBtn setTitle:@"开锁" forState:UIControlStateNormal];
        _unlockTextBtn.titleLabel.font = [UIFont fontWithName:APP_UIFont size:15.0];
        _unlockTextBtn.titleLabel.textAlignment = NSTextAlignmentCenter;
@@ -338,6 +339,8 @@
        //        [_unlockTextBtn setTitleColor:TextSelectColor forState:UIControlStateSelected];
        [_unlockTextBtn addTarget:self action:@selector(unlockAction) forControlEvents:UIControlEventTouchUpInside];
        [_unlockTextBtn addTarget:self action:@selector(unlockDownAction) forControlEvents:UIControlEventTouchDown];
        _unlockTextBtn.adjustsImageWhenHighlighted = NO;
        _unlockTextBtn.center = CGPointMake(_unlockImgBtn.center.x, GetRealHeight(484));
    }
    return _unlockTextBtn;
}
@@ -415,14 +418,14 @@
            });
        };
        //门口机会有视频的长宽高,是固定的(暂时还不确定)
//        _es = [[ESVideoPhone alloc]initESVideoPhoneWithFrame:CGRectMake(0, 57, APP_SCREEN_WIDTH, 211) delegate:self imagecallBack:snapImageCallback];
        //        _es = [[ESVideoPhone alloc]initESVideoPhoneWithFrame:CGRectMake(0, 57, APP_SCREEN_WIDTH, 211) delegate:self imagecallBack:snapImageCallback];
        if (_es) {
            //判断视频渲染是否初始化成功,如果失败会走ESVideoPhoneDelegate方法
            if (_es.showView) {
//                for(UIView *view in [_es.showView subviews])
//                {
//                    [view removeFromSuperview];
//                }
                //                for(UIView *view in [_es.showView subviews])
                //                {
                //                    [view removeFromSuperview];
                //                }
                _es.delegate = self;
                ESVideo.shareInstance.snapImageCallback = snapImageCallback;
                _es.showView.backgroundColor = [UIColor whiteColor];
@@ -442,15 +445,15 @@
        return;
    }
    //初始化视频采集Capture
    [self requestAccessForAVMediaType:AVMediaTypeVideo];
    if (isAccessVideo) {
        if(![_es initVideoCaptureSession]){
            NSLog(@"VideoCaptureSession 初始化失败");
        }
    }
    //初始化AudioSession
    _sessionHelper = [[AudioSessionHelper alloc]init];
    [_sessionHelper setAudioSession];
//    [self requestAccessForAVMediaType:AVMediaTypeVideo];
//    if (isAccessVideo) {
//        if(![_es initVideoCaptureSession]){
//            NSLog(@"VideoCaptureSession 初始化失败");
//        }
//    }
//    //初始化AudioSession
//    _sessionHelper = [[AudioSessionHelper alloc]init];
//    [_sessionHelper setAudioSession];
    //添加进入后台,中断等通知
    [self addObservers];
    
@@ -509,7 +512,12 @@
    //在viewDidLoad中 调用requestAccessForAVMediaType: 是为了节约初始化的时间
    //在viewDidAppear中调用requestAccessForAVMediaType: 是为了弹出提示打开权限的Alert
    //测试的时候发现如下情况:如果只把授权方法放到ViewDidAppear方法中处理,如果没有授权在初始化采集器时会失败。同样AlertView会因为View没有didLoad而导致present不出来
    if (!isAccessVideo || !isAccessAudio) {
//    if (!isAccessVideo || !isAccessAudio) {
//        [self requestAccessForAVMedia];
//    }
    if (!isAccessAudio) {
        [self requestAccessForAVMedia];
    }
}
@@ -530,11 +538,11 @@
        
        _es.delegate = nil;
        ESVideo.shareInstance.snapImageCallback = nil;
//        _es.showView.removeFromSuperview;
        //        _es.showView.removeFromSuperview;
        
    }
//    [_es freeSubClass];
    //    [_es freeSubClass];
}
-(void)dealloc{
@@ -645,7 +653,7 @@
    // If media services were reset, and the last start succeeded, restart the session.
    if (error.code == AVErrorMediaServicesWereReset) {
        [_es onStopCapture];
        [_es startTalk];
        [_es stopTalk];
    }
}
@@ -776,10 +784,12 @@
    //    }
    
    if(!_isSpeaking){
        result = [_sessionHelper speaker:YES];
//        result = [_sessionHelper speaker:YES];
        [_es resetAudioCaptureIsSpeak:YES];
        _isSpeaking = YES;
    }else{
        result = [_sessionHelper speaker:NO];
//        result = [_sessionHelper speaker:NO];
        [_es resetAudioCaptureIsSpeak:NO];
        _isSpeaking = NO;
    }
    if (result) {
@@ -828,30 +838,37 @@
    
    // 这里是考虑到用户没有授权,之后通过AlertAction跳转到设置页面授权后再回到APP时做的重新检测
    //跳转到设置页面,授权后返回页面,继续初始化采集器
    if (isAccessAudio && isAccessVideo) {
        return;
    }
    if (isAccessVideo && !isAccessAudio) {
    if(!isAccessAudio){
        [self requestAccessForAVMediaType:AVMediaTypeAudio];
        if (isAccessAudio) {
            [_es initAudioCaptureSession];
        }
    }else if (!isAccessVideo && isAccessAudio){
        [self requestAccessForAVMediaType:AVMediaTypeVideo];
        if (isAccessVideo) {
            [_es initVideoCaptureSession];
        }
    }else if (!isAccessVideo && !isAccessAudio){
        [self requestAccessForAVMediaType:AVMediaTypeAudio];
        [self requestAccessForAVMediaType:AVMediaTypeVideo];
        if (isAccessAudio) {
            [_es initAudioCaptureSession];
        }
        if (isAccessVideo) {
            [_es initVideoCaptureSession];
        }
    }
//    if (isAccessAudio && isAccessVideo) {
//        return;
//    }
//    if (isAccessVideo && !isAccessAudio) {
//        [self requestAccessForAVMediaType:AVMediaTypeAudio];
//        if (isAccessAudio) {
//            [_es initAudioCaptureSession];
//        }
//    }else if (!isAccessVideo && isAccessAudio){
////        [self requestAccessForAVMediaType:AVMediaTypeVideo];
////        if (isAccessVideo) {
////            [_es initVideoCaptureSession];
////        }
//
//    }else if (!isAccessVideo && !isAccessAudio){
//        [self requestAccessForAVMediaType:AVMediaTypeAudio];
////        [self requestAccessForAVMediaType:AVMediaTypeVideo];
//        if (isAccessAudio) {
//            [_es initAudioCaptureSession];
//        }
////        if (isAccessVideo) {
////            [_es initVideoCaptureSession];
////        }
//    }
}
- (void)willEnterBackground:(NSNotification *)notification {
    isBackGround = YES;
@@ -862,9 +879,9 @@
    if (!isAccessAudio) {
        [self requestAccessForAVMediaType:AVMediaTypeAudio];
    }
    if (!isAccessVideo) {
        [self requestAccessForAVMediaType:AVMediaTypeVideo];
    }
//    if (!isAccessVideo) {
////        [self requestAccessForAVMediaType:AVMediaTypeVideo];
//    }
    if (!iSAudioNotDetermined && iSVideoNotDetermined){
        [self creatAlertViewWith:@"授权请求" message:@"麦克风没有授权,请在设置中开启权限,否则将影响通讯功能。" cancel:@"确定"];
    }else if(iSAudioNotDetermined && !iSVideoNotDetermined){