// // ShopKanHuP2PViewController.m // Ifish // // Created by imac on 16/8/26. // Copyright © 2016年 lianxiang. All rights reserved. // #import "ShopKanHuP2PViewController.h" //#import "PAIOUnit.h" #import "FListManager.h" #import "LookAfterReportViewController.h" #import "Utils.h" #import "KanHuBaoGaoModel.h" @interface ShopKanHuP2PViewController () { CGFloat _horizontalScreenH; CGFloat _monitorInterfaceW;//rtsp监控界面弹出修改 CGFloat _monitorInterfaceH;//rtsp监控界面弹出修改 UIButton* _btnDefence; BOOL _isOkFirstRenderVideoFrame;//YES表示第一次成功渲染图像 BOOL _isOkRenderVideoFrame;//YES表示图像渲染出来了 BOOL _isCanAutoOrientation;//限制屏幕什么时候可以旋转 BOOL _isInItDevice; //是否连接设备 BOOL _isStop;//是否暂停 用于区分是 暂停按钮 还是 连接失败按钮 int _OnLine; } @end @implementation ShopKanHuP2PViewController - (void)viewDidLoad { [super viewDidLoad]; // self.title = @"看护"; self.isShowControllerBar = YES; self.isVideoModeHD = NO; _isReject=YES; _isStop = NO; _isOkFirstRenderVideoFrame = YES; [self addTitleViewWithTitle:@"看护"]; [self connectDevice]; //监控竖屏时,各控件初始化(先) [self initComponentForPortrait]; //监控横屏时,各控件初始化(后) [self initComponentForHorizontalScreen]; _OnLine = 1; } #pragma mark -获取返回事件 -(void)goBackAction{ //sleep(2); if (_isOkRenderVideoFrame) { [self.remoteView getLastImgGoback]; } [self stopGLViewVideo]; [AppDelegate sharedDefault].canFullScreen = NO; [self.remoteView releseromotViewSet]; [self.navigationController popViewControllerAnimated:YES]; } #pragma mark - 初始化设备 p2pConnect -(void)connectDevice{ //LoginResult *loginResult = [UDManager getLoginInfo]; //8225账号 // NSString * P2PVerifyCode1 = @"1528438234"; // NSString * P2PVerifyCode2 = @"992805759"; // NSString *UserID = @"-2144354932"; UserModel *model=[[DataCenter defaultDtacenter] valueForKey:@"UserLogIn"]; NSString *userIDName=[NSString stringWithFormat:@"%d",(int)[model.gwellUserID integerValue]&0x7fffffff]; //初始化设备 if (!_isInItDevice) { NSLog(@"正在初始化设备"); _isInItDevice = [[P2PClient sharedClient] p2pConnectWithId:userIDName codeStr1:model.P2PVerifyCode1 codeStr2:model.P2PVerifyCode2]; // _isInItDevice = [[P2PClient sharedClient] p2pConnectWithId:model.gwellUserID codeStr1:model.P2PVerifyCode1 codeStr2:model.P2PVerifyCode2]; } if(_isInItDevice){ NSLog(@"p2pConnect success. 成功 可以操作设备了"); //成功 可以操作设备了 usleep(600000); [self startMonitor]; }else{//new added NSLog(@"p2pConnect failure.失败,不能操作设备"); //[self connectDevice]; return; } } -(void)startMonitor{ if (_isReject&&_isInItDevice) { NSLog(@"发送呼叫命令"); [[P2PClient sharedClient] setIsBCalled:NO]; [[P2PClient sharedClient] setP2pCallState:P2PCALL_STATUS_CALLING]; NSString *newPassword = GIWEI_INITPASS; NSString *cameraPass = [Utils GetTreatedPassword:newPassword]; [[P2PClient sharedClient] p2pCallWithId:self.kanHuCamera.cameraId password:cameraPass callType:P2PCALL_TYPE_MONITOR]; } } #pragma mark - 协议的实现 - (void)P2PClientCalling:(nullable NSDictionary*)info{ NSLog(@"正在呼叫"); } - (void)P2PClientReject:(nullable NSDictionary*)info{ _isReject=YES; _isOkRenderVideoFrame = NO; NSLog(@"视频挂断"); //[self addLogs:@"视频挂断"]; while (_isPlaying) { usleep(50*1000); } if (self.isIntoMonitorFromMonitor) { self.isIntoMonitorFromMonitor = NO; [self hiddenMonitoringUI:NO callErrorInfo:nil isReCall:YES]; // [self monitorP2PCall]; }else{ [self hiddenMonitoringUI:NO callErrorInfo:info isReCall:NO]; } } - (void)P2PClientAccept:(nullable NSDictionary*)info{ NSLog(@"接收数据"); } - (void)P2PClientReady:(nullable NSDictionary*)info{ NSLog(@"准备就绪"); [[P2PClient sharedClient] setP2pCallState:P2PCALL_STATUS_READY_P2P]; if([[P2PClient sharedClient] p2pCallType]==P2PCALL_TYPE_MONITOR){ //连接就绪之后就开始启动渲染 [self monitorStartRender]; } } #pragma mark - 准备渲染监控界面 -(void)monitorStartRender{ //[self addLogs:@"渲染>>>你可以看到画面了"]; _isReject = NO; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self renderView]; }); // [[PAIOUnit sharedUnit] setMuteAudio:YES]; // [[PAIOUnit sharedUnit] setSpeckState:YES]; } #pragma mark - OpenGLViewDelegate //GLview 截屏 -(void)onScreenShotted:(UIImage *)image{ UIImage *tempImage = [[UIImage alloc] initWithCGImage:image.CGImage]; //截屏图片有点大压缩上传 UIImage *samallImage = [self scaleFromImage:tempImage toSize:CGSizeMake(kScreenSize.width, kScreenSize.width*0.56)]; self.imgData = [NSData dataWithData:UIImagePNGRepresentation(samallImage)]; [Utils shopsSaveImageWithdata:self.imgData withCameraId:self.kanHuCamera.cameraId]; [self saveBaoGaoDataWith:self.imgData]; } - (UIImage *) scaleFromImage: (UIImage *) image toSize: (CGSize) size { UIGraphicsBeginImageContext(size); [image drawInRect:CGRectMake(0, 0, size.width, size.height)]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; } #pragma mark 生成看护报告 -(void)saveBaoGaoDataWith:(NSData *)imgData{ AFHTTPRequestOperationManager*manager=[AFHTTPRequestOperationManager manager]; manager.requestSerializer = [AFJSONRequestSerializer serializer]; manager.responseSerializer=[AFHTTPResponseSerializer serializer]; //此接口不带请求头参数 带请求头参数的全在AFHttptool里 __weak typeof (self)weakself = self; [manager POST:IfishGetLookReport parameters:self.baGaoDic constructingBodyWithBlock:^(id formData) { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyyMMddHHmmss"; NSString *str = [formatter stringFromDate:[NSDate date]]; NSString *fileName = [NSString stringWithFormat:@"%@.png", str]; NSString *name = @"fileUpload"; // NSData*imgdata=UIImagePNGRepresentation(image); [formData appendPartWithFileData:imgData name:name fileName:fileName mimeType:@"image/png"]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { NSDictionary*resultDic=[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; NSLog(@"result:%@",resultDic[@"result"]); [weakself.view hideToastActivity]; if ([resultDic[@"result"] isEqualToString:@"100"]) { NSDictionary *datadic=resultDic[@"data"]; KanHuBaoGaoModel *bgModel=[[KanHuBaoGaoModel alloc] init]; bgModel.baifenbi = datadic[@"baifenbi"]; bgModel.fileName = datadic[@"fileName"]; bgModel.timestamp = datadic[@"timestamp"]; bgModel.totalIndex = datadic[@"totalIndex"]; bgModel.reportId = datadic[@"reportId"]; bgModel.shareImg = datadic[@"shareImg"]; if (_isOkRenderVideoFrame) { [weakself stopGLViewVideo]; } [self.view hideToastActivity]; LookAfterReportViewController *lookBaoGao = [[LookAfterReportViewController alloc] init]; lookBaoGao.baGaoMod = bgModel; lookBaoGao.listModel = self.kanHuCamera; lookBaoGao.pinFenArr = self.pinFenArray; lookBaoGao.suggesttrue = self.suggetion; usleep(50*1000); [weakself.navigationController pushViewController:lookBaoGao animated:YES]; }else{ [self.view makeToast:@"生成失败"]; [self.view hideToastActivity]; } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { [self.view hideToastActivity]; [weakself.view makeToast:@"请检查网络"]; }]; } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //屏幕长亮 [[ UIApplication sharedApplication] setIdleTimerDisabled:YES]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveRemoteMessage:) name:RECEIVE_REMOTE_MESSAGE object:nil]; //在线人数监控 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivePlayingMessage:) name:RECEIVE_PLAYING_CMD object:nil]; self.navigationController.navigationBarHidden = NO; _isCanAutoOrientation = YES; //设置默认竖屏 [[AppDelegate sharedDefault] application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:[AppDelegate sharedDefault].window]; [self cameraConnectSeting]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // 禁用 iOS7 返回手势 if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = NO; } } -(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; //屏幕长亮关闭 [[ UIApplication sharedApplication] setIdleTimerDisabled:NO]; //离开此页面开启返回手势 if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = YES; } [AppDelegate sharedDefault].canFullScreen = NO; self.isReject = YES; [[UIApplication sharedApplication] setStatusBarHidden:NO]; if (self.isFullScreen){ if (self.scrollView){ [self.scrollView setZoomScale:1.0]; } } [[NSNotificationCenter defaultCenter] removeObserver:self name:RECEIVE_REMOTE_MESSAGE object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:RECEIVE_PLAYING_CMD object:nil]; } #define MESG_SET_GPIO_PERMISSION_DENIED 86 #define MESG_GPIO_CTRL_QUEUE_IS_FULL 87 #define MESG_SET_DEVICE_NOT_SUPPORT 255 #define GPIO0_0 10 #define GPIO0_1 11 #define GPIO0_2 12 #define GPIO0_3 13 #define GPIO0_4 14 #define GPIO2_6 15 - (void)receiveRemoteMessage:(NSNotification *)notification{ NSDictionary *parameter = [notification userInfo]; int key = [[parameter valueForKey:@"key"] intValue]; switch(key){ case RET_GET_FOCUS_ZOOM: { int value = [[parameter valueForKey:@"value"] intValue]; if (value == 3) {//变倍变焦都有 dispatch_async(dispatch_get_main_queue(), ^{ self.isSupportFocalLength = YES; [self.pinchGestureRecognizer addTarget:self action:@selector(localLengthPinchToZoom:)]; }); }else if (value == 2){//只有变焦 dispatch_async(dispatch_get_main_queue(), ^{ self.isSupportFocalLength = YES; }); }else if (value == 1){//只有变倍 dispatch_async(dispatch_get_main_queue(), ^{ [self.pinchGestureRecognizer addTarget:self action:@selector(localLengthPinchToZoom:)]; }); } } break; case RET_SET_GPIO_CTL: { int result = [[parameter valueForKey:@"result"] intValue]; dispatch_async(dispatch_get_main_queue(), ^{ self.clickGPIO0_0Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_1Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_2Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_3Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_4Button.backgroundColor = [UIColor clearColor]; self.clickGPIO2_6Button.backgroundColor = [UIColor clearColor]; }); if (result == 0) { //设置成功 dispatch_async(dispatch_get_main_queue(), ^{ [self.view makeToast:NSLocalizedString(@"operator_success", nil)]; }); }else if (result == MESG_SET_GPIO_PERMISSION_DENIED){ //该GPIO未开放 dispatch_async(dispatch_get_main_queue(), ^{ [self.view makeToast:NSLocalizedString(@"not_open", nil)]; }); }else if (result == MESG_GPIO_CTRL_QUEUE_IS_FULL){ //操作过于频繁,之前的操作未执行完 dispatch_async(dispatch_get_main_queue(), ^{ [self.view makeToast:NSLocalizedString(@"too_frequent", nil)]; }); }else if(result == MESG_SET_DEVICE_NOT_SUPPORT){ //设备不支持此操作 dispatch_async(dispatch_get_main_queue(), ^{ [self.view makeToast:NSLocalizedString(@"not_support_operation", nil)]; }); } } break; case RET_GET_LIGHT_SWITCH_STATE: { int result = [[parameter valueForKey:@"result"] intValue]; if (result == 0) { int state = [[parameter valueForKey:@"state"] intValue]; dispatch_async(dispatch_get_main_queue(), ^{ self.isSupportLightSwitch = YES; if (state == 1) {//灯是开状态 self.isLightSwitchOn = YES; [self.lightButton setBackgroundImage:[UIImage imageNamed:@"lighton.png"] forState:UIControlStateNormal]; }else{ self.isLightSwitchOn = NO; [self.lightButton setBackgroundImage:[UIImage imageNamed:@"lightoff.png"] forState:UIControlStateNormal]; } }); } } break; case RET_SET_LIGHT_SWITCH_STATE: { int result = [[parameter valueForKey:@"result"] intValue]; if (result == 0) { dispatch_async(dispatch_get_main_queue(), ^{ [self.lightButton setHidden:NO]; [self.progressView setHidden:YES]; [self.progressView stopAnimating]; if (self.isLightSwitchOn) {//灯正开着 self.isLightSwitchOn = NO;//关灯 [self.lightButton setBackgroundImage:[UIImage imageNamed:@"lightoff.png"] forState:UIControlStateNormal]; }else{//灯正关着 self.isLightSwitchOn = YES;//开灯 [self.lightButton setBackgroundImage:[UIImage imageNamed:@"lighton.png"] forState:UIControlStateNormal]; } }); } } break; case RET_DEVICE_NOT_SUPPORT: { dispatch_async(dispatch_get_main_queue(), ^{ self.clickGPIO0_0Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_1Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_2Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_3Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_4Button.backgroundColor = [UIColor clearColor]; self.clickGPIO2_6Button.backgroundColor = [UIColor clearColor]; //[self.view makeToast:NSLocalizedString(@"device_not_support", nil)]; }); } break; case RET_GET_NPCSETTINGS_REMOTE_DEFENCE: { dispatch_async(dispatch_get_main_queue(), ^{ NSInteger state = [[parameter valueForKey:@"state"] intValue]; if(state==SETTING_VALUE_REMOTE_DEFENCE_STATE_ON) { //竖屏 [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_on_h.png")forState:UIControlStateNormal]; [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_on_h_p.png") forState:UIControlStateHighlighted]; //获取到布防状态,设置为可点且显示相应的图标 self.defenceButtonH.enabled = YES; self.isDefenceOn = YES; //横屏 [_btnDefence setBackgroundImage:LXImageWithImageName(@"ic_ctl_lock_on.png") forState:UIControlStateNormal]; } else { //竖屏 [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_off_h.png") forState:UIControlStateNormal]; [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_off_h_p.png") forState:UIControlStateHighlighted]; //获取到布防状态,设置为可点且显示相应的图标 self.defenceButtonH.enabled = YES; self.isDefenceOn = NO; //横屏 [_btnDefence setBackgroundImage:LXImageWithImageName(@"ic_ctl_lock_off.png") forState:UIControlStateNormal]; } if (_btnDefence.hidden == YES) { _btnDefence.hidden = NO; } }); } break; case RET_SET_NPCSETTINGS_REMOTE_DEFENCE: { dispatch_async(dispatch_get_main_queue(), ^{ NSInteger state = [[parameter valueForKey:@"state"] intValue]; if(state==SETTING_VALUE_REMOTE_DEFENCE_STATE_ON){ //竖屏 // LXImageWithImageName(@"ic_ctl_lock_off.png") [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_on_h.png") forState:UIControlStateNormal]; [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_on_h_p.png") forState:UIControlStateHighlighted]; self.isDefenceOn = YES; //横屏 [_btnDefence setBackgroundImage:LXImageWithImageName(@"ic_ctl_lock_on.png") forState:UIControlStateNormal]; }else{ //竖屏 [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_off_h.png") forState:UIControlStateNormal]; [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_off_h_p.png") forState:UIControlStateHighlighted]; self.isDefenceOn = NO; //横屏 [_btnDefence setBackgroundImage:LXImageWithImageName(@"ic_ctl_lock_off.png") forState:UIControlStateNormal]; } }); } break; } } #pragma mark- 在线人数 -(void)receivePlayingMessage:(NSNotification *)notification { NSDictionary *parameter = [notification userInfo]; int key = [[parameter valueForKey:@"WathNumber"] intValue]; _OnLine ++ ; if (key<=1) { //_OnLine = key; NSLog(@"当前在线人数%d",key); //获取到在线人数后 关注人数+1 子类中实现 [self popularityAdd:key]; }else{ if (_OnLine>2) { return; } [self stopGLViewVideo]; [self alreadyHaveLookP]; } } #pragma mark - 已有人观看 -(void)alreadyHaveLookP{ } #pragma mark - 人气加1 子类实现 -(void)popularityAdd:(int)onLineP { } #pragma mark - 改变焦距 -(void)btnClickToChangeFocalLength:(id)sender{ UIView *view = (UIView *)sender; if (view.tag == FocalLength_Elongation_btnTag) { //焦距变长 BYTE cmdData[5] = {0}; cmdData[0] = 0x05; fgSendUserData(9, 1, cmdData, sizeof(cmdData)); }else if (view.tag == FocalLength_Shorten_btnTag){ //焦距变短 BYTE cmdData[5] = {0}; cmdData[0] = 0x15; fgSendUserData(9, 1, cmdData, sizeof(cmdData)); }else{ UISlider *focalLengthSlider = (UISlider *)view; if (focalLengthSlider.value < 7.5) { //焦距变长 BYTE cmdData[5] = {0}; cmdData[0] = 0x05; fgSendUserData(9, 1, cmdData, sizeof(cmdData)); }else{ //焦距变短 BYTE cmdData[5] = {0}; cmdData[0] = 0x15; fgSendUserData(9, 1, cmdData, sizeof(cmdData)); } focalLengthSlider.value = 7.5; } } #pragma mark - 焦距变倍 -(void)localLengthPinchToZoom:(id)sender { if (!self.isFullScreen) { return; } if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) { if ([(UIPinchGestureRecognizer*)sender scale] > 1.0) { BYTE cmdData[5] = {0}; cmdData[0] = 0x05; fgSendUserData(9, 2, cmdData, sizeof(cmdData)); }else{ BYTE cmdData[5] = {0}; cmdData[0] = 0x15; fgSendUserData(9, 2, cmdData, sizeof(cmdData)); } } } //加tab 栏后新增 -(void)cameraConnectSeting{ //rtsp监控界面弹出修改 [self monitorP2PCall]; //设置代理 [[P2PClient sharedClient] setDelegate:self]; [self hiddenMonitoringUI:NO callErrorInfo:nil isReCall:YES]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - 监控开始渲染后,此处执行相关操作 -(void)doOperationsAfterMonitorStartRender{//rtsp监控界面弹出修改 /* *1. 应该放在监控准备就绪之后(即渲染之后) */ // [[PAIOUnit sharedUnit] setMuteAudio:YES]; // [[PAIOUnit sharedUnit] setSpeckState:YES]; //放在渲染之后 if([AppDelegate sharedDefault].isDoorBellAlarm){//门铃推送,点按开关说话 self.isTalking = YES; [self.pressView setHidden:NO]; //[[PAIOUnit sharedUnit] setSpeckState:NO]; }else{ self.isTalking = NO; [self.pressView setHidden:YES]; // [[PAIOUnit sharedUnit] setSpeckState:YES]; } NSString *callId = [[P2PClient sharedClient] callId]; NSString *callPassword = [[P2PClient sharedClient] callPassword]; [[P2PClient sharedClient]getDefenceState:callId password:callPassword]; //判断设备是否支持变倍变焦(38) [[P2PClient sharedClient] getNpcSettingsWithId:callId password:callPassword]; } #pragma mark - 监控竖屏时,各控件初始化 #define BOTTOM_BAR_HEIGHT (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 95.0:50.0) #define PRESS_LAYOUT_WIDTH_AND_HEIGHT 38 #define CONTROLLER_BTN_COUNT 5 #define PUBLIC_WIDTH_OR_HEIGHT (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 95.0:50.0) #define CONTROLLER_BTN_H_W (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 70.0:40.0) //布防、声音...高度宽度 #define RESOLUTION_BTN_H (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 44.0:30.0) //分辨率按钮高度 #define CONTROLLER_RIGHT_ITEM_WIDTH 70 #define CONTROLLER_RIGHT_ITEM_HEIGHT 40 #define CONTROLLER_LEFT_ITEM_WIDTH 20 #define CONTROLLER_BTN_TAG_HUNGUP 0 #define CONTROLLER_BTN_TAG_SOUND 1 #define CONTROLLER_BTN_TAG_SCREENSHOT 2 #define CONTROLLER_BTN_TAG_PRESS_TALK 3 #define CONTROLLER_BTN_TAG_DEFENCE_LOCK 4 #define CONTROLLER_BTN_TAG_HD 5 #define CONTROLLER_BTN_TAG_SD 6 #define CONTROLLER_BTN_TAG_LD 7 #define CONTROLLER_BTN_TAG_RESOLUTION 8 #define CONTROLLER_LABEL_TAG_HD 10 #define CONTROLLER_LABEL_TAG_SD 11 #define CONTROLLER_LABEL_TAG_LD 12 #define CONTROLLER_BTN_TAG_GPIO1_0 13 //lock #define LEFTVIEW_WIDTH (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 88:88) #define LEFTVIEW_HEIGHT (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 120:120) #define CUSTOM_BORDER_BUTTON_WIDTH 20 #define CUSTOM_BORDER_BUTTON_HEIGHT 45 #define LEFT_BAR_BTN_WIDTH (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 90:60) #define LEFT_BAR_BTN_MARGIN (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 15:10) #define LOADINGPRESSVIEW_WIDTH_HEIGHT (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 50:80) -(void)initComponentForPortrait{ //view的背景颜色 [self.view setBackgroundColor:COLOR_MIAN]; //显示状态栏 [[UIApplication sharedApplication] setStatusBarHidden:NO]; //取得竖屏的rect CGRect rect = [AppDelegate getScreenSize:YES isHorizontal:NO]; CGFloat width = rect.size.width; CGFloat height = rect.size.height; if(CURRENT_VERSION<7.0){ height +=20; } //右侧下拉菜单 // UIButton*rightButton = [UIButton buttonWithType:UIButtonTypeCustom]; // rightButton.frame = CGRectMake(0, 0, 60, 44); // [rightButton setImage:[UIImage imageNamed:@"ifishnav_dropview_list"] forState:UIControlStateNormal]; // [rightButton addTarget:self action:@selector(popAppear) forControlEvents:UIControlEventTouchUpInside]; // self.rightPopButton = rightButton; // [self.rightPopButton setImageEdgeInsets:UIEdgeInsetsMake(0, 30, 0, 0)]; // // UIBarButtonItem*rightItem = [[UIBarButtonItem alloc]initWithCustomView:self.rightPopButton]; // self.navigationItem.rightBarButtonItem = rightItem; //显示监控画面的载体canvasView CGFloat canvasView_h = [UIScreen mainScreen].bounds.size.width * 9/16; UIView *canvasView = [[UIView alloc] initWithFrame:CGRectMake(0, 64, width, canvasView_h)]; canvasView.backgroundColor = [UIColor blackColor]; [self.view addSubview:canvasView]; self.canvasView = canvasView; self.canvasframe = canvasView.frame; //视频监控连接中的背景图片 NSString *filePath = [Utils getHeaderFilePathWithId:self.kanHuCamera.cameraId]; UIImage *headImg = [UIImage imageWithContentsOfFile:filePath]; if(headImg==nil){ headImg = LXImageWithImageName(@"ic_header.png"); } self.canvasView.layer.contents = (id)headImg.CGImage; //视频监控连接中或者连接失败的文字提示,以及旋转或者重连图片 UIButton *promptButton = [UIButton buttonWithType:UIButtonTypeCustom]; promptButton.frame = CGRectMake(0.0, 0.0, self.canvasView.frame.size.width, self.canvasView.frame.size.height); promptButton.backgroundColor = [UIColor clearColor]; promptButton.tag = PROMPT_BUTTON_TAG; [promptButton addTarget:self action:@selector(onVerticalBtnPress:) forControlEvents:UIControlEventTouchUpInside]; [self.canvasView addSubview:promptButton]; self.promptButton = promptButton; //文字frame NSString *labelTipText = [NSString stringWithFormat:@"%@",NSLocalizedString(@"玩命加载中...", nil)]; CGSize size = [labelTipText sizeWithFont:XFontBold_16]; CGFloat labelTip_w = size.width+10.0; CGFloat labelTip_h = size.height; //图片frame CGFloat progressView_wh = LOADINGPRESSVIEW_WIDTH_HEIGHT; CGFloat progressView_y = (self.canvasView.frame.size.height-labelTip_h-progressView_wh)/2; // 旋转或者重连图片 或者开始监控图片 ProgressImageView *progressView = [[ProgressImageView alloc] initWithFrame:CGRectMake((width-progressView_wh)/2, progressView_y, progressView_wh, progressView_wh)]; progressView.backgroundView.image = LXImageWithImageName(@"monitor_press.png"); [self.promptButton addSubview:progressView]; [progressView start]; self.yProgressView = progressView; //视频监控连接中或者连接失败的文字提示 UILabel* labelTip = [[UILabel alloc] initWithFrame:CGRectMake((width-labelTip_w)/2, progressView_y+progressView_wh, labelTip_w, labelTip_h)]; labelTip.backgroundColor = [UIColor clearColor]; labelTip.text = [NSString stringWithFormat:@"%@",NSLocalizedString(@"monitor_out_prompt", nil)]; labelTip.textAlignment = NSTextAlignmentCenter; labelTip.font = XFontBold_16; labelTip.textColor = XWhite; //打开可以显示监控连接中或者连接失败的文字提示 // [self.promptButton addSubview:labelTip]; self.labelTip = labelTip; //显示监控的画布OpenGLView OpenGLView *glView = [[OpenGLView alloc] init]; glView.frame = CGRectMake(0.0, 0.0, self.canvasView.frame.size.width, self.canvasView.frame.size.height); self.remoteView = glView; self.remoteView.delegate = self; [self.remoteView.layer setMasksToBounds:YES]; [self.canvasView addSubview:self.remoteView]; //、横屏工具栏 CGFloat midtH=self.canvasView.frame.size.height/5; UIView *midToolHView = [[UIView alloc] initWithFrame:CGRectMake(0.0, CGRectGetMaxY(self.canvasView.frame), width,0)]; midToolHView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5]; [self.view addSubview:midToolHView]; [self.view bringSubviewToFront:midToolHView]; self.midToolHView = midToolHView;//全屏时,隐藏 //_remoteView 添加点击手势现实和隐藏 midToolHView UITapGestureRecognizer *appermidToolView=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onSingleTap)]; [appermidToolView setCancelsTouchesInView:YES]; [appermidToolView setDelaysTouchesEnded:YES]; //暂停按钮 self.stopBtnH = [UIButton buttonWithType:UIButtonTypeCustom]; self.stopBtnH.frame = CGRectMake(50.0/SCREEN_SCALE, (midtH - midtH/2)/2, midtH/2, midtH/2); self.stopBtnH.tag = STOPBTN_TAG; [self.stopBtnH addTarget:self action:@selector(onVerticalBtnPress:) forControlEvents:UIControlEventTouchUpInside]; self.stopBtnH.hidden = YES; [self.midToolHView addSubview:self.stopBtnH]; //暂停按钮图片 UIImage *stopImageH = LXImageWithImageName(@"monitor_stop_h"); //self.stopImageViewH = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, (self.stopBtnH.frame.size.height-stopImageH.size.height/SCREEN_SCALE)/2, stopImageH.size.width/SCREEN_SCALE, stopImageH.size.height/SCREEN_SCALE)]; self.stopImageViewH = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, midtH/2, midtH/2)]; self.stopImageViewH.contentMode = UIViewContentModeScaleToFill; self.stopImageViewH.image = stopImageH; [self.stopBtnH addSubview:self.stopImageViewH]; //横屏按钮 self.switchScreenButtonH = [UIButton buttonWithType:UIButtonTypeCustom]; CGFloat BtnH = midtH*2/3; self.switchScreenButtonH.frame = CGRectMake(self.midToolHView.frame.size.width-BtnH -50.0/SCREEN_SCALE, (midtH - BtnH)/2,BtnH + 50.0/SCREEN_SCALE, BtnH); self.switchScreenButtonH.tag = SWITCH_SCREEN_BUTTON_H_TAG; [self.switchScreenButtonH addTarget:self action:@selector(onVerticalBtnPress:) forControlEvents:UIControlEventTouchUpInside]; [self.midToolHView addSubview:self.switchScreenButtonH]; self.switchScreenButtonH.hidden = YES; //self.switchScreenButtonH = switchScreenButtonH; //横屏按钮图片 UIImage *switchScreenImageH = LXImageWithImageName(@"monitor_switch_screen_img_h.png"); UIImageView *switchScreenImageViewH = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, BtnH, BtnH)]; switchScreenImageViewH.contentMode = UIViewContentModeScaleToFill; switchScreenImageViewH.image = switchScreenImageH; [self.switchScreenButtonH addSubview:switchScreenImageViewH]; // 生成报告view KanHuBaoGaoView *baoGaoToolHView=[[KanHuBaoGaoView alloc] initWithFrame:CGRectMake(0.0, CGRectGetMaxY(self.canvasView.frame) - 1, width, self.view.frame.size.height - CGRectGetHeight(self.canvasView.frame))]; baoGaoToolHView.baoGaoViewDelegate = self; self.HbootmView =baoGaoToolHView; [self.view addSubview:self.HbootmView]; } #pragma mark - baoGaoViewDelegate -(void)shengChengBaoGaoWith:(NSString *)index1 index2:(NSString *)index2 index3:(NSString *)index3 addSuggesture:(NSString *)suggestion addPingFenArr:(NSArray *)pinFenArr{ if (self.isReject) { [self.view makeToast:@"监控未开启"]; return; } [self.view makeToastActivity]; //截屏 [self.remoteView setIsScreenShotting:YES]; // UIImage *image=[Utils shopsGetImgeWithCameraId:self.kanHuCamera.cameraId]; UserModel*umodel=[[DataCenter defaultDtacenter]valueForKey:@"UserLogIn"]; NSDictionary*para=@{ @"userId":umodel.userId, @"index1":index1, @"index2":index2, @"index3":index3, @"suggestion":suggestion, @"fileUpload":@"png" }; self.baGaoDic = para; self.suggetion = suggestion; self.pinFenArray = pinFenArr; } #pragma mark - 监控横屏时,各控件初始化 -(void)initComponentForHorizontalScreen{ CGRect rect = [AppDelegate getScreenSize:NO isHorizontal:YES]; CGFloat width = rect.size.width; _monitorInterfaceW = width; CGFloat height = rect.size.height; if(CURRENT_VERSION<7.0){ height +=20; } _monitorInterfaceH = height; _horizontalScreenH = height; // //横屏背景 UIView *fullScreenBgView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, width, height)]; fullScreenBgView.backgroundColor = XBlack; self.fullScreenBgView = fullScreenBgView; //进入横屏时,响应onDoubleTap //退出横屏时,响应onDoubleTap 暂停 UITapGestureRecognizer *doubleTapG = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onDoubleTap)]; doubleTapG.delegate = self; [doubleTapG setNumberOfTapsRequired:2]; [self.remoteView addGestureRecognizer:doubleTapG]; //进入横屏时,响应onSingleTap //退出横屏时,响应onSingleTap UITapGestureRecognizer *singleTapG = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onSingleTap)]; singleTapG.delegate = self; [singleTapG setNumberOfTapsRequired:1]; [singleTapG requireGestureRecognizerToFail:doubleTapG]; [self.remoteView addGestureRecognizer:singleTapG]; //进入横屏时,响应localLengthPinchToZoom //退出横屏时,不响应localLengthPinchToZoom NSString * plist = [[NSBundle mainBundle] pathForResource:@"Common-Configuration" ofType:@"plist"]; NSDictionary * dic = [NSDictionary dictionaryWithContentsOfFile:plist]; BOOL isSupportZoom = [dic[@"isSupportZoom"] boolValue]; UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] init]; if (!isSupportZoom) {//电子放大与焦距变倍不共存 [_remoteView addGestureRecognizer:pinchGestureRecognizer]; } self.pinchGestureRecognizer = pinchGestureRecognizer; //右边的画质图标 //进入横屏时,显示 //退出横屏时,隐藏 int rightItemCount = 3; //半透明背景 UIView *controllerRightBg = [[UIView alloc] initWithFrame:CGRectMake(5.0, height, CONTROLLER_RIGHT_ITEM_WIDTH, CONTROLLER_RIGHT_ITEM_HEIGHT*rightItemCount)]; controllerRightBg.layer.cornerRadius = 1.0f; [controllerRightBg setAlpha:0.5]; [controllerRightBg setBackgroundColor:XBlack]; self.controllerRightBg = controllerRightBg; [self.view addSubview:controllerRightBg]; [self.controllerRightBg setHidden:YES]; UIView *controllerRight = [[UIView alloc] initWithFrame:CGRectMake(5.0, height, CONTROLLER_RIGHT_ITEM_WIDTH, CONTROLLER_RIGHT_ITEM_HEIGHT*rightItemCount)]; self.controllerRight = controllerRight; [self.view addSubview:controllerRight]; [self.controllerRight setHidden:YES]; //分隔线 for (int i=1; i < rightItemCount; i++) { UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0.0, i*CONTROLLER_RIGHT_ITEM_HEIGHT+1.0*(i-1), CONTROLLER_RIGHT_ITEM_WIDTH, 1.0)]; lineView.backgroundColor = XWhite; [controllerRight addSubview:lineView]; } for(int i=0;i=8.0) { CGAffineTransform transform = CGAffineTransformMakeScale(height/(width*4/3),1.0f); self.remoteView.transform = transform; }else{ CGAffineTransform transform = CGAffineTransformMakeScale(width/(height*4/3),1.0f); self.remoteView.transform = transform; } [UIView commitAnimations]; } } } #pragma mark- 暂停 挂断 -(void)stopGLViewVideo{ if(!self.isReject){ self.isReject = !self.isReject; while (_isPlaying) { usleep(50*1000); } [[P2PClient sharedClient] p2pHungUp]; self.remoteView.isQuitMonitorInterface = NO;//rtsp监控界面弹出修改 } } #pragma mark - 隐藏监控连接中的UI -(void)hiddenMonitoringUI:(BOOL)isHidden callErrorInfo:(NSDictionary*)info isReCall:(BOOL)isReCall{ if (isHidden) { [self.yProgressView stop]; [self.yProgressView setHidden:YES]; [self.labelTip setHidden:YES]; [self.promptButton setEnabled:NO]; [self.promptButton setHidden:YES]; [self.stopBtnH setEnabled:YES]; }else{ if (isReCall) { self.yProgressView.backgroundView.image = LXImageWithImageName(@"monitor_press.png"); [self.yProgressView start]; self.labelTip.text = [NSString stringWithFormat:@"%@",NSLocalizedString(@"monitor_out_prompt", nil)]; [self.promptButton setEnabled:NO]; self.stopImageViewH.image = LXImageWithImageName(@"monitor_stop_h.png"); // 禁用 底部栏暂停按钮 [self.stopBtnH setEnabled:NO]; }else{ if (_isStop) { //暂停 self.yProgressView.angle = 0.0f; self.yProgressView.backgroundView.image = LXImageWithImageName(@"ifishCamera_start"); int errorFlag = [[info objectForKey:@"errorFlag"] intValue]; self.labelTip.text = [self getCallErrorStringWith:errorFlag]; self.stopImageViewH.image = LXImageWithImageName(@"monitor_on_h.png"); }else{ self.yProgressView.angle = 0.0f; self.yProgressView.backgroundView.image = LXImageWithImageName(@"ifishCamera_start"); int errorFlag = [[info objectForKey:@"errorFlag"] intValue]; //int errorFlag = CALL_ERROR_HANGUP ; self.labelTip.text = [self getCallErrorStringWith:errorFlag]; self.stopImageViewH.image = LXImageWithImageName(@"monitor_on_h.png"); } self.yProgressView.angle = 0.0f; [self.yProgressView stop]; int errorFlag = [[info objectForKey:@"errorFlag"] intValue]; self.labelTip.text = [self getCallErrorStringWith:errorFlag]; [self.promptButton setEnabled:YES]; [self.stopBtnH setEnabled:YES]; } [self.yProgressView setHidden:NO]; [self.labelTip setHidden:NO]; [self.promptButton setHidden:NO]; [self.canvasView bringSubviewToFront:self.promptButton]; } } -(NSString *)getCallErrorStringWith:(int)errorFlag{ switch(errorFlag) { case CALL_ERROR_NONE: { return NSLocalizedString(@"id_unknown_error", nil); } break; case CALL_ERROR_DESID_NOT_ENABLE: { return NSLocalizedString(@"id_disabled", nil); } break; case CALL_ERROR_DESID_OVERDATE: { return NSLocalizedString(@"id_overdate", nil); } break; case CALL_ERROR_DESID_NOT_ACTIVE: { return NSLocalizedString(@"id_inactived", nil); } break; case CALL_ERROR_DESID_OFFLINE: { return NSLocalizedString(@"id_offline", nil); } break; case CALL_ERROR_DESID_BUSY: { return NSLocalizedString(@"id_busy", nil); } break; case CALL_ERROR_DESID_POWERDOWN: { return NSLocalizedString(@"id_powerdown", nil); } break; case CALL_ERROR_NO_HELPER: { return NSLocalizedString(@"id_connect_failed", nil); } break; case CALL_ERROR_HANGUP: { return NSLocalizedString(@"id_hangup", nil); break; } case CALL_ERROR_TIMEOUT: { return NSLocalizedString(@"id_timeout", nil); } break; case CALL_ERROR_INTER_ERROR: { return NSLocalizedString(@"id_internal_error", nil); } break; case CALL_ERROR_RING_TIMEOUT: { return NSLocalizedString(@"id_no_accept", nil); } break; case CALL_ERROR_PW_WRONG: { return NSLocalizedString(@"id_password_error", nil); } break; case CALL_ERROR_CONN_FAIL: { return NSLocalizedString(@"id_connect_failed", nil); } break; case CALL_ERROR_NOT_SUPPORT: { return NSLocalizedString(@"id_not_support", nil); } break; default: { return NSLocalizedString(@"id_unknown_error", nil); } break; } } -(void)didHiddenMonitorUIWith:(BOOL)isAfterRender{ if (!isAfterRender) { [self.controllerRightBg setAlpha:0.0]; [self.controllerRight setAlpha:0.0]; [self.bottomBarView setAlpha:0.0]; [self.customBorderButton setAlpha:0.0]; [self.leftView setAlpha:0.0]; [self.focalLengthView setAlpha:0.0]; [self.pressView setAlpha:0.0]; }else{ [self.controllerRightBg setAlpha:0.5]; [self.controllerRight setAlpha:1.0]; [self.bottomBarView setAlpha:1.0]; [self.customBorderButton setAlpha:0.5]; [self.leftView setAlpha:0.5]; [self.focalLengthView setAlpha:1.0]; [self.pressView setAlpha:1.0]; } } -(void)monitorP2PCall{ NSString *newPassword = GIWEI_INITPASS; NSString *cameraPass = [Utils GetTreatedPassword:newPassword]; [[P2PClient sharedClient] p2pCallWithId:self.kanHuCamera.cameraId password:cameraPass callType:P2PCALL_TYPE_MONITOR]; [[P2PClient sharedClient] setP2pCallState:P2PCALL_STATUS_CALLING]; BOOL isBCalled = [[P2PClient sharedClient] isBCalled]; P2PCallType type = [[P2PClient sharedClient] p2pCallType]; NSString *callId = [[P2PClient sharedClient] callId]; //NSString *callPassword = [[P2PClient sharedClient] callPassword]; if(!isBCalled){ BOOL isApMode = ([[AppDelegate sharedDefault]dwApContactID] != 0); if (!isApMode) { [[P2PClient sharedClient] p2pCallWithId:callId password:cameraPass callType:type]; } else { [[P2PClient sharedClient] p2pCallWithId:@"1" password:cameraPass callType:type]; } } } #pragma mark - 开始渲染监控画面 - (void)renderView { _isPlaying = YES; GAVFrame * m_pAVFrame ; while (!self.isReject) { //NSLog(@"ShopKanHuP2PViewController while 渲染监控画面"); if(fgGetVideoFrameToDisplay(&m_pAVFrame)) { if (!_isOkRenderVideoFrame) { _isOkRenderVideoFrame = YES; _isOkFirstRenderVideoFrame = YES; dispatch_async(dispatch_get_main_queue(), ^{ //隐藏监控连接中的UI [self hiddenMonitoringUI:YES callErrorInfo:nil isReCall:NO]; [self didHiddenMonitorUIWith:YES]; }); //设置默认高清 [self setGaoQingHuoBiaoQing]; } [self.remoteView render:m_pAVFrame]; vReleaseVideoFrame(); } usleep(10000); } _isPlaying = NO; } #pragma mark - 竖屏时,显示状态栏 -(BOOL)prefersStatusBarHidden { return NO; } #pragma mark - 屏幕Autorotate -(BOOL)shouldAutorotate{ return YES; } #pragma mark 屏幕支持的旋转方向 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interface { return (interface == UIInterfaceOrientationPortrait || interface == UIInterfaceOrientationLandscapeRight); } // #ifdef IOS6 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationLandscapeRight; } - (BOOL)shouldAutorotate { return NO; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscapeRight; } #endif // #pragma mark 支持哪些方向 -(UIInterfaceOrientationMask)supportedInterfaceOrientations{ if (_isCanAutoOrientation) { return UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskLandscapeRight; } return UIInterfaceOrientationMaskPortrait; } #pragma mark 一开始希望的屏幕方向 -(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ return UIInterfaceOrientationPortrait; } #pragma mark - 屏幕旋转 -(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (toInterfaceOrientation == UIInterfaceOrientationPortrait) { [self quitFullController]; } else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) { } else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { [self enterFullController]; } } - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { NSLog(@"willRotateToInterfaceOrientation:(UIInterfaceOrientation)"); } #pragma mark 屏幕旋转(退出全屏) -(void)quitFullController{ if (self.scrollView){ [self.scrollView setZoomScale:1.0]; } self.isFullScreen = NO; [[UIApplication sharedApplication] setStatusBarHidden:NO]; self.navigationController.navigationBar.hidden = NO; //隐藏横屏里的控件 [self.controllerRightBg setHidden:YES]; [self.controllerRight setHidden:YES]; [self.bottomBarView setHidden:YES]; [self.customBorderButton setHidden:YES]; [self.leftView setHidden:YES]; if (self.isSupportLightSwitch) { [self.lightButton setHidden:YES]; } if (self.isSupportFocalLength) { [self.focalLengthView setHidden:YES]; } //显示竖屏里的控件 [self disHideSubControlerBootomm]; [self.midToolHView setHidden:NO]; [self.bottomToolHView setHidden:NO]; //[self.baoGaoToolHView setHidden:NO]; [self.HbootmView setHidden:NO]; //视频监控连接中的背景图片 //进入竖屏时,调整frame self.canvasView.frame = self.canvasframe; //视频监控连接中的背景图片 NSString *filePath = [Utils getHeaderFilePathWithId:[[P2PClient sharedClient] callId]]; UIImage *headImg = [UIImage imageWithContentsOfFile:filePath]; if(headImg==nil){ headImg = [UIImage imageNamed:@"ic_header.png"]; } self.canvasView.layer.contents = (id)headImg.CGImage; self.remoteView.frame = CGRectMake(0.0, 0.0, self.canvasframe.size.width, self.canvasframe.size.height); NSString * plist = [[NSBundle mainBundle] pathForResource:@"Common-Configuration" ofType:@"plist"]; NSDictionary * dic = [NSDictionary dictionaryWithContentsOfFile:plist]; BOOL isSupportZoom = [dic[@"isSupportZoom"] boolValue]; if (isSupportZoom) { //退出全屏时,要将remoteView添加回到canvasView if (self.remoteView.superview) { [self.remoteView removeFromSuperview]; } //监控界面缩放 if (self.scrollView){ if (self.scrollView.superview) { [self.scrollView removeFromSuperview]; } _scrollView = nil; } [self.canvasView addSubview:self.remoteView]; } //视频监控连接中的文字提示,以及旋转 //进入横屏时,调整frame self.promptButton.frame = CGRectMake(0.0, 0.0, self.canvasView.frame.size.width, self.canvasView.frame.size.height); //上面的canvasView重新add了remoteView [self.canvasView bringSubviewToFront:self.promptButton]; NSString *labelTipText = [NSString stringWithFormat:@"%@",NSLocalizedString(@"玩命加载中...", nil)]; CGSize size = [labelTipText sizeWithFont:XFontBold_16]; //旋转图片 CGFloat tipHeight = size.height + LOADINGPRESSVIEW_WIDTH_HEIGHT; self.yProgressView.frame = CGRectMake((self.canvasView.frame.size.width-LOADINGPRESSVIEW_WIDTH_HEIGHT)/2, (self.canvasView.frame.size.height-tipHeight)/2, LOADINGPRESSVIEW_WIDTH_HEIGHT, LOADINGPRESSVIEW_WIDTH_HEIGHT); //文字 self.labelTip.frame = CGRectMake((self.canvasView.frame.size.width-size.width)/2, CGRectGetMaxY(self.yProgressView.frame), size.width+10.0, size.height); //左边的按住说话弹出的声音图标 //退出横屏时,调整frame self.pressView.frame = CGRectMake(10, self.canvasframe.size.height+NAVIGATION_BAR_HEIGHT-PRESS_LAYOUT_WIDTH_AND_HEIGHT, PRESS_LAYOUT_WIDTH_AND_HEIGHT/2, PRESS_LAYOUT_WIDTH_AND_HEIGHT); } #pragma mark - 屏幕旋转(进入全屏) -(void)enterFullController{ //ios 9 self.isFullScreen = YES; self.navigationController.navigationBar.hidden = YES; [[UIApplication sharedApplication] setStatusBarHidden:YES]; //隐藏竖屏里的控件 [self hideSubControlerBootomm]; [self.midToolHView setHidden:YES]; //[self.baoGaoToolHView setHidden:YES]; [self.HbootmView setHidden:YES]; [self.bottomToolHView setHidden:YES]; //显示横屏里的控件 [self.controllerRightBg setHidden:NO]; [self.controllerRight setHidden:NO]; [self.bottomBarView setHidden:NO]; [self.customBorderButton setHidden:NO]; [self.leftView setHidden:NO]; if (self.isSupportLightSwitch) { [self.lightButton setHidden:NO]; } if (self.isSupportFocalLength) { [self.focalLengthView setHidden:YES];//横屏也隐藏变焦控件 } //监控横屏rect CGFloat width = _monitorInterfaceW; CGFloat height = _monitorInterfaceH; //视频监控连接中的背景图片 //进入横屏时,调整frame self.canvasView.frame = CGRectMake(0.0, 0.0, width, height); self.canvasView.layer.contents = (id)self.fullScreenBgView; //视频监控连接中的文字提示,以及旋转 //进入横屏时,调整frame self.promptButton.frame = self.canvasView.frame; NSString *labelTipText = [NSString stringWithFormat:@"%@",NSLocalizedString(@"玩命加载中...", nil)]; CGSize size = [labelTipText sizeWithFont:XFontBold_16]; //旋转图片 CGFloat tipHeight = size.height + LOADINGPRESSVIEW_WIDTH_HEIGHT; self.yProgressView.frame = CGRectMake((width-LOADINGPRESSVIEW_WIDTH_HEIGHT)/2, (height-tipHeight)/2, LOADINGPRESSVIEW_WIDTH_HEIGHT, LOADINGPRESSVIEW_WIDTH_HEIGHT); //文字 self.labelTip.frame = CGRectMake((width-size.width)/2, CGRectGetMaxY(self.yProgressView.frame), size.width+10.0, size.height); //进入横屏,修改remoteView的frame BOOL is16B9 = [[P2PClient sharedClient] is16B9]; if(is16B9){ CGFloat finalWidth = height*16/9; CGFloat finalHeight = height; if(finalWidth>width){ finalWidth = width; finalHeight = width*9/16; }else{ finalWidth = height*16/9; finalHeight = height; } self.remoteView.frame = CGRectMake((width-finalWidth)/2, (height-finalHeight)/2, finalWidth, finalHeight); }else{ self.remoteView.frame = CGRectMake((width-height*4/3)/2, 0, height*4/3, height); } /* *1. 进入全屏时,创建一个缩放控件 *2. 将remoteView添加到scrollView上面(注意,退出全屏时,要将remoteView添加回到canvasView) */ NSString * plist = [[NSBundle mainBundle] pathForResource:@"Common-Configuration" ofType:@"plist"]; NSDictionary * dic = [NSDictionary dictionaryWithContentsOfFile:plist]; BOOL isSupportZoom = [dic[@"isSupportZoom"] boolValue]; if (isSupportZoom) { UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, width, height)]; scrollView.multipleTouchEnabled = YES; scrollView.minimumZoomScale = 1.0; scrollView.maximumZoomScale = 4.0; scrollView.delegate = self; scrollView.backgroundColor = [UIColor clearColor]; if (self.remoteView.superview) { [self.remoteView removeFromSuperview]; } [scrollView addSubview:self.remoteView]; [self.canvasView addSubview:scrollView]; self.scrollView = scrollView; } //进入横屏,修改lightButton和progressView的frame self.progressView.frame = CGRectMake(self.remoteView.frame.size.width-30.0-20.0, (self.remoteView.frame.size.height-30.0)/2, 30.0, 30.0); self.lightButton.frame = CGRectMake(self.remoteView.frame.size.width-30.0-20.0, (self.remoteView.frame.size.height-30.0)/2, 30.0, 30.0); //进入横屏,修改焦距控件的frame //宽、高 CGFloat focalLengthView_w = 40.0; CGFloat focalLengthView_h = 180.0; //焦距控件与屏幕右边框的间距 CGFloat space_FocalLView_Screen = (width - self.remoteView.frame.size.width)/2+20+focalLengthView_w; self.focalLengthView.frame = CGRectMake(width-space_FocalLView_Screen, height-self.bottomBarView.frame.size.height-20.0-focalLengthView_h, focalLengthView_w, focalLengthView_h); //左边的按住说话弹出的声音图标 //进入横屏时,调整frame self.pressView.frame = CGRectMake(10, height-PRESS_LAYOUT_WIDTH_AND_HEIGHT-BOTTOM_BAR_HEIGHT, PRESS_LAYOUT_WIDTH_AND_HEIGHT/2, PRESS_LAYOUT_WIDTH_AND_HEIGHT); //设置高清 或标清 // [self setGaoQingHuoBiaoQing]; //设置横屏底部工具栏3秒隐藏 [self hideBootommViewAfterSecondes]; } -(void)hideSubControlerBootomm{ } -(void)disHideSubControlerBootomm{ } #pragma mark - 设置标清或高清 //由于要隐藏掉 画质选项卡 这里重写方法 设置视频默认高清 或标清 -(void)setGaoQingHuoBiaoQing{ BOOL is16B9 = [[P2PClient sharedClient] is16B9]; BOOL is960P = [[P2PClient sharedClient] is960P]; //右边的画质图标 int rightItemCount = 0; if(is16B9 || is960P){ rightItemCount = 3; }else{ rightItemCount = 2; } //设置高清 if (rightItemCount==3) { [[P2PClient sharedClient] sendCommandType:USR_CMD_VIDEO_CTL andOption:7]; [self updateRightButtonState:CONTROLLER_BTN_TAG_HD]; }else if (rightItemCount == 2){ //设置标清 [[P2PClient sharedClient] sendCommandType:USR_CMD_VIDEO_CTL andOption:5]; [self updateRightButtonState:CONTROLLER_BTN_TAG_SD]; } } #pragma mark - 设置高清、标清选中 -(void)updateRightButtonState:(NSInteger)tag{ for(UIView *view in self.controllerRight.subviews){ UILabel *labelHD = (UILabel *)[view viewWithTag:CONTROLLER_LABEL_TAG_HD]; if (labelHD) { labelHD.textColor = XWhite; } UILabel *labelSD = (UILabel *)[view viewWithTag:CONTROLLER_LABEL_TAG_SD]; if (labelSD) { labelSD.textColor = XWhite; } UILabel *labelLD = (UILabel *)[view viewWithTag:CONTROLLER_LABEL_TAG_LD]; if (labelLD) { labelLD.textColor = XWhite; } } UIButton *button = (UIButton*)[self.controllerRight viewWithTag:tag]; //重新调整监控画面 UIButton *rButton = (UIButton *)[self.bottomBarView viewWithTag:CONTROLLER_BTN_TAG_RESOLUTION]; if (tag == CONTROLLER_BTN_TAG_HD) { UILabel *label = (UILabel *)[button viewWithTag:CONTROLLER_LABEL_TAG_HD]; label.textColor = XBlue; //[rButton setTitle:NSLocalizedString(@"HD", nil) forState:UIControlStateNormal]; [rButton setTitle:NSLocalizedString(@"高清", nil) forState:UIControlStateNormal]; }else if(tag == CONTROLLER_BTN_TAG_SD){ UILabel *label = (UILabel *)[button viewWithTag:CONTROLLER_LABEL_TAG_SD]; label.textColor = XBlue; [rButton setTitle:NSLocalizedString(@"标清", nil) forState:UIControlStateNormal]; //[rButton setTitle:NSLocalizedString(@"SD", nil) forState:UIControlStateNormal]; }else if (tag == CONTROLLER_BTN_TAG_LD){ UILabel *label = (UILabel *)[button viewWithTag:CONTROLLER_LABEL_TAG_LD]; label.textColor = XBlue; [rButton setTitle:NSLocalizedString(@"流畅", nil) forState:UIControlStateNormal]; //[rButton setTitle:NSLocalizedString(@"LD", nil) forState:UIControlStateNormal]; } [self didHiddenResolutionInterface]; } @end