ifish/Ifish/controllers/IfishTabControllers/探索/IfishLive/IfishP2PPlayView/IfishP2PVideoPlayView.m

935 lines
38 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// IfishP2PVideoPlayView.m
// Ifish
//
// Created by imac on 16/11/11.
// Copyright © 2016年 lianxiang. All rights reserved.
//
#import "IfishP2PVideoPlayView.h"
#import "Utils.h"
#import "P2PClient.h"
#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)
@implementation IfishP2PVideoPlayView
// 快速创建View的方法
+ (instancetype)videoPlayView
{
return [[[NSBundle mainBundle] loadNibNamed:@"IfishP2PVideoPlayView" owner:nil options:nil] firstObject];
}
-(void)awakeFromNib{
[super awakeFromNib];
[self connectDevice];
self.isShowControllerBar = YES;
self.isVideoModeHD = NO;
_isReject=YES;
_isStop = NO;
_isOkFirstRenderVideoFrame = YES;
//监控竖屏时,各控件初始化(先)
[self initComponentForPortrait];
//监控横屏时,各控件初始化(后)
[self initComponentForHorizontalScreen];
[self cameraConnectSeting];
}
-(void)cameraConnectSeting{
//rtsp监控界面弹出修改
[self monitorP2PCall];
//设置代理
[[P2PClient sharedClient] setDelegate:self];
[self hiddenMonitoringUI:NO callErrorInfo:nil isReCall:YES];
}
//rtsp监控界面弹出修改
-(void)monitorP2PCall{
NSString *newPassword = GIWEI_INITPASS;
NSString *cameraPass = [Utils GetTreatedPassword:newPassword];
NSString *cameraId = @"3573889";
[[P2PClient sharedClient] p2pCallWithId:cameraId password:cameraPass callType:P2PCALL_TYPE_MONITOR];
// [[P2PClient sharedClient] p2pCallWithId:self.contact.cameraId password:self.contact.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];
if(!isBCalled){
BOOL isApMode = ([[AppDelegate sharedDefault]dwApContactID] != 0);
if (!isApMode)
{
//[[P2PClient sharedClient] p2pCallWithId:callId password:self.contact.cameraPass callType:type];
[[P2PClient sharedClient] p2pCallWithId:callId password:cameraPass callType:type];
}
else
{
//[[P2PClient sharedClient] p2pCallWithId:@"1" password:self.contact.cameraPass callType:type];
[[P2PClient sharedClient] p2pCallWithId:@"1" password:cameraPass callType:type];
}
}
}
-(void)initComponentForPortrait{
//视频监控连接中的背景图片
NSString *filePath = [Utils getHeaderFilePathWithId:self.contact.cameraId];
UIImage *headImg = [UIImage imageWithContentsOfFile:filePath];
if(headImg==nil){
headImg = LXImageWithImageName(@"ic_header.png");
}
self.canvasView.layer.contents = (id)headImg.CGImage;
_yProgressView.backgroundView.image = LXImageWithImageName(@"monitor_press.png");
[_yProgressView start];
self.remoteView.delegate= self;
[self.remoteView.layer setMasksToBounds:YES];
//_remoteView 添加点击手势现实和隐藏 midToolHView
UITapGestureRecognizer *appermidToolView=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onSingleTap)];
[appermidToolView setCancelsTouchesInView:YES];
[appermidToolView setDelaysTouchesEnded:YES];
[self.canvasView addGestureRecognizer:appermidToolView];
}
#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 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 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<rightItemCount;i++){
TouchButton *button = [self getBottomBarButton];
button.frame = CGRectMake(0, (CONTROLLER_RIGHT_ITEM_HEIGHT+1.0)*i, CONTROLLER_RIGHT_ITEM_WIDTH, CONTROLLER_RIGHT_ITEM_HEIGHT);
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, button.frame.size.width, button.frame.size.height)];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = XWhite;
label.font = [UIFont boldSystemFontOfSize:16.0];
if(rightItemCount==2){//NPC
//无高清
if(i==0){
//label.text = NSLocalizedString(@"SD", nil);
label.text = NSLocalizedString(@"标清", nil);
label.tag = CONTROLLER_LABEL_TAG_SD;
button.tag = CONTROLLER_BTN_TAG_SD;
}else if(i==1){
//label.text = NSLocalizedString(@"LD", nil);
label.text = NSLocalizedString(@"流畅", nil);
label.tag = CONTROLLER_LABEL_TAG_LD;
label.textColor = XBlue;
button.tag = CONTROLLER_BTN_TAG_LD;
}
}else if(rightItemCount==3){//IPC
//有高清
if(i==0){
//label.text = NSLocalizedString(@"HD", nil);
label.text = NSLocalizedString(@"高清", nil);
label.tag = CONTROLLER_LABEL_TAG_HD;
button.tag = CONTROLLER_BTN_TAG_HD;
}else if(i==1){
label.text = NSLocalizedString(@"标清", nil);
//label.text = NSLocalizedString(@"SD", nil);
label.tag = CONTROLLER_LABEL_TAG_SD;
label.textColor = XBlue;
button.tag = CONTROLLER_BTN_TAG_SD;
}else if(i==2){
label.text = NSLocalizedString(@"流畅", nil);
//label.text = NSLocalizedString(@"LD", nil);
label.tag = CONTROLLER_LABEL_TAG_LD;
button.tag = CONTROLLER_BTN_TAG_LD;
//
}
}
[button addSubview:label];
[button addTarget:self action:@selector(onControllerBtnPress:) forControlEvents:UIControlEventTouchUpInside];
[controllerRight addSubview:button];
}
//进入横屏时,显示
//退出横屏时,隐藏
//底部半透明块
UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0.0, height-BOTTOM_BAR_HEIGHT, width, BOTTOM_BAR_HEIGHT)];
[bottomView setAlpha:0.5];
[bottomView setBackgroundColor:XBlack];
self.bottomView = bottomView;
[self addSubview:bottomView];
[self.bottomView setHidden:YES];
UIView *bottomBarView = [[UIView alloc] initWithFrame:CGRectMake(0.0, height-BOTTOM_BAR_HEIGHT, width, BOTTOM_BAR_HEIGHT)];
self.bottomBarView = bottomBarView;
[self addSubview:bottomBarView];
[self.bottomBarView setHidden:YES];
//左边的画质图标
//由于要隐藏掉此处改为暂停按钮
TouchButton *resolutionButton = [self getBottomBarButton];
[resolutionButton setFrame:CGRectMake(5.0, (BOTTOM_BAR_HEIGHT-RESOLUTION_BTN_H)/2.0, CONTROLLER_RIGHT_ITEM_WIDTH, RESOLUTION_BTN_H)];
resolutionButton.tag = CONTROLLER_BTN_TAG_RESOLUTION;
if (rightItemCount == 2) {
[resolutionButton setTitle:NSLocalizedString(@"LD", nil) forState:UIControlStateNormal];
}else{
[resolutionButton setTitle:NSLocalizedString(@"SD", nil) forState:UIControlStateNormal];
}
[resolutionButton setBackgroundImage:LXImageWithImageName(@"ic_ctl_resolution.png") forState:UIControlStateNormal];
[resolutionButton addTarget:self action:@selector(selectResolutionClick:) forControlEvents:UIControlEventTouchUpInside];
//暂时隐藏只选择高清 现在又放出来了
[bottomBarView addSubview:resolutionButton];
//全屏暂停回来 openGlView 出现问题scale改变
// _HorizontalStopBtn=[UIButton buttonWithType:UIButtonTypeCustom];
//
// _HorizontalStopBtn.frame = CGRectMake(5.0, (BOTTOM_BAR_HEIGHT-RESOLUTION_BTN_H)/2.0, CONTROLLER_LEFT_ITEM_WIDTH, RESOLUTION_BTN_H);
// _HorizontalStopBtn.tag =VT_STOPBTN_TAG;
// [_HorizontalStopBtn setBackgroundImage:LXImageWithImageName(@"monitor_stop_h.png") forState:UIControlStateNormal];
// [_HorizontalStopBtn addTarget:self action:@selector(HorizontalStopBtnPress:) forControlEvents:UIControlEventTouchUpInside];
// [bottomBarView addSubview:_HorizontalStopBtn];
//
//右边的切换屏幕图标
TouchButton *switchScreenButton = [self getBottomBarButton];
[switchScreenButton setFrame:CGRectMake(width-CONTROLLER_BTN_H_W-5.0, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W, CONTROLLER_BTN_H_W)];
switchScreenButton.tag = SWITCH_SCREEN_BUTTON_H_TAG;
[switchScreenButton setBackgroundImage:LXImageWithImageName(@"monitor_half_screen.png") forState:UIControlStateNormal];
[switchScreenButton addTarget:self action:@selector(onVerticalBtnPress:) forControlEvents:UIControlEventTouchUpInside];
[bottomBarView addSubview:switchScreenButton];
//右边的挂断图标
TouchButton *hungUpButton = [self getBottomBarButton];
[hungUpButton setFrame:CGRectMake(switchScreenButton.frame.origin.x-CONTROLLER_BTN_H_W-5.0, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W, CONTROLLER_BTN_H_W)];
hungUpButton.tag = CONTROLLER_BTN_TAG_HUNGUP;
[hungUpButton setBackgroundImage:LXImageWithImageName(@"ic_ctl_new_hungup.png") forState:UIControlStateNormal];
[hungUpButton addTarget:self action:@selector(onControllerBtnPress:) forControlEvents:UIControlEventTouchUpInside];
// [bottomBarView addSubview:hungUpButton];
//布防撤防、声音开关、截图开关、按住说话开关、开门按钮
UIView *controllBar = [[UIView alloc] initWithFrame:CGRectMake(CONTROLLER_RIGHT_ITEM_WIDTH+5.0, 0.0, width-CONTROLLER_RIGHT_ITEM_WIDTH-5.0-PUBLIC_WIDTH_OR_HEIGHT*2-5.0*2, PUBLIC_WIDTH_OR_HEIGHT)];
controllBar.backgroundColor = [UIColor clearColor];
self.controllBar = controllBar;
int btnCount = CONTROLLER_BTN_COUNT;
CGFloat firstControllerBtnX = (controllBar.frame.size.width-PUBLIC_WIDTH_OR_HEIGHT*btnCount)/2.0;
for(int i=0;i<btnCount;i++){
TouchButton *controllerBtn = [self getBottomBarButton];
controllerBtn.frame = CGRectMake(PUBLIC_WIDTH_OR_HEIGHT*i+firstControllerBtnX, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W,CONTROLLER_BTN_H_W);
if(i==0){//布防撤防
_btnDefence = controllerBtn;
_btnDefence.hidden = YES;
//LXImageWithImageName(@"long_press_lock.png")
controllerBtn.tag = CONTROLLER_BTN_TAG_DEFENCE_LOCK;
// if ([AppDelegate sharedDefault].mainController.contact.defenceState == DEFENCE_STATE_ON || [AppDelegate sharedDefault].contact.defenceState == DEFENCE_STATE_ON) {
// [controllerBtn setBackgroundImage:LXImageWithImageName(@"ic_ctl_lock_on.png") forState:UIControlStateNormal];
// self.isDefenceOn = YES;
// }else if([AppDelegate sharedDefault].mainController.contact.defenceState == DEFENCE_STATE_OFF || [AppDelegate sharedDefault].contact.defenceState == DEFENCE_STATE_OFF){
// [controllerBtn setBackgroundImage:LXImageWithImageName(@"ic_ctl_lock_off.png") forState:UIControlStateNormal];
// self.isDefenceOn = NO;
// }
}else if(i==1){//声音开关
controllerBtn.tag = CONTROLLER_BTN_TAG_SOUND;
[controllerBtn setBackgroundImage:LXImageWithImageName(@"ic_ctl_new_sound_on.png") forState:UIControlStateNormal];
controllerBtn.hidden = YES;
}else if(i==2){//按住说话开关
controllerBtn.tag = CONTROLLER_BTN_TAG_PRESS_TALK;
[controllerBtn setBackgroundImage:LXImageWithImageName(@"ic_ctl_new_send_audio.png") forState:UIControlStateNormal];
[controllerBtn setBackgroundImage:LXImageWithImageName(@"ic_ctl_new_send_audio_p.png") forState:UIControlStateHighlighted];
controllerBtn.hidden = YES;
}else if(i==3){//截图开关
controllerBtn.tag = CONTROLLER_BTN_TAG_SCREENSHOT;
[controllerBtn setBackgroundImage:LXImageWithImageName(@"ic_ctl_new_screenshot.png") forState:UIControlStateNormal];
controllerBtn.hidden = YES;
}else if(i==4){//输出6秒高电平脉冲按钮
controllerBtn.tag = CONTROLLER_BTN_TAG_GPIO1_0;
[controllerBtn setBackgroundImage:LXImageWithImageName(@"long_press_lock.png") forState:UIControlStateNormal];
controllerBtn.hidden = YES;
}
if(i==2){
//对讲按钮
}else{
[controllerBtn addTarget:self action:@selector(onControllerBtnPress:) forControlEvents:UIControlEventTouchUpInside];
}
[controllBar addSubview:controllerBtn];
}
[bottomBarView addSubview:controllBar];
//button arrow
//进入横屏时,显示
//退出横屏时,隐藏
CGFloat customBorderButtonY = (height - CUSTOM_BORDER_BUTTON_HEIGHT)/2.0;
CustomBorderButton *customBorderButton=[CustomBorderButton buttonWithType:UIButtonTypeCustom];
customBorderButton.frame = CGRectMake(0, customBorderButtonY, CUSTOM_BORDER_BUTTON_WIDTH, CUSTOM_BORDER_BUTTON_HEIGHT);
[customBorderButton setNeedLineTop:true left:true bottom:true right:true];
[customBorderButton setLineColorTop:[UIColor blackColor] left:[UIColor clearColor] bottom:[UIColor blackColor] right:[UIColor blackColor]];//用同一色边线
[customBorderButton setLineWidthTop:2.0 left:2.0 bottom:2.0 right:2.0];//设置线的粗细,这里可以随意调整
[customBorderButton setRadiusTopLeft:0 topRight:8.0 bottomLeft:0 bottomRight:8.0];//边线加弧度
[customBorderButton setClipsToBoundsWithBorder:true];//裁剪掉边线外面的区域
[customBorderButton setFillColor:[UIColor darkGrayColor]];//增加内部填充颜色
[customBorderButton setAlpha:0.5];
[customBorderButton setOpaque:YES];
[customBorderButton setImage:[UIImage imageNamed:@"button_right"] forState:UIControlStateNormal];
[customBorderButton setImage:[UIImage imageNamed:@"button_right_selected"] forState:UIControlStateHighlighted];
[customBorderButton addTarget:self action:@selector(showLeftView:) forControlEvents:UIControlEventTouchUpInside];
self.customBorderButton = customBorderButton;
//左侧界面
//进入横屏时,显示
//退出横屏时,隐藏
CGFloat leftViewY = (height - LEFTVIEW_HEIGHT)/2.0;
CustomView *leftView = [[CustomView alloc] initWithFrame:CGRectMake(-LEFTVIEW_WIDTH, leftViewY, LEFTVIEW_WIDTH, LEFTVIEW_HEIGHT)];
[leftView setNeedLineTop:true left:true bottom:true right:true];
[leftView setLineColorTop:[UIColor blackColor] left:[UIColor blackColor] bottom:[UIColor blackColor] right:[UIColor blackColor]];//用同一色边线
[leftView setLineWidthTop:2.0 left:2.0 bottom:2.0 right:2.0];//设置线的粗细,这里可以随意调整
[leftView setRadiusTopLeft:8.0 topRight:8.0 bottomLeft:8.0 bottomRight:8.0];//边线加弧度
[leftView setClipsToBoundsWithBorder:true];//裁剪掉边线外面的区域
[leftView setFillColor:[UIColor darkGrayColor]];//增加内部填充颜色
[leftView setAlpha:0.5];
[leftView setOpaque:YES];
self.leftView = leftView;
//[self.leftView setHidden:YES];
CGFloat xSpace = 4.0;
CGFloat ySpace = 4.0;
CGFloat numLabelW = 12.0;
CGFloat buttonW = (leftView.frame.size.width - numLabelW - xSpace*4)/2.0;
CGFloat buttonH = (leftView.frame.size.height - ySpace*4)/3.0;
int tag = 10;
for (int i = 0; i < 3; i++) {
UIButton *onButton = [UIButton buttonWithType:UIButtonTypeCustom];
onButton.frame = CGRectMake(xSpace, (buttonH+ySpace)*i+ySpace, buttonW, buttonH);
onButton.tag = tag++;
[onButton setTitle:@"ON" forState:UIControlStateNormal];
[onButton setTitleColor:XWhite forState:UIControlStateNormal];
onButton.titleLabel.font = XFontBold_12;
[onButton addTarget:self action:@selector(onOrOffButtonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.leftView addSubview:onButton];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(2*xSpace+buttonW, (buttonH+ySpace)*i+ySpace, numLabelW, buttonH)];
label.backgroundColor = [UIColor clearColor];
label.textColor = XWhite;
label.text = [NSString stringWithFormat:@"%d",i + 1];
label.font = XFontBold_12;
label.textAlignment = NSTextAlignmentCenter;
[self.leftView addSubview:label];
UIButton *offButton = [UIButton buttonWithType:UIButtonTypeCustom];
offButton.frame = CGRectMake(3*xSpace+buttonW +numLabelW, (buttonH+ySpace)*i+ySpace, buttonW, buttonH);
offButton.tag = tag++;
[offButton setTitle:@"OFF" forState:UIControlStateNormal];
[offButton setTitleColor:XWhite forState:UIControlStateNormal];
offButton.titleLabel.font = XFontBold_12;
[offButton addTarget:self action:@selector(onOrOffButtonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.leftView addSubview:offButton];
}
//右侧,灯控制按钮
//进入横屏时,显示,并调整frame
//退出横屏时,隐藏
//提示器
UIActivityIndicatorView *progressView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
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.remoteView addSubview:progressView];
self.progressView = progressView;
[self.progressView setHidden:YES];
//若设备支持灯设备时,则显示开关;若不支持,则隐藏
UIButton *lightButton = [UIButton buttonWithType:UIButtonTypeCustom];
lightButton.frame = CGRectMake(self.remoteView.frame.size.width-30.0-20.0, (self.remoteView.frame.size.height-30.0)/2, 30.0, 30.0);
lightButton.backgroundColor = [UIColor clearColor];
[lightButton setBackgroundImage:[UIImage imageNamed:@"lighton.png"] forState:UIControlStateNormal];
[lightButton addTarget:self action:@selector(btnClickToSetLightState:) forControlEvents:UIControlEventTouchUpInside];
[self.remoteView addSubview:lightButton];
[lightButton setHidden:YES];
self.lightButton = lightButton;
//进入横屏时,显示
//退出横屏时,隐藏
//焦距控件
//宽、高
CGFloat focalLengthView_w = 40.0;
CGFloat focalLengthView_h = 180.0;
//焦距控件与屏幕右边框的间距
CGFloat space_FocalLView_Screen = (width - self.remoteView.frame.size.width)/2+20+focalLengthView_w;
UIView *focalLengthView = [[UIView alloc] initWithFrame:CGRectMake(width-space_FocalLView_Screen, height-self.bottomBarView.frame.size.height-20.0-focalLengthView_h, focalLengthView_w, focalLengthView_h)];
if (!isSupportZoom) {//电子放大与焦距变焦不共存
[self addSubview:focalLengthView];
}
[focalLengthView setHidden:YES];
self.focalLengthView = focalLengthView;
//焦距伸长按钮
//宽、高
CGFloat elongationButton_w = 34.0;
CGFloat elongationButton_h = elongationButton_w*(46/43);
UIButton *elongationButton = [UIButton buttonWithType:UIButtonTypeCustom];
elongationButton.frame = CGRectMake((focalLengthView_w-elongationButton_w)/2, 0.0, elongationButton_w, elongationButton_h);
[elongationButton setBackgroundImage:[UIImage imageNamed:@"monitor_localLenght_zoom_normal.png"] forState:UIControlStateNormal];
[elongationButton setBackgroundImage:[UIImage imageNamed:@"monitor_localLenght_zoom_highlighted.png"] forState:UIControlStateHighlighted];
elongationButton.tag = FocalLength_Elongation_btnTag;
[elongationButton addTarget:self action:@selector(btnClickToChangeFocalLength:) forControlEvents:UIControlEventTouchUpInside];
[self.focalLengthView addSubview:elongationButton];
//拖动条
UISlider *focalLengthSlider = [[UISlider alloc] initWithFrame:CGRectMake(0.0, 0.0, focalLengthView_h-elongationButton_h*2, 30.0)];
focalLengthSlider.center = CGPointMake(self.focalLengthView.center.x-self.focalLengthView.frame.origin.x, self.focalLengthView.center.y-self.focalLengthView.frame.origin.y);
//设置旋转90度
focalLengthSlider.transform = CGAffineTransformMakeRotation(90*M_PI/180);
focalLengthSlider.minimumValue = 1.0;
focalLengthSlider.maximumValue = 15.0;
focalLengthSlider.value = 7.5;
focalLengthSlider.continuous = NO;//在手指离开的时候触发一次valueChange事件而不是在拖动的过程中不断触发valueChange事件
focalLengthSlider.tag = FocalLength_Change_sliderTag;
[focalLengthSlider addTarget:self action:@selector(btnClickToChangeFocalLength:) forControlEvents:UIControlEventValueChanged];
[self.focalLengthView addSubview:focalLengthSlider];
//焦距变短按钮
//宽、高
CGFloat shortenButton_w = elongationButton_w;
CGFloat shortenButton_h = elongationButton_h;
UIButton *shortenButton = [UIButton buttonWithType:UIButtonTypeCustom];
shortenButton.frame = CGRectMake((focalLengthView_w-shortenButton_w)/2, focalLengthView_h-shortenButton_h, shortenButton_w, shortenButton_h);
[shortenButton setBackgroundImage:[UIImage imageNamed:@"monitor_localLenght_narrow_normal.png"] forState:UIControlStateNormal];
[shortenButton setBackgroundImage:[UIImage imageNamed:@"monitor_localLenght_narrow_highlighted.png"] forState:UIControlStateHighlighted];
shortenButton.tag = FocalLength_Shorten_btnTag;
[shortenButton addTarget:self action:@selector(btnClickToChangeFocalLength:) forControlEvents:UIControlEventTouchUpInside];
[self.focalLengthView addSubview:shortenButton];
}
- (TouchButton *)getBottomBarButton//重新调整监控画面
{
TouchButton *button = [TouchButton buttonWithType:UIButtonTypeCustom];
[button setFrame:CGRectMake(0.0, 0.0, 50.0, 50.0)];
return button;
}
#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];
//Contact *contact = self.deviceArr[0];
NSString *newPassword = GIWEI_INITPASS;
NSString *cameraPass = [Utils GetTreatedPassword:newPassword];
NSString *cameraId = @"3573889";
[[P2PClient sharedClient] p2pCallWithId:cameraId password:cameraPass callType:P2PCALL_TYPE_MONITOR];
//[[P2PClient sharedClient] p2pCallWithId:self.contact.cameraId password:self.contact.cameraPass callType:P2PCALL_TYPE_MONITOR];
//NSLog(@"contact.contactPassword%@",self.contact.cameraPass);
}
}
#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 - 开始渲染监控画面
- (void)renderView
{
_isPlaying = YES;
/* GAVFrame * m_pAVFrame ;
while (!self.isReject)
{
NSLog(@" 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 - 设置标清或高清
//由于要隐藏掉 画质选项卡 这里重写方法 设置视频默认高清 或标清
-(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];
}
-(void)didHiddenResolutionInterface{
[UIView animateWithDuration:0.2 animations:^{
CGRect controllerRight = self.controllerRight.frame;
controllerRight.origin.y = _horizontalScreenH;
self.controllerRight.frame = controllerRight;
self.controllerRightBg.frame = controllerRight;
} completion:^(BOOL finished) {
self.isAlreadyShowResolution = NO;
}];
}
#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 setBackgroundImage:LXImageWithImageName(@"monitor_stop_h.png") forState:UIControlStateNormal];
// 禁用 底部栏暂停按钮
[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");
[self.stopBtnH setBackgroundImage:LXImageWithImageName(@"monitor_on_h.png") forState:UIControlStateNormal];
}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.stopBtnH setBackgroundImage:LXImageWithImageName(@"monitor_on_h.png") forState:UIControlStateNormal];
}
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];
}
}
-(void)didHiddenMonitorUIWith:(BOOL)isAfterRender{
if (!isAfterRender) {
[self.controllerRightBg setAlpha:0.0];
[self.controllerRight setAlpha:0.0];
[self.bottomView 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.bottomView setAlpha:0.5];
[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];
}
}
#pragma mark - 点击手势(单击)
-(void)onSingleTap
{
}
#pragma mark - openGLViewDelegate
-(void)onScreenShotted:(UIImage*)image
{
}
@end