| | |
| | | #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; |
| | |
| | | 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); |
| | |
| | | |
| | | -(void)backAction{ |
| | | [self.navigationController popViewControllerAnimated:true]; |
| | | // [self dismissViewControllerAnimated:YES completion:NULL]; |
| | | // [self dismissViewControllerAnimated:YES completion:NULL]; |
| | | } |
| | | |
| | | - (UIButton *)moreButton{ |
| | |
| | | |
| | | - (void)initCentetView { |
| | | [self.view addSubview:self.centerView]; |
| | | [self.centerView addSubview:self.collectButton]; |
| | | // [self.centerView addSubview:self.collectButton]; |
| | | [self.centerView addSubview:self.homeView]; |
| | | [self.centerView addSubview:self.screenshotImgBtn]; |
| | | [self.centerView addSubview:self.screenshotTextBtn]; |
| | |
| | | _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 = @"二次确认机"; |
| | |
| | | |
| | | - (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]; |
| | |
| | | |
| | | - (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"; |
| | |
| | | |
| | | - (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]; |
| | |
| | | |
| | | - (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]; |
| | |
| | | [_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]; |
| | |
| | | |
| | | - (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; |
| | |
| | | // [_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; |
| | | } |
| | |
| | | #pragma SDK可视对讲 功能部分 |
| | | -(void)initESVideo{ |
| | | //初始化中断,进入后台的tag |
| | | _es = ESVideo.shareInstance.es; |
| | | |
| | | _playing = NO; |
| | | _isSpeaking = NO; |
| | | self.isInterrupt = NO; |
| | |
| | | }); |
| | | }; |
| | | //门口机会有视频的长宽高,是固定的(暂时还不确定) |
| | | _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]; |
| | | // } |
| | | _es.delegate = self; |
| | | ESVideo.shareInstance.snapImageCallback = snapImageCallback; |
| | | _es.showView.backgroundColor = [UIColor whiteColor]; |
| | | [self.centerView addSubview:_es.showView]; |
| | | _es.showView.hidden = YES; |
| | | } |
| | | }else{ |
| | | NSLog(@"ESVideoPhone 初始化失败"); |
| | |
| | | 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]; |
| | | |
| | |
| | | UIAlertController *alertController = [UIAlertController alertControllerWithTitle:tipStr message:mes preferredStyle:UIAlertControllerStyleAlert]; |
| | | [alertController addAction:[UIAlertAction actionWithTitle:okStr style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { |
| | | [self backAction]; |
| | | }]]; |
| | | }]]; |
| | | |
| | | [self presentViewController:alertController animated:YES completion:nil]; |
| | | [self presentViewController:alertController animated:YES completion:nil]; |
| | | } |
| | | |
| | | |
| | |
| | | //在viewDidLoad中 调用requestAccessForAVMediaType: 是为了节约初始化的时间 |
| | | //在viewDidAppear中调用requestAccessForAVMediaType: 是为了弹出提示打开权限的Alert |
| | | //测试的时候发现如下情况:如果只把授权方法放到ViewDidAppear方法中处理,如果没有授权在初始化采集器时会失败。同样AlertView会因为View没有didLoad而导致present不出来 |
| | | if (!isAccessVideo || !isAccessAudio) { |
| | | |
| | | // if (!isAccessVideo || !isAccessAudio) { |
| | | // [self requestAccessForAVMedia]; |
| | | // } |
| | | |
| | | if (!isAccessAudio) { |
| | | [self requestAccessForAVMedia]; |
| | | } |
| | | } |
| | |
| | | [_es stopTalk]; |
| | | |
| | | _es.delegate = nil; |
| | | |
| | | |
| | | ESVideo.shareInstance.snapImageCallback = nil; |
| | | // _es.showView.removeFromSuperview; |
| | | |
| | | } |
| | | [_es freeSubClass]; |
| | | |
| | | // [_es freeSubClass]; |
| | | } |
| | | |
| | | -(void)dealloc{ |
| | |
| | | }else if([phoneEventStr isEqual:@"EVT_Connected"]){ |
| | | [self speaker:nil]; |
| | | // [_mCallOrAccept setTitle:@"通话中..." forState:UIControlStateNormal]; |
| | | }else if([phoneEventStr isEqual:@"EVT_MonitorConnected"]){ |
| | | _es.showView.hidden = NO; |
| | | [self speaker:nil]; |
| | | // [_mCallOrAccept setTitle:@"通话中..." forState:UIControlStateNormal]; |
| | | }else if([phoneEventStr isEqual:@"EVT_HangUp"]){ |
| | | |
| | | |
| | | // [CBToast showToastAction:endOfMonitoringStr]; |
| | | |
| | | // [CBToast showToastAction:endOfMonitoringStr]; |
| | | [self showUIAlertViewWithBack:endOfMonitoringStr]; |
| | | // [self backAction]; |
| | | |
| | | // [self backAction]; |
| | | |
| | | |
| | | |
| | | // [_mCallOrAccept setTitle:@"反呼" forState:UIControlStateNormal]; |
| | |
| | | // If media services were reset, and the last start succeeded, restart the session. |
| | | if (error.code == AVErrorMediaServicesWereReset) { |
| | | [_es onStopCapture]; |
| | | [_es startTalk]; |
| | | [_es stopTalk]; |
| | | } |
| | | } |
| | | |
| | |
| | | // } |
| | | |
| | | 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) { |
| | |
| | | |
| | | // 这里是考虑到用户没有授权,之后通过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; |
| | |
| | | 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){ |