// // YOUPAILCBaseVideoCallVC.m // LiveChat // // Created by 张灿 on 2018/9/17. // Copyright © 2018年 caicai. All rights reserved. // #import "YOUPAILCBaseVideoCallVC.h" #import "FUCamera.h" #import "FUManager.h" #import "FULiveModel.h" #import "FUAPIDemoBar.h" //#import "YOUPAIAGVideoProcessing.h" #import "AppDelegate.h" //add by leo v1.0.8 视频中守护 #import "YOUPAILPGuardHerVC.h" #import "UIViewController+TFPresent.h" #import "YOUPAIZYXianNvBangVC.h" #import "YOUPAILZVideoDiscountWindow.h" #import "YOUPAILCReportVC.h" #import #import #import "YOUPAIXRWalletVC.h" #import "LZAlertWindow.h" #import "YOUPAILZCommonGiftView.h" #import "YOUPAIHRRechargePayWindow.h" #import "SDCycleScrollView.h" #import "YOUPAIHRWebWindow.h" #import "YOUPAIZYAdvertWindow.h" #import "NIMMessageMaker.h" #import "YOUPAILCIMTool.h" @interface YOUPAILCBaseVideoCallVC () @property (assign,nonatomic) CGPoint youpaipstartPoint; //用来做清屏 @property (nonatomic, strong) FUCamera *youpaipmCamera; //Faceunity Camera @property (strong, nonatomic) FUAPIDemoBar *youpaipdemoBar; //Tool Bar @property (nonatomic, strong) FULiveModel *youpaipliveModel ; @property(nonatomic,assign)BOOL youpaipisRecordScreen; @property(nonatomic,strong)UIView *youpaiprecoderHideView; @property (nonatomic,strong)UIView *youpaipdemoBarBgV; @property (nonatomic,strong)UIButton *youpaipgiftPopBtn; @property (nonatomic, strong) NSMutableArray *youpaipgifts; // 礼物数据 @property (nonatomic, strong) NSMutableArray * youpaipgiftViews;// 礼物 @property (nonatomic,strong)SVGAPlayer *youpaipsvgaPlayer; @property (nonatomic,strong)SVGAParser *youpaipparser; @property (nonatomic, assign) BOOL youpaipisPlaySvga; @property(nonatomic,strong)UIButton *closeBtn; @property(nonatomic,strong)SDCycleScrollView* youpaipscrollView;//右下侧轮播 @property (nonatomic, strong) NSArray *youpaipbannerArray; @property (strong, nonatomic) YOUPAILCFirstRechargeModel *youpaipfirstRechargeModel; @end @implementation YOUPAILCBaseVideoCallVC //@synthesize consumer; -(BOOL)prefersStatusBarHidden { return YES; } - (FUAPIDemoBar*)youpaipdemoBar{ if (!_youpaipdemoBar) { _youpaipdemoBar = [[FUAPIDemoBar alloc] initWithFrame:CGRectMake(0, KScreenHeight-182, KScreenWidth, 182)]; if (Is_iPhoneX) { _youpaipdemoBar.frame = CGRectMake(0, KScreenHeight-182-30, KScreenWidth, 182); } _youpaipdemoBar.mDelegate = self ; } return _youpaipdemoBar ; } - (FUCamera *)youpaipmCamera { if (!_youpaipmCamera) { _youpaipmCamera = [[FUCamera alloc] init]; _youpaipmCamera.delegate = self; } return _youpaipmCamera; } - (void)dealloc{ NSLog(@"dealloc basevideo"); [[NSNotificationCenter defaultCenter] removeObserver:self]; [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; } - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.navigationController.navigationBarHidden = YES; [LCSaveData saveIsVideo:YES]; if (self.youpaipliveModel.type == FULiveModelTypeBeautifyFace) { [self demoBarSetBeautyDefultParams]; } [self.youpaipmCamera startCapture]; } - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; // if (self.youpaipsvgaPlayer) { // [self.youpaipsvgaPlayer removeFromSuperview]; // } [self.youpaipplayer stop]; //add by leo 此处会导致vc无法释放 self.youpaipplayer =nil; //add by leo 异常退出/被踢 显示处于视频中 [LCSaveData saveIsVideo:NO]; self.navigationController.navigationBarHidden = NO; } - (void)viewDidLoad{ [super viewDidLoad]; [self youpaifmonitorShot]; [self youpaifmonitorRecordVideo]; self.sx_disableInteractivePop = YES; self.youpaipchatArray = [NSMutableArray array]; self.youpaipsocketManager = [[LCWebSocketManager alloc]initWithDelegate:self serverUrl:self.youpaipvideoModel.youpaipsocket_url roomId:self.youpaipvideoModel.youpaiproom_id]; kAppDelegate.ksocketManager = self.youpaipsocketManager; NSString* path = [[NSBundle mainBundle] pathForResource:@"sound"ofType:@"bundle"]; NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/call_bg.mp3",path]]; self.youpaipplayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [self.youpaipplayer prepareToPlay]; self.youpaipplayer.numberOfLoops = -1; [self.youpaipplayer play]; [self youpaifinitView]; [self youpaifinitSvga]; [self youpaifinitAgora]; [self youpaifrequestBannerData]; // NSString* str=[AgoraRtcEngineKit getSdkVersion]; self.youpaipliveModel = [FUManager shareManager].dataSource[0][0]; //设置默认曝光度 [self.youpaipmCamera setExposureValue:0]; [self.youpaipmCamera startCapture]; [self demoBarSetBeautyDefultParams]; [[FUManager shareManager] loadFilter] ; [[FUManager shareManager] setAsyncTrackFaceEnable:NO]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youpaifkeyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youpaifkeyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youpaifwillResignActive) name:UIApplicationWillResignActiveNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youpaiflLogout) name:@"AbnormalLogout" object:nil]; } - (void)youpaiflLogout{ [self videoEnd:5]; } - (void)youpaifinitView{ self.youpaipremoteVideo = [[YMMagicView alloc]initWithFrame:CGRectMake(0,0,KScreenWidth,KScreenHeight)]; self.youpaipremoteVideo.backgroundColor = [UIColor clearColor]; [self.view addSubview:self.youpaipremoteVideo]; self.youpaiprecoderHideView = [[UIView alloc]init]; [self.youpaiprecoderHideView setBackgroundColor:[UIColor whiteColor]]; [self.youpaiprecoderHideView setHidden:YES]; [self.view addSubview:self.youpaiprecoderHideView]; UIView* msgCoverView = [[UIView alloc]initWithFrame:CGRectMake(-KScreenWidth, 0, KScreenWidth*2, KScreenHeight)]; msgCoverView.backgroundColor = [UIColor clearColor]; UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(youpaifmsgViewPanHandel:)]; [msgCoverView addGestureRecognizer:pan]; UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(youpaifdoubleTapHandel:)]; doubleTap.numberOfTapsRequired = 2; [msgCoverView addGestureRecognizer:doubleTap]; self.youpaipmsgCoverView = msgCoverView; [self.view addSubview:msgCoverView]; UIView* interView = [[UIView alloc]initWithFrame:CGRectMake(KScreenWidth, 0, KScreenWidth, KScreenHeight)]; interView.backgroundColor = [UIColor clearColor]; self.youpaipinterView = interView; [msgCoverView addSubview:interView]; //设置顶部按钮 UIButton* closeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [closeBtn setImage:[UIImage imageNamed:@"vqu_images_video_end"] forState:(UIControlStateNormal)]; self.closeBtn = closeBtn; [closeBtn addTarget:self action:@selector(youpaifcloseBtnClick) forControlEvents:(UIControlEventTouchUpInside)]; [self.youpaipinterView addSubview:closeBtn]; [closeBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.left.offset(14.0f); make.top.offset(StatusBarHeight + 4.0f); make.size.mas_offset(CGSizeMake(30.0f, 30.0f)); }]; closeBtn.hidden = YES; UIView *timeBgv = [[UIView alloc] init]; timeBgv.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7]; timeBgv.layer.cornerRadius = 10; timeBgv.layer.masksToBounds = YES; [self.youpaipinterView addSubview:timeBgv]; UILabel *durationLb = [UILabel new]; durationLb.textColor = [UIColor whiteColor]; durationLb.font = [UIFont monospacedDigitSystemFontOfSize:12 weight:(UIFontWeightRegular)]; durationLb.textAlignment = NSTextAlignmentCenter; durationLb.text = @"通话时长: 00:00:00"; [timeBgv addSubview:durationLb]; self.youpaiptimeLabel = durationLb; UILabel *hLine = [UILabel new]; hLine.backgroundColor = [UIColor whiteColor]; [timeBgv addSubview:hLine]; UILabel *remainLb = [UILabel new]; remainLb.textColor = [UIColor whiteColor]; remainLb.font = [UIFont monospacedDigitSystemFontOfSize:12 weight:(UIFontWeightRegular)]; remainLb.textAlignment = NSTextAlignmentCenter; remainLb.text = @"剩余时长: 00:00:00"; [timeBgv addSubview:remainLb]; self.youpaipcancallTimeLab = remainLb; [timeBgv mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(closeBtn.mas_bottom).offset(10); make.left.equalTo(closeBtn.mas_left).offset(0); }]; [durationLb mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(timeBgv.mas_top).offset(10); make.left.equalTo(timeBgv.mas_left).offset(10); make.right.equalTo(timeBgv.mas_right).offset(-10); }]; [hLine mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(durationLb.mas_bottom).offset(6); make.left.equalTo(timeBgv.mas_left).offset(10); make.right.equalTo(timeBgv.mas_right).offset(-10); make.height.mas_equalTo(0.7); }]; [remainLb mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(hLine.mas_bottom).offset(6); make.left.equalTo(timeBgv.mas_left).offset(10); make.right.equalTo(timeBgv.mas_right).offset(-10); make.bottom.equalTo(timeBgv.mas_bottom).offset(-10); }]; UIView *demoBarBgV = [[UIView alloc] initWithFrame:self.view.bounds]; demoBarBgV.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3f]; demoBarBgV.hidden = YES; [self.view addSubview:demoBarBgV]; self.youpaipdemoBarBgV = demoBarBgV; [demoBarBgV addSubview:self.youpaipdemoBar]; [self.youpaipdemoBar mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.offset(-SafeHeight); make.left.right.offset(0.0f); make.height.offset(182.0f); }]; // UITapGestureRecognizer* interTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(youpaifinterHandel:)]; // [self.demoBarBgV addGestureRecognizer:interTap]; self.youpaiplocalVideo = [[YMMagicView alloc]initWithFrame:CGRectMake(KScreenWidth-14.0f-90.0f,StatusBarHeight+4, 90.0f, 120.0f)]; self.youpaiplocalVideo.backgroundColor = [UIColor blackColor]; self.youpaiplocalVideo.layer.cornerRadius = 5.0; self.youpaiplocalVideo.layer.masksToBounds = YES; [self.view addSubview:self.youpaiplocalVideo]; self.youpaiplocalVideo.hidden = YES; UITapGestureRecognizer* localTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(youpaifloaclVideoHandel:)]; [self.youpaiplocalVideo addGestureRecognizer:localTap]; //右下侧轮播 SDCycleScrollView *bannerView1 = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(KScreenWidth - 12.0f - 49.0f, (KScreenHeight-50)/2, 50, 50.0f) delegate:self placeholderImage:[UIImage imageNamed:@""]]; self.youpaipscrollView = bannerView1; bannerView1.pageControlDotSize = CGSizeMake(0, 0); bannerView1.autoScrollTimeInterval = 3.0;//2s轮播 bannerView1.pageControlStyle = SDCycleScrollViewPageContolStyleNone; bannerView1.bannerImageViewContentMode = UIViewContentModeScaleAspectFit; bannerView1.backgroundColor = [UIColor clearColor]; [self.view addSubview:bannerView1]; bannerView1.hidden = YES; } /// 获取banner数据 - (void)youpaifrequestBannerData{ @weakify(self); [LCHttpHelper requestWithURLString:GetAdvert parameters:@{@"position":@"10"} needToken:YES type:(HttpRequestTypePost) success:^(id responseObject) { @strongify(self); NSDictionary* dict = (NSDictionary*)responseObject; NSInteger code = [[dict objectForKey:@"code"] integerValue]; if (code==0) {//成功 self.youpaipfirstRechargeModel = [YOUPAILCFirstRechargeModel mj_objectWithKeyValues:dict[@"data"]]; NSMutableArray *imgUrlArray1 = [NSMutableArray new]; for (YOUPAILCBannerModel* model in self.youpaipfirstRechargeModel.youpaiplist) { [imgUrlArray1 addObject:[LCTools getImageUrlWithAddress:model.youpaipimage]]; } self.youpaipscrollView.imageURLStringsGroup = imgUrlArray1; } } failure:^(NSError *error) { }]; } #pragma mark - SDCycleScrollViewDelegate - (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index { YOUPAILCBannerModel* model = self.youpaipfirstRechargeModel.youpaiplist[index]; if (model.youpaipwindow_type==2) { YOUPAIHRWebWindow *window = [[YOUPAIHRWebWindow alloc] init]; window.isTouchDismiss = YES; window.youpaipurl = model.youpaipwindow_link; window.youpaipwidth = model.youpaipwidth; window.youpaipheight = model.youpaipheight; window.youpaipgravity = model.youpaipgravity; [self TFPresentVC:window completion:^{}]; }else { YOUPAIZYAdvertWindow *VC= [[YOUPAIZYAdvertWindow alloc]init]; VC.youpaipdelegate = self; VC.vWidth = KScreenWidth -30; VC.vHeight = KScreenWidth-30; VC.youpaipimageurl = model.youpaipimage; VC.youpaiplink_type = model.youpaiplink_type; VC.youpaiplink_url = model.youpaiplink_url; VC.isTouchDismiss = YES; [self TFPresentVC:VC completion:^{}]; } } #pragma mark -ZYAdvertWindowDelegate -(void)youpaifclickAdverImage:(NSInteger)link_type andUrl:(NSString *)link_url { if (link_type == 1) { ZCBaseWebVC* baseWeb = [[ZCBaseWebVC alloc]init]; baseWeb.contentUrl = link_url; [self.navigationController pushViewController:baseWeb animated:YES]; }else if (link_type==2 || link_type==3){ [self youpaifpageToStr:link_url]; } } - (void)youpaifinitSvga{ self.youpaipsvgaPlayer = [[SVGAPlayer alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.youpaipsvgaPlayer.contentMode = UIViewContentModeScaleAspectFit; self.youpaipsvgaPlayer.delegate = self; [self.view addSubview:self.youpaipsvgaPlayer]; self.youpaipsvgaPlayer.userInteractionEnabled = NO; self.youpaipsvgaPlayer.hidden = YES; self.youpaipsvgaPlayer.loops = 1; self.youpaipsvgaPlayer.clearsAfterStop = true; self.youpaipparser = [[SVGAParser alloc] init]; } - (UILabel*)youpaifcreateLabelWithFrame:(CGRect)frame text:(NSString*)contentText{ UILabel* lab = [[UILabel alloc]initWithFrame:frame]; lab.textColor = [UIColor whiteColor]; lab.font = [UIFont systemFontOfSize:11]; lab.textAlignment = NSTextAlignmentLeft; lab.text = contentText; return lab; } - (void)youpaifinitTextToolView{ UIView* textToolView = [[UIView alloc]initWithFrame:CGRectMake(0, KScreenHeight, KScreenWidth, 65)]; [LCTools clipCorner:UIRectCornerTopLeft|UIRectCornerTopRight View:textToolView size:CGSizeMake(20.0f, 20.0f)]; textToolView.backgroundColor = HexColorFromRGB(0xffffff); [self.view addSubview:textToolView]; self.youpaiptextToolView = textToolView; //文本 UITextField *sendTextView = [[UITextField alloc]init]; sendTextView.layer.cornerRadius = 17.5f; sendTextView.clipsToBounds = YES; sendTextView.tintColor = ZYPinkColor; sendTextView.leftViewMode = UITextFieldViewModeAlways; sendTextView.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 13, 35)]; UIView* rightView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 13, 35)]; sendTextView.rightView = rightView; sendTextView.rightViewMode = UITextFieldViewModeAlways; sendTextView.font = [UIFont systemFontOfSize:14]; sendTextView.placeholder = @"说点什么..."; sendTextView.backgroundColor = LZF7F8FAColor; //sendTextView.delegate = self; self.youpaipsendTextF = sendTextView; [textToolView addSubview:sendTextView]; //发送 UIButton *sendMsgBtn = [UIButton buttonWithType:UIButtonTypeCustom]; sendMsgBtn.titleLabel.font = [UIFont systemFontOfSize:14]; [sendMsgBtn setTitle:@"发送" forState:UIControlStateNormal]; [sendMsgBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)]; sendMsgBtn.layer.cornerRadius = 17.5f; sendMsgBtn.clipsToBounds = YES; [sendMsgBtn setBackgroundImage:[LCTools ColorImage:CGSizeMake(62, 35) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:GradientLeftToRight] forState:UIControlStateNormal]; [sendMsgBtn addTarget:self action:@selector(youpaifsendMsgBtnClick) forControlEvents:UIControlEventTouchUpInside]; [textToolView addSubview:sendMsgBtn]; [sendTextView makeConstraints:^(MASConstraintMaker *make) { make.left.offset(12); make.centerY.equalTo(textToolView); make.right.equalTo(sendMsgBtn.mas_left).offset(-12.0f); make.height.equalTo(35); }]; [sendMsgBtn makeConstraints:^(MASConstraintMaker *make) { make.right.offset(-12.0f); make.centerY.equalTo(textToolView); make.height.equalTo(35.0f); make.width.equalTo(62); }]; } - (void)youpaifsetupInterView{ UIView *timerBgV = [[UIView alloc] init]; timerBgV.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3f]; timerBgV.layer.cornerRadius = 10.5f; timerBgV.clipsToBounds = YES; [self.view addSubview:timerBgV]; [timerBgV mas_makeConstraints:^(MASConstraintMaker *make) { make.left.offset(54.0f); make.top.offset(StatusBarHeight + 9.0f); make.height.offset(21.0f); make.width.greaterThanOrEqualTo(45.0f); }]; // UIImageView *timerImgV = [[UIImageView alloc] init]; // timerImgV.image = [UIImage imageNamed:@"vqu_images_video_timer"]; // [timerBgV addSubview:timerImgV]; // [timerImgV mas_makeConstraints:^(MASConstraintMaker *make) { // make.left.offset(6.0f); // make.centerY.equalTo(timerBgV); // make.size.mas_offset(CGSizeMake(14.0f, 14.0f)); // }]; // UILabel *timeL = [[UILabel alloc] init]; // timeL.textColor = [UIColor whiteColor]; // timeL.font = LCFont12; // timeL.text = @"00:00"; // [timerBgV addSubview:timeL]; // self.youpaiptimeLabel = timeL; // [timeL mas_makeConstraints:^(MASConstraintMaker *make) { // make.left.offset(6.0f); // // make.left.equalTo(timerImgV.mas_right).offset(4.0f); // make.top.bottom.offset(0.0f); // make.centerY.equalTo(timerBgV); // }]; UIButton *reportBtn = [UIButton buttonWithType:UIButtonTypeCustom]; reportBtn.hidden = YES; reportBtn.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3f]; reportBtn.frame = CGRectMake(0.0f, StatusBarHeight + 72.0f, 45.0f, 21.0f); [LCTools clipCorner:UIRectCornerBottomRight|UIRectCornerTopRight View:reportBtn size:CGSizeMake(10.5f, 10.5f)]; [reportBtn addTarget:self action:@selector(youpaifreportBtnClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:reportBtn]; UILabel *reportL = [[UILabel alloc] init]; reportL.hidden = YES; reportL.textColor = HexColorFromRGB(0xEEEEEE); reportL.font = LCFont12; reportL.text = @"举报"; [reportBtn addSubview:reportL]; [reportL mas_makeConstraints:^(MASConstraintMaker *make) { make.right.offset(-7.0f); make.top.bottom.offset(0.0f); }]; UIView *footerView = [[UIView alloc] init]; [self.youpaipinterView addSubview:footerView]; [footerView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.offset(0.0f); make.bottom.offset(0.0f); make.height.offset(52.0f + SafeHeight); }]; NSMutableArray *btns = [NSMutableArray array]; // 美颜 [btns addObject:@{ @"image":[UIImage imageNamed:@"vqu_images_video_beauty"], @"selectedImage":[UIImage imageNamed:@"vqu_images_video_beauty"], @"event":@"youpaifbeautyBtnClick" }]; // 切换摄像头 [btns addObject:@{ @"image":[UIImage imageNamed:@"vqu_images_video_change"], @"selectedImage":[UIImage imageNamed:@"vqu_images_video_change"], @"event":@"youpaifswitchBtnClick:" }]; // 麦克风 [btns addObject:@{ @"image":[UIImage imageNamed:@"vqu_images_video_sound_on"], @"selectedImage":[UIImage imageNamed:@"vqu_images_video_sound_off"], @"event":@"youpaifvoiceBtnClick:" }]; if (![[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){ // 关闭摄像头 [btns addObject:@{ @"image":[UIImage imageNamed:@"vqu_images_video_on"], @"selectedImage":[UIImage imageNamed:@"vqu_images_video_off"], @"event":@"youpaifcameraBtnClick:" }]; } // 信息 [btns addObject:@{ @"image":[UIImage imageNamed:@"vqu_images_video_news"], @"selectedImage":[UIImage imageNamed:@"vqu_images_video_news"], @"event":@"youpaifmsgBtnClick" }]; // 礼物 [btns addObject:@{ @"image":[UIImage imageNamed:@"vqu_images_video_gift"], @"selectedImage":[UIImage imageNamed:@"vqu_images_video_gift"], @"event":@"youpaifgiftBtnClick" }]; CGFloat totalWidth = btns.count * 46.0f + (btns.count - 1) * 15.0f; CGFloat startX = (KScreenWidth - totalWidth) / 2.0f; CGFloat width = kScreenWidth / btns.count; for (NSInteger i = 0; i < btns.count; i ++) { NSDictionary *dict = btns[i]; UIImage *image = dict[@"image"]; UIImage *selectedImage = dict[@"selectedImage"]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setImage:image forState:UIControlStateNormal]; [btn setImage:selectedImage forState:UIControlStateSelected]; [btn addTarget:self action:NSSelectorFromString(dict[@"event"]) forControlEvents:(UIControlEventTouchUpInside)]; //CGFloat x = startX + i * 46.0f + i * 15.0f; CGFloat x = i * width; btn.frame = CGRectMake(x, 0.0f, width, 46.0f); [footerView addSubview:btn]; } UIButton *giftPopBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [giftPopBtn setBackgroundImage:[UIImage imageNamed:@"vqu_images_video_gift_remind"] forState:UIControlStateNormal]; [giftPopBtn addTarget:self action:@selector(youpaifgiftBtnClick) forControlEvents:UIControlEventTouchUpInside]; giftPopBtn.hidden = YES; [self.youpaipinterView addSubview:giftPopBtn]; self.youpaipgiftPopBtn = giftPopBtn; [giftPopBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.right.offset(-startX); make.bottom.equalTo(footerView.mas_top).offset(-8.0f); make.size.mas_offset(CGSizeMake(157.5f, 33.0f)); }]; if (![[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){ UIButton *guardBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [guardBtn setBackgroundImage:[UIImage imageNamed:@"vqu_images_video_guard"] forState:UIControlStateNormal]; [guardBtn addTarget:self action:@selector(youpaifguardBtnClick) forControlEvents:UIControlEventTouchUpInside]; [self.youpaipinterView addSubview:guardBtn]; [guardBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.right.offset(-14.0f); make.bottom.equalTo(giftPopBtn.mas_top).offset(-6.0f); make.size.mas_offset(CGSizeMake(57.0f, 45.0f)); }]; } UIView *durationBgL = [[UIView alloc] init]; durationBgL.backgroundColor = [HexColorFromRGB(0x000000) colorWithAlphaComponent:0.3f]; durationBgL.layer.cornerRadius = 14.5f; durationBgL.clipsToBounds = YES; [self.youpaipinterView addSubview:durationBgL]; [durationBgL mas_makeConstraints:^(MASConstraintMaker *make) { make.left.offset(14.0f); make.bottom.equalTo(footerView.mas_top).offset(-14.0f); make.height.offset(29.0f); make.width.greaterThanOrEqualTo(46.0f); }]; UIButton *rechargeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; rechargeBtn.hidden = YES; [rechargeBtn setBackgroundImage:[LCTools ColorImage:CGSizeMake(46.0f, 29.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:(GradientLeftToRight)] forState:(UIControlStateNormal)]; rechargeBtn.titleLabel.font = LCFont14; [rechargeBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)]; if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){ [rechargeBtn setTitle:@"提醒" forState:UIControlStateNormal]; }else{ [rechargeBtn setTitle:@"充值" forState:UIControlStateNormal]; } rechargeBtn.layer.cornerRadius = 14.5f; rechargeBtn.layer.masksToBounds = YES; [rechargeBtn addTarget:self action:@selector(youpaiftoRecharge) forControlEvents:UIControlEventTouchUpInside]; [durationBgL addSubview:rechargeBtn]; [rechargeBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.right.bottom.top.offset(0.0f); make.width.offset(46.0f); }]; // UILabel *cancallTimeLab = [[UILabel alloc] init]; // cancallTimeLab.textColor = [UIColor whiteColor]; // cancallTimeLab.font = LCFont14; // [durationBgL addSubview:cancallTimeLab]; // self.youpaipcancallTimeLab = cancallTimeLab; // [cancallTimeLab mas_makeConstraints:^(MASConstraintMaker *make) { // make.left.mas_equalTo(0); // make.right.mas_equalTo(rechargeBtn.mas_left).offset(-7.0f); // make.top.bottom.mas_equalTo(0.0f); // }]; [self youpaiftimeStart]; //设置聊天列表 UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(14, KScreenHeight-KScreenHeight/4-70, 276.0f, KScreenHeight/4) style:UITableViewStylePlain]; tableView.separatorStyle = UITableViewCellSeparatorStyleNone; tableView.showsVerticalScrollIndicator = NO; tableView.delegate = self; tableView.dataSource = self; tableView.backgroundColor = [UIColor clearColor]; tableView.transform = CGAffineTransformMakeScale(1, -1); tableView.rowHeight = UITableViewAutomaticDimension; // tableView.estimatedRowHeight = 44.0f; tableView.estimatedSectionHeaderHeight = 0.0f; tableView.estimatedSectionFooterHeight = 0.0f; if (@available(iOS 15.0, *)) { tableView.sectionHeaderTopPadding = 0; } self.youpaipchatTableView = tableView; [self.youpaipinterView addSubview:tableView]; [tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.offset(14.0f); make.bottom.offset(-(52.0f+SafeHeight+6.0f+29.0f+14.0f)); make.size.mas_offset(CGSizeMake(kScreenWidth - 28, KScreenHeight/4)); }]; if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid] && self.youpaipvideoModel.youpaipchat_open_reduce == 1){ // UIView *discountBgV = [[UIView alloc] init]; // discountBgV.backgroundColor = [HexColorFromRGB(0x000000) colorWithAlphaComponent:0.3f]; // discountBgV.layer.cornerRadius = 10.5f; // discountBgV.clipsToBounds = YES; // [self.view addSubview:discountBgV]; // [discountBgV mas_makeConstraints:^(MASConstraintMaker *make) { // make.right.offset(-14.0f); // make.top.equalTo(self.youpaiplocalVideo.mas_bottom).offset(6.0f); // make.height.offset(21.0f); // make.width.greaterThanOrEqualTo(38.0f); // }]; // UIButton *discountBtn = [UIButton buttonWithType:UIButtonTypeCustom]; // [discountBtn setBackgroundImage:[LCTools ColorImage:CGSizeMake(38.0f, 21.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:(GradientLeftToRight)] forState:(UIControlStateNormal)]; // discountBtn.titleLabel.font = LCFont12; // [discountBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)]; // [discountBtn setTitle:@"减免" forState:UIControlStateNormal]; // discountBtn.layer.cornerRadius = 10.5f; // discountBtn.layer.masksToBounds = YES; // [discountBtn addTarget:self action:@selector(youpaifdiscountBtnClick) forControlEvents:UIControlEventTouchUpInside]; // [discountBgV addSubview:discountBtn]; // [discountBtn mas_makeConstraints:^(MASConstraintMaker *make) { // make.left.bottom.top.offset(0.0f); // make.width.offset(38.0f); // }]; // UILabel *discountL = [[UILabel alloc] init]; // discountL.font = LCFont12; // discountL.textColor = [UIColor whiteColor]; // [discountBgV addSubview:discountL]; // self.youpaipdiscountL = discountL; // [discountL mas_makeConstraints:^(MASConstraintMaker *make) { // make.right.bottom.top.offset(0.0f); //// make.left.equalTo(discountBtn.mas_right).offset(0.0f); // make.left.bottom.top.offset(0.0f); // }]; UIView *balanceBgV = [[UIView alloc] init]; balanceBgV.layer.cornerRadius = 10.5f; balanceBgV.clipsToBounds = YES; balanceBgV.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3f]; [self.view addSubview:balanceBgV]; [balanceBgV mas_makeConstraints:^(MASConstraintMaker *make) { make.right.offset(-14.0f); make.top.equalTo(self.youpaiplocalVideo.mas_bottom).offset(6.0f); make.height.offset(21.0f); }]; UILabel *balanceL = [[UILabel alloc] init]; balanceL.textColor = [UIColor whiteColor]; balanceL.font = LCFont12; [balanceBgV addSubview:balanceL]; self.youpaipbalanceL = balanceL; [balanceL mas_makeConstraints:^(MASConstraintMaker *make) { make.top.bottom.offset(0.0f); make.right.offset(-7.0f); make.left.offset(7.0f); }]; }else{ UIView *discountBgV = [[UIView alloc] init]; discountBgV.backgroundColor = [HexColorFromRGB(0x000000) colorWithAlphaComponent:0.3f]; discountBgV.layer.cornerRadius = 10.5f; discountBgV.clipsToBounds = YES; discountBgV.hidden =YES; [self.view addSubview:discountBgV]; self.youpaipformDiscountBgV = discountBgV; [discountBgV mas_makeConstraints:^(MASConstraintMaker *make) { make.right.offset(-14.0f); make.top.equalTo(self.youpaiplocalVideo.mas_bottom).offset(6.0f); make.height.offset(21.0f); }]; UILabel *discountL = [[UILabel alloc] init]; discountL.font = LCFont12; discountL.textColor = [UIColor whiteColor]; [discountBgV addSubview:discountL]; self.youpaipformDiscountL = discountL; [discountL mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.offset(-3.0f); make.top.offset(3.0f); make.left.offset(7.0f); make.right.offset(-7.0f); }]; } [self youpaifinitTextToolView]; } - (void)youpaifreportBtnClick{ NSString *uid = [[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqual:self.youpaipvideoModel.youpaipto_uid] ? self.youpaipvideoModel.youpaipfrom_uid : self.youpaipvideoModel.youpaipto_uid; YOUPAILCReportVC* report = [[YOUPAILCReportVC alloc]init]; report.youpaipreport_uid = uid; report.youpaiptype = 2; [self.navigationController pushViewController:report animated:YES]; } -(void)youpaiftoRecharge { [UMengRecordTool umengEventCountWithId:RechargeClickVideo]; if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){ [self.youpaipsocketManager sendChat:1 content:@"你余额不足哦,快去充值继续聊吧"]; } else { YOUPAIXRWalletVC* coinRecharge = [[YOUPAIXRWalletVC alloc]init]; [[ZCUtils getCurrentVC].navigationController pushViewController:coinRecharge animated:YES]; } } - (void)youpaifdiscountBtnClick{ @weakify(self); [LCHttpHelper requestWithURLString:VideoGetReduce parameters:@{@"room_id":self.youpaipvideoModel.youpaiproom_id} needToken:YES type:(HttpRequestTypePost) success:^(id responseObject) { @strongify(self); NSDictionary* dict = (NSDictionary*)responseObject; NSInteger code = [[dict objectForKey:@"code"] integerValue]; if (code==0) {//成功 YOUPAILZVideoDiscountWindow *vc = [[YOUPAILZVideoDiscountWindow alloc] init]; vc.isTouchDismiss = YES; vc.youpaipmodel = [YOUPAILZVideoDiscountModel mj_objectWithKeyValues:[dict objectForKey:@"data"]]; [vc setConfirmBtnClickBlock:^(YOUPAILZVideoDiscountItemModel * _Nonnull itemModel) { @strongify(self); [self.youpaipsocketManager discountWithTimerId:itemModel.youpaiptime_id]; }]; [self TFPresentVC:vc completion:^{}]; } } failure:^(NSError *error) { }]; } - (void)demoBarSetBeautyDefultParams { _youpaipdemoBar.mDelegate = nil ; [_youpaipdemoBar reloadSkinView:[FUManager shareManager].skinParams]; [_youpaipdemoBar reloadShapView:[FUManager shareManager].shapeParams]; [_youpaipdemoBar reloadFilterView:[FUManager shareManager].filters]; _youpaipdemoBar.mDelegate = self; } #pragma mark - Agora - (void)youpaifinitAgora{ self.youpaipagoraKit = [AgoraRtcEngineKit sharedEngineWithAppId:AgoraID delegate:self]; NSLog(@"version is %@",[AgoraRtcEngineKit getSdkVersion]); AgoraVideoEncoderConfiguration *configuration = [[AgoraVideoEncoderConfiguration alloc] initWithSize:AgoraVideoDimension1280x720 frameRate:AgoraVideoFrameRateFps24 bitrate:AgoraVideoBitrateCompatible orientationMode:AgoraVideoOutputOrientationModeAdaptative mirrorMode:AgoraVideoMirrorModeAuto]; [self.youpaipagoraKit setVideoEncoderConfiguration:configuration]; [self.youpaipagoraKit enableVideo]; [self.youpaipagoraKit setExternalVideoSource:YES useTexture:YES sourceType:AgoraExternalVideoSourceTypeVideoFrame]; //只允许外部源 [self.youpaipagoraKit setChannelProfile:AgoraChannelProfileLiveBroadcasting]; [self.youpaipagoraKit setClientRole:AgoraClientRoleBroadcaster]; //add by leo 修复视频镜像问题 // [self.youpaipagoraKit setLocalVideoMirrorMode:AgoraVideoMirrorModeDisabled]; // [self.youpaipagoraKit enableWebSdkInteroperability:YES]; // AgoraRtcVideoCanvas *videoCanvas = [[AgoraRtcVideoCanvas alloc] init]; videoCanvas.mirrorMode = AgoraVideoMirrorModeDisabled; videoCanvas.uid = 0; videoCanvas.view = self.youpaiplocalVideo.displayerOpenGLView; videoCanvas.renderMode = AgoraVideoRenderModeHidden; self.youpaiplocalCanvas = videoCanvas; [self.youpaipagoraKit setupLocalVideo:videoCanvas]; } #pragma mark - AgoraRtcEngineDelegate //收到对方的视频 - (void)rtcEngine:(AgoraRtcEngineKit *)engine firstRemoteVideoDecodedOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed { self.youpaiplocalVideo.hidden = NO; self.youpaipremoteVideo.hidden = NO; self.closeBtn.hidden = NO; self.youpaipscrollView.hidden = NO; AgoraRtcVideoCanvas *videoCanvas = [[AgoraRtcVideoCanvas alloc] init]; videoCanvas.renderMode = AgoraVideoRenderModeHidden; videoCanvas.mirrorMode = AgoraVideoMirrorModeDisabled; self.youpaipremoteCanvas= videoCanvas; self.youpaipremoteCanvas.uid = uid; self.youpaipremoteCanvas.view = self.youpaipremoteVideo.displayerOpenGLView; int value = [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas]; NSLog(@"%d",value); } //- (void)rtcEngine:(AgoraRtcEngineKit *)engine // didVideoMuted:(BOOL)muted byUid:(NSUInteger)uid{ // if (muted) {//对端关闭了视频 // self.youpaiplocalCanvas.view = self.youpaipremoteVideo; // self.youpaipremoteCanvas.view = self.youpaiplocalVideo; // [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas]; // [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas]; // self.youpaiplocalVideo.hidden = YES; // }else{ // self.youpaiplocalCanvas.view = self.youpaiplocalVideo; // self.youpaipremoteCanvas.view = self.youpaipremoteVideo; // [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas]; // [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas]; // self.youpaiplocalVideo.hidden = NO; // } // //} - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine remoteVideoStateChangedOfUid:(NSUInteger)uid state:(AgoraVideoRemoteState)state reason:(AgoraVideoRemoteReason)reason elapsed:(NSInteger)elapsed { if(reason == AgoraVideoRemoteReasonRemoteMuted){ self.youpaiplocalCanvas.view = self.youpaipremoteVideo.displayerOpenGLView; self.youpaipremoteCanvas.view = self.youpaiplocalVideo.displayerOpenGLView; [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas]; [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas]; self.youpaiplocalVideo.hidden = YES; [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaipremoteVideo.displayerOpenGLView; [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaiplocalVideo.displayerOpenGLView; }else if(reason == AgoraVideoRemoteReasonRemoteUnmuted){ //远端恢复视频上传 self.youpaiplocalCanvas.view = self.youpaiplocalVideo.displayerOpenGLView; self.youpaipremoteCanvas.view = self.youpaipremoteVideo.displayerOpenGLView; [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas]; [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas]; self.youpaiplocalVideo.hidden = NO; [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaiplocalVideo.displayerOpenGLView; [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaipremoteVideo.displayerOpenGLView; } } - (void)rtcEngine:(AgoraRtcEngineKit *)engine didAudioRouteChanged:(AgoraAudioOutputRouting)routing{ // [ZCHUDHelper showTitle:[NSString stringWithFormat:@"音频路由已切换%d",routing]]; } //踢人 v1.1.1 //- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine connectionChangedToState:(AgoraConnectionStateType)state reason:(AgoraConnectionChangedReason)reason //{ // if(reason ==3) // { // NSLog(@"收到踢人消息"); // // [self videoEnd:5]; // } //} #pragma mark - Agora Video Source Protocol - (BOOL)shouldInitialize { return YES; } - (void)shouldStart { [self.youpaipmCamera startCapture]; } - (void)shouldStop { [self.youpaipmCamera stopCapture]; } - (void)shouldDispose { } //- (AgoraVideoBufferType)bufferType { // return AgoraVideoBufferTypePixelBuffer; //} //- (AgoraVideoCaptureType)captureType{ // return AgoraVideoCaptureTypeCamera; //} #pragma mark - FUCameraDelegate bool isNeeded = YES; -(void)didOutputVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer { if (isNeeded) { isNeeded = !isNeeded; return; } isNeeded = !isNeeded; CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent(); CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)CMSampleBufferGetImageBuffer(sampleBuffer) ; CVPixelBufferLockBaseAddress(pixelBuffer, 0); // CFAbsoluteTime startRenderTime = CFAbsoluteTimeGetCurrent(); //render the items to pixelbuffer if ([LCSaveModel getBeautyModel].beautyOpen) { [[FUManager shareManager] renderItemsToPixelBuffer:pixelBuffer]; } // CFAbsoluteTime renderTime = (CFAbsoluteTimeGetCurrent() - startRenderTime); // // // CFAbsoluteTime frameTime = (CFAbsoluteTimeGetCurrent() - startTime); // // int frameWidth = (int)CVPixelBufferGetWidth(pixelBuffer); // int frameHeight = (int)CVPixelBufferGetHeight(pixelBuffer); CGSize frameSize; if (CVPixelBufferGetPixelFormatType(pixelBuffer) == kCVPixelFormatType_32BGRA) { frameSize = CGSizeMake(CVPixelBufferGetBytesPerRow(pixelBuffer) / 4, CVPixelBufferGetHeight(pixelBuffer)); }else{ frameSize = CGSizeMake(CVPixelBufferGetWidth(pixelBuffer), CVPixelBufferGetHeight(pixelBuffer)); } // push video frame to agora // [self.consumer consumePixelBuffer:pixelBuffer withTimestamp:CMSampleBufferGetPresentationTimeStamp(sampleBuffer) rotation:AgoraVideoRotationNone]; // CVPixelBufferUnlockBaseAddress(pixelBuffer, 0); AgoraVideoFrame *videoFrame = [[AgoraVideoFrame alloc] init]; videoFrame.format = 12; videoFrame.rotation = 0; videoFrame.textureBuf = pixelBuffer; // self.youpaiplocalCanvas.view; [[YOUPAIXLVideoShotTool sharedPusher].localVideo displayPixelBuffer:pixelBuffer withLandmarks:NULL count:0 MAX:YES]; // [self.youpaiplocalVideo displayPixelBuffer:pixelBuffer withLandmarks:NULL count:0 MAX:YES]; // BOOL result = [self.youpaipagoraKit pushExternalAudioFrameSampleBuffer:videoFrame]; BOOL result = [self.youpaipagoraKit pushExternalVideoFrame:videoFrame]; // pushExternalVideoFrame:videoFrame]; // CVPixelBufferUnlockBaseAddress(pixelBuffer, 0); } #pragma mark - WebSocketDelegate - (void)youpaifrequestSuccess{ } - (void)responseConnent{ } - (void)responseChoosing:(NSString*)tip{ } //add by leo 剩余可通话时间 - (void)canCallTime:(NSString*)tip { } //v1.1.1断连重连 - (void)videoStart:(NSDictionary*)dict{ [self.youpaipplayer stop]; self.youpaipvideoModel.youpaipduration = [dict[@"duration"] integerValue]; //测试闪退 /* dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(),^{ NSString *aSt = nil; NSDictionary *dic = @{@"key":aSt}; }); */ //add by leo 防止录屏 UIScreen * sc = [UIScreen mainScreen]; if (@available(iOS 11.0, *)) { if (sc.isCaptured) { [self youpaifshowPromptWarningView:YES]; //add by leo 录屏上报 [self youpaifshotCheck:2]; } } else { // Fallback on earlier versions } //是否主叫 BOOL callfrom = [[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipfrom_uid]; if (self.youpaipvideoModel.youpaipporn_check_v2.youpaipis_open && (self.youpaipvideoModel.youpaipporn_check_v2.youpaipcheck_from_user || callfrom)) { NSLog(@"鉴黄已打开"); [YOUPAIXLVideoShotTool sharedPusher].shotCycle = self.youpaipvideoModel.youpaipporn_check_v2.youpaipinterval_time; [YOUPAIXLVideoShotTool sharedPusher].periodArray = self.youpaipvideoModel.youpaipporn_check_v2.youpaipperiod_array; // [YOUPAIAGVideoProcessing registerVideoPreprocessing:self.youpaipagoraKit]; //老版本 /* [YOUPAIXLVideoShotTool sharedPusher].shotCycle = self.videoModel.porn_check.interval_time; [YOUPAIXLVideoShotTool sharedPusher].period = self.videoModel.porn_check.period; */ [YOUPAIXLVideoShotTool sharedPusher].room_id = self.youpaipvideoModel.youpaiproom_id; [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaiplocalVideo.displayerOpenGLView; [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaipremoteVideo.displayerOpenGLView; [YOUPAIXLVideoShotTool sharedPusher].isPornCheckOpen = YES; if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipfrom_uid]){//自己是被叫端 [YOUPAIXLVideoShotTool sharedPusher].isFrom = YES; [YOUPAIXLVideoShotTool sharedPusher].uid = self.youpaipvideoModel.youpaipto_uid; }else{ [YOUPAIXLVideoShotTool sharedPusher].isFrom = NO; [YOUPAIXLVideoShotTool sharedPusher].uid = self.youpaipvideoModel.youpaipfrom_uid; } [YOUPAIXLVideoShotTool start]; } //加入声网频道 //modify by leo fix bug object unrelease @weakify(self); int status = [self.youpaipagoraKit joinChannelByToken:nil channelId:self.youpaipvideoModel.youpaiproom_id info:nil uid:[[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id integerValue] joinSuccess:^(NSString *channel, NSUInteger uid, NSInteger elapsed) { @strongify(self); if([self.youpaipagoraKit isSpeakerphoneEnabled]){ [self.youpaipagoraKit setEnableSpeakerphone:YES]; } // self.localVideo.hidden = YES; [UIApplication sharedApplication].idleTimerDisabled = YES; }]; if (status<0) { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachesDir = [paths objectAtIndex:0]; // 构建文件路径 NSString *filePath = [cachesDir stringByAppendingPathComponent:@"agorasdk.log"]; // 检查文件是否存在 if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { [LCCommonHttp uploadWithLocalFile:filePath successBlock:nil]; } } } //1主动取消 2。拒绝 3.超时 4.被叫者挂断 5.主叫者挂断 6.费用不足 - (void)videoEnd:(NSInteger)type{ [self.youpaipsocketManager stopConnect]; self.youpaipsocketManager = nil; kAppDelegate.ksocketManager = nil; [LCSaveData saveIsVideo:NO]; [[NSNotificationCenter defaultCenter] removeObserver:self]; if (self.youpaiptimer) { dispatch_source_cancel(self.youpaiptimer);//删除GCD定时器 self.youpaiptimer = nil; } dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self.youpaipmCamera stopCapture]; dispatch_async(self.youpaipmCamera.videoCaptureQueue, ^{ [[FUManager shareManager] destoryItems]; }); [self.youpaipagoraKit setExternalVideoSource:YES useTexture:YES sourceType:AgoraExternalVideoSourceTypeVideoFrame]; //只允许外部源 [self.youpaipagoraKit leaveChannel:nil]; [AgoraRtcEngineKit destroy]; if (type==11) { if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){//自己是被叫端 [self.navigationController dismissViewControllerAnimated:YES completion:^{ }]; }else{//自己是主叫端 [YOUPAIXLVideoShotTool stop]; YOUPAILCVideoFinishVC* finish = [[YOUPAILCVideoFinishVC alloc]init]; finish.youpaipvideoModel = self.youpaipvideoModel; finish.role = 1; [self.navigationController pushViewController:finish animated:YES]; } } if (type==4|| type==5 || type==6 || type==10) {//去往评价结束界面 //add by leo 关闭上传截图 定时器 [YOUPAIXLVideoShotTool stop]; YOUPAILCVideoFinishVC* finish = [[YOUPAILCVideoFinishVC alloc]init]; finish.youpaipvideoModel = self.youpaipvideoModel; finish.role = 2; [self.navigationController pushViewController:finish animated:YES]; }else{ [self.navigationController dismissViewControllerAnimated:YES completion:^{ NSLog(@"2222222"); }]; } }); } //刷新会话页面的chatTableView - (void)reciveTxt:(NSDictionary*)dict{ YOUPAILCVideoChatMessageModel* msgModel = [YOUPAILCVideoChatMessageModel mj_objectWithKeyValues:dict]; if ([msgModel.youpaipfrom_uid isEqual:self.youpaipvideoModel.youpaipfrom_uid]) { msgModel.youpaipfrom_nickname = self.youpaipvideoModel.youpaipfrom_nickname; msgModel.youpaipto_nickname = self.youpaipvideoModel.youpaipto_nickname; msgModel.youpaipfrom_avatar = self.youpaipvideoModel.youpaipfrom_avatar; msgModel.youpaipto_avatar = self.youpaipvideoModel.youpaipto_avatar; }else{ msgModel.youpaipfrom_nickname = self.youpaipvideoModel.youpaipto_nickname; msgModel.youpaipto_nickname = self.youpaipvideoModel.youpaipfrom_nickname; msgModel.youpaipfrom_avatar = self.youpaipvideoModel.youpaipto_avatar; msgModel.youpaipto_avatar = self.youpaipvideoModel.youpaipfrom_avatar; } NSLog(@"reciveTxt 消息类型 = %ld",msgModel.youpaiptype); NSLog(@"reciveTxt content = %@",msgModel.youpaipcontent); [self.youpaipchatArray insertObject:msgModel atIndex:0]; [self.youpaipchatTableView beginUpdates]; [self.youpaipchatTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:(UITableViewRowAnimationNone)]; [self.youpaipchatTableView endUpdates]; [self.youpaipchatTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:(UITableViewScrollPositionNone) animated:YES]; if (msgModel.youpaiptype == 6 && [self.youpaipvideoModel.youpaipto_uid isEqual:[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id]) { [ZCHUDHelper showTitle:@"减免成功"]; return; } NSDictionary* giftDict = [msgModel.youpaipcontent mj_JSONObject]; NSString* gifttype = [giftDict objectForKey:@"gifttype"]; NSString* giftsvga = [giftDict objectForKey:@"giftsvga"]; if (giftsvga.length == 0) { gifttype = [dict objectForKey:@"gifttype"]; giftsvga = [dict objectForKey:@"giftsvga"]; } NSInteger link_type = [[dict objectForKey:@"link_type"] integerValue]; NSString *link_url = [dict objectForKey:@"link_url"]; if (msgModel.youpaiptype == 1 && link_type == 2 && [link_url isEqual:@"rechargeCoin"]){//礼物 LZAlertAction *cancelAction = [LZAlertAction actionWithTitle:@"舍不得" handler:^(LZAlertAction *action) { }]; cancelAction.cornerRadius = 24.0f; cancelAction.color = LZ273145Color; cancelAction.bgColor = LZF5F4F7Color; LZAlertAction *confimAction = [LZAlertAction actionWithTitle:@"去充值" handler:^(LZAlertAction *action) { [[NSNotificationCenter defaultCenter] postNotificationName:@"InsufficientBalanceNotice" object:nil userInfo:nil]; // YOUPAIHRRechargePayWindow *payWindow = [YOUPAIHRRechargePayWindow new]; // payWindow.isTouchDismiss = NO; // [self.navigationController TFPresentVC:payWindow completion:^{ // // }]; YMAccountBalanceViewModel *accountBalanceVM = [[YMAccountBalanceViewModel alloc]initWithParams:@{ ParamsId:@([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id intValue]) }]; YMAccountBalanceRechargePopupView *customView = [[YMAccountBalanceRechargePopupView alloc]init]; [customView ym_bindViewModel:accountBalanceVM]; YMPopupView *popupView = [YMPopupView initWithCustomView:customView parentView:nil popStyle:YMPopupStyleSmoothFromBottom dismissStyle:YMDismissStyleSmoothToBottom]; popupView.priority = 999; popupView.cornerRadius = adapt(10); popupView.rectCorners = UIRectCornerTopLeft|UIRectCornerTopRight; popupView.positionStyle = YMPositionStyleBottom; popupView.isClickBgDismiss = YES; popupView.isHideBg = NO; popupView.bgAlpha = 0.5; [popupView pop]; @weakify(popupView) customView.dismissBlock = ^{ @strongify(popupView) [popupView dismissWithStyle:YMDismissStyleSmoothToBottom duration:2.0]; }; }]; confimAction.cornerRadius = 24.0f; confimAction.color = [UIColor whiteColor]; confimAction.bgColor = [UIColor colorWithPatternImage:[LCTools ColorImage:CGSizeMake((KScreenWidth - 105.0f) / 2.0f, 48.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:GradientLeftToRight]]; LZAlertWindow *alert = [LZAlertWindow alertWithTitle:@"提示" content:@"您的钻石数量不足,去购买" action:@[cancelAction,confimAction]]; alert.contentTextAlignment = NSTextAlignmentCenter; [self TFPresentVC:alert completion:^{}]; } if (msgModel.youpaiptype==3){//礼物 // NSDictionary* giftDict = [msgModel.content mj_JSONObject]; NSString* giftcount = [giftDict objectForKey:@"giftcount"]; NSInteger giftid = [[giftDict objectForKey:@"giftid"] integerValue]; // NSString* gifttype = [giftDict objectForKey:@"gifttype"]; // NSString* giftsvga = [giftDict objectForKey:@"giftsvga"]; NSString* gifticon = [giftDict objectForKey:@"gifticon"]; YOUPAILZLiveGIftModel *giftModel = [[YOUPAILZLiveGIftModel alloc] init]; giftModel.youpaipavatar = msgModel.youpaipfrom_avatar; giftModel.youpaipnickName = msgModel.youpaipfrom_nickname; giftModel.youpaipgiftImage = gifticon; giftModel.youpaipgiftCount = [giftcount integerValue]; giftModel.youpaipuser_id = [msgModel.youpaipfrom_uid integerValue]; giftModel.youpaipgift_id = giftid; giftModel.youpaipgift_svga = giftsvga; giftModel.youpaipgift_type = [gifttype integerValue]; giftModel.youpaipto_uid = [msgModel.youpaipto_uid integerValue]; giftModel.youpaipto_nickName= msgModel.youpaipto_nickname; if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqual:msgModel.youpaipfrom_uid]) { [self.youpaipgifts insertObject:giftModel atIndex:0]; }else{ [self.youpaipgifts addObject:giftModel]; } [self youpaifeditGiftView]; }else if (msgModel.youpaiptype==1 && giftsvga.length != 0){ // NSDictionary* giftDict = [msgModel.content mj_JSONObject]; NSString* giftcount = [dict objectForKey:@"giftcount"]; NSInteger giftid = -1; // NSString* gifttype = [giftDict objectForKey:@"gifttype"]; // NSString* giftsvga = [giftDict objectForKey:@"giftsvga"]; NSString* gifticon = [dict objectForKey:@"gifticon"]; YOUPAILZLiveGIftModel *giftModel = [[YOUPAILZLiveGIftModel alloc] init]; giftModel.youpaipavatar = msgModel.youpaipto_avatar; giftModel.youpaipnickName = msgModel.youpaipto_nickname; giftModel.youpaipgiftImage = gifticon; giftModel.youpaipgiftCount = [giftcount integerValue]; giftModel.youpaipuser_id = [msgModel.youpaipfrom_uid integerValue]; giftModel.youpaipgift_id = giftid; giftModel.youpaipgift_svga = giftsvga; giftModel.youpaipgift_type = [gifttype integerValue]; giftModel.youpaipto_uid = [msgModel.youpaipfrom_uid integerValue]; giftModel.youpaipto_nickName= msgModel.youpaipfrom_nickname; if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqual:msgModel.youpaipfrom_uid]) { [self.youpaipgifts insertObject:giftModel atIndex:0]; }else{ [self.youpaipgifts addObject:giftModel]; } [self youpaifeditGiftView]; } } #pragma mark -消息来自聊天房间 - (void)giftMsgForIm:(YOUPAILZLiveGIftModel *)chatRoomGiftModel{ NSString *youpaipfrom_uid = self.youpaipvideoModel.youpaipfrom_uid; //呼叫者UID NSString *youpaipto_uid = self.youpaipvideoModel.youpaipto_uid; // 被叫者UID // 只播放当前房间正在交流的 礼物svga if([youpaipto_uid integerValue] == chatRoomGiftModel.youpaipuser_id || [youpaipfrom_uid integerValue] == chatRoomGiftModel.youpaipuser_id){ [self.youpaipgifts insertObject:chatRoomGiftModel atIndex:0]; [self youpaifeditGiftView]; } } //视频过程中 收到同房间的消息 - (void)videoingRecMessage:(NIMMessage *)message{ NSString *youpaipto_uid = self.youpaipvideoModel.youpaipto_uid; //被叫者UID NSString *youpaipfrom_uid = self.youpaipvideoModel.youpaipfrom_uid; //呼叫者UID NSString *currentAccount = [[[NIMSDK sharedSDK] loginManager] currentAccount]; // BOOL recIsMe = [message.session.sessionId isEqualToString:currentAccount]; // 收到消息是发给我的 // 且发消息的人 是我们正在视频中的人 BOOL recIsCurrRoom = [message.session.sessionId isEqualToString:youpaipto_uid] || [message.session.sessionId isEqualToString:youpaipfrom_uid]; if(recIsCurrRoom){ // asds YOUPAILCVideoChatMessageModel* msgModel = [[YOUPAILCVideoChatMessageModel alloc] init]; msgModel.youpaiptype = 2; msgModel.youpaipcontent = message.text; if ([message.from isEqualToString:currentAccount]) { // 如果收到的消息 是自己发送的消息 msgModel.youpaipfrom_nickname = @"我"; msgModel.youpaipto_nickname = @""; msgModel.youpaipfrom_avatar = @""; msgModel.youpaipto_avatar = @""; msgModel.youpaipfrom_uid = [LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id; // }else{ // 是对方发过来的 msgModel.youpaipfrom_nickname = message.senderName; //发送消息人的名字 msgModel.youpaipto_nickname = @"我"; msgModel.youpaipfrom_avatar = @""; msgModel.youpaipto_avatar = @""; msgModel.youpaipfrom_uid = [self getRemoteSessionID]; // } NSLog(@"reciveTxt 消息类型 = %ld",msgModel.youpaiptype); NSLog(@"reciveTxt content = %@",msgModel.youpaipcontent); [self.youpaipchatArray insertObject:msgModel atIndex:0]; [self.youpaipchatTableView beginUpdates]; [self.youpaipchatTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:(UITableViewRowAnimationNone)]; [self.youpaipchatTableView endUpdates]; [self.youpaipchatTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:(UITableViewScrollPositionNone) animated:YES]; } } /// 处理礼物 - (void)youpaifeditGiftView{ NSInteger maxCount = 2; NSInteger count = maxCount - self.youpaipgiftViews.count; if (count > self.youpaipgifts.count) { count = self.youpaipgifts.count; } if (count <= 0) { for (NSInteger i = 0; i < self.youpaipgiftViews.count; i ++) { if (self.youpaipgifts.count <= 0) { return; } YOUPAILZLiveGIftModel *giftModel = self.youpaipgifts[i]; YOUPAILZChatRoomGiftView *giftView = nil; for (YOUPAILZChatRoomGiftView *f_giftView in self.youpaipgiftViews) { if (f_giftView.youpaipgiftModel.youpaipuser_id == giftModel.youpaipuser_id && f_giftView.youpaipgiftModel.youpaipgift_id == giftModel.youpaipgift_id && giftModel.youpaipgift_id != -1) { giftView = f_giftView; break; } } if (giftView != nil) { i --; [giftView youpaifupdateGiftCount:giftModel.youpaipgiftCount]; [self.youpaipgifts removeObject:giftModel]; if (giftModel.youpaipgift_type == 1 && ![giftModel.youpaipgift_svga isEqualToString:@""]) { [self.youpaipsvgas addObject:giftModel]; [self youpaifstartPlaySvga]; } [self.youpaipgifts removeObject:giftModel]; } } }else{ for (NSInteger i = 0; i < count; i ++) { if (self.youpaipgifts.count <= 0) { return; } YOUPAILZLiveGIftModel *giftModel = self.youpaipgifts[i]; YOUPAILZChatRoomGiftView *giftView = nil; for (YOUPAILZChatRoomGiftView *f_giftView in self.youpaipgiftViews) { if (f_giftView.youpaipgiftModel.youpaipuser_id == giftModel.youpaipuser_id && f_giftView.youpaipgiftModel.youpaipgift_id == giftModel.youpaipgift_id && giftModel.youpaipgift_id != -1) { giftView = f_giftView; break; } } if (giftView != nil) { i --; [giftView youpaifupdateGiftCount:giftModel.youpaipgiftCount]; [self.youpaipgifts removeObject:giftModel]; if (giftModel.youpaipgift_type == 1 && ![giftModel.youpaipgift_svga isEqualToString:@""]) { [self.youpaipsvgas addObject:giftModel]; [self youpaifstartPlaySvga]; } }else{ if (giftModel.youpaipgift_type == 1 && ![giftModel.youpaipgift_svga isEqualToString:@""]) { [self.youpaipsvgas addObject:giftModel]; [self youpaifstartPlaySvga]; } YOUPAILZChatRoomGiftView *giftView = [[YOUPAILZChatRoomGiftView alloc] initWithModel:giftModel]; // [giftView addTarget:self action:@selector(youpaifgiftAnimationViewClick:) forControlEvents:UIControlEventTouchUpInside]; NSInteger tag = 0; if (self.youpaipgiftViews.count == 1){ if (self.youpaipgiftViews.lastObject.tag == 1) { tag = 0; }else{ tag = 1; } } giftView.tag = tag; [self.youpaipinterView addSubview:giftView]; [self.youpaipgiftViews addObject:giftView]; if (giftView != nil) { UIView *view = self.youpaipgiftViews.lastObject; if (view != nil) { [giftView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.offset(-200.0f); if (view.tag == 0) { make.bottom.equalTo(self.youpaipchatTableView.mas_top).offset(-15.0f); }else{ make.bottom.equalTo(self.youpaipchatTableView.mas_top).offset(-30.0f-40.0f); } make.height.offset(40.0f); }]; } } [giftView.superview layoutIfNeeded]; [giftView youpaifshowAnimation]; giftView.delegate = self; [self.youpaipgifts removeObject:giftModel]; } } } } - (void)youpaifanimatiomFinishWithView:(YOUPAILZChatRoomGiftView *)liveGiftView{ [self.youpaipgiftViews removeObject:liveGiftView]; [liveGiftView removeFromSuperview]; [self youpaifeditGiftView]; } - (void)youpaifstartPlaySvga{ if (self.youpaipisPlaySvga == NO && self.youpaipsvgas.count != 0) { self.youpaipisPlaySvga = YES; YOUPAILZLiveGIftModel* giftModel = self.youpaipsvgas[0]; [self.youpaipsvgaPlayer stopAnimation]; if (giftModel.youpaipgift_type == 1 && ![giftModel.youpaipgift_svga isEqualToString:@""]) { self.youpaipsvgaPlayer.hidden = NO; } NSString* svgaName = [[giftModel.youpaipgift_svga componentsSeparatedByString:@"/"] lastObject]; NSString* svgaCanchesPath= [[NSString alloc]initWithFormat:@"%@/%@/%@",CachesPath,@"SVGA",svgaName]; if (![LCTools giftSVGAWithSvgaUrlStr:giftModel.youpaipgift_svga]){ NSString* urlStr = [NSString stringWithFormat:@"%@/%@",[LCSaveData getImageUrl]?[LCSaveData getImageUrl]:BaseImgUrl,giftModel.youpaipgift_svga]; @weakify(self); [self.youpaipparser parseWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) { @strongify(self); if (videoItem != nil) { self.youpaipsvgaPlayer.hidden = NO; self.youpaipsvgaPlayer.videoItem = videoItem; [self.youpaipsvgaPlayer startAnimation]; } } failureBlock:^(NSError * _Nullable error) { @strongify(self); self.youpaipsvgaPlayer.hidden = YES; self.youpaipisPlaySvga = NO; [self youpaifstartPlaySvga]; }]; [LCTools giftSVGAWithSvgaUrlStr:giftModel.youpaipgift_svga]; }else{ @weakify(self); [self.youpaipparser parseWithData:[LCTools giftSVGAWithSvgaUrlStr:giftModel.youpaipgift_svga] cacheKey:svgaCanchesPath completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) { @strongify(self); if (videoItem != nil) { self.youpaipsvgaPlayer.hidden = NO; self.youpaipsvgaPlayer.videoItem = videoItem; [self.youpaipsvgaPlayer startAnimation]; } } failureBlock:^(NSError * _Nonnull error) { @strongify(self); self.youpaipsvgaPlayer.hidden = YES; self.youpaipisPlaySvga = NO; [self youpaifstartPlaySvga]; }]; } [self.youpaipsvgas removeObject:giftModel]; } } - (NSMutableArray *)youpaipgifts{// 礼物数据 if (!_youpaipgifts) { _youpaipgifts = [NSMutableArray array]; } return _youpaipgifts; } - (NSMutableArray *)youpaipgiftViews{// 礼物 if (!_youpaipgiftViews) { _youpaipgiftViews = [NSMutableArray array]; } return _youpaipgiftViews; } - (NSMutableArray *)youpaipsvgas{ if (!_youpaipsvgas) { _youpaipsvgas = [NSMutableArray array]; } return _youpaipsvgas; } #pragma mark - SVGAPlayerDelegate - (void)svgaPlayerDidFinishedAnimation:(SVGAPlayer *)player{ self.youpaipsvgaPlayer.hidden = YES; self.youpaipisPlaySvga = NO; [self youpaifstartPlaySvga]; } - (void)youpaifcloseBtnClick{ LZAlertAction *cancelAction = [LZAlertAction actionWithTitle:@"取消" handler:^(LZAlertAction *action) { }]; cancelAction.cornerRadius = 24.0f; cancelAction.color = LZ273145Color; cancelAction.bgColor = LZF5F4F7Color; @weakify(self); LZAlertAction *confimAction = [LZAlertAction actionWithTitle:@"确定" handler:^(LZAlertAction *action) { @strongify(self); [self.youpaipsocketManager sendHangup]; }]; confimAction.cornerRadius = 24.0f; confimAction.color = [UIColor whiteColor]; confimAction.bgColor = [UIColor colorWithPatternImage:[LCTools ColorImage:CGSizeMake((KScreenWidth - 105.0f) / 2.0f, 48.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:GradientLeftToRight]]; LZAlertWindow *alert = [LZAlertWindow alertWithTitle:@"提示" content:@"确定挂断视频咨询?" action:@[cancelAction,confimAction]]; alert.contentTextAlignment = NSTextAlignmentCenter; [self TFPresentVC:alert completion:^{}]; } // 获取对方的id - (NSString *)getRemoteSessionID{ NSString *youpaipto_uid = self.youpaipvideoModel.youpaipto_uid; //被叫者UID NSString *youpaipfrom_uid = self.youpaipvideoModel.youpaipfrom_uid; //呼叫者UID NSString *currentAccount = [[[NIMSDK sharedSDK] loginManager] currentAccount]; if([currentAccount isEqualToString:youpaipto_uid]){ return youpaipfrom_uid; }else{ return youpaipto_uid; } } #pragma mark - interActive - (void)youpaifsendMsgBtnClick{ NSString* sendText =[self.youpaipsendTextF.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; if (sendText.length > 0) { // 组装消息体 NIMMessage *message = [NIMMessageMaker msgWithText:sendText]; NIMSession *session = [NIMSession session:[self getRemoteSessionID] type:(NIMSessionTypeP2P)]; WeakSelf; [YOUPAILCIMTool sendMessage:message sessionid:session.sessionId completion:^(NIMMessage *resultMsg,NSInteger filter,NSString *contentStr) { if (filter==0) { [[[NIMSDK sharedSDK] chatManager] sendMessage:resultMsg toSession:session error:nil]; }else{ resultMsg.text = contentStr; [[[NIMSDK sharedSDK] chatManager] sendMessage:resultMsg toSession:session error:nil]; } [self videoingRecMessage:message]; }]; self.youpaipsendTextF.text = @""; }else{ [ZCHUDHelper showTitle:@"发送内容不能为空"]; } } - (void)youpaiftimeStart{ //v1.1.1断连重连 __block NSInteger timeout = self.youpaipvideoModel.youpaipduration; @weakify(self); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue); self.youpaiptimer = timer; dispatch_source_set_timer(timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行 dispatch_source_set_event_handler(timer, ^{ timeout++; dispatch_async(dispatch_get_main_queue(), ^{ @strongify(self); self.youpaiptimeLabel.text = [NSString stringWithFormat:@"通话时长: %@",[ZCUtils getHHMMSSFromSS:timeout]]; kAppDelegate.logCallTime = self.youpaiptimeLabel.text; if (timeout >= 30 && timeout <= 40 && ![[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]) { self.youpaipgiftPopBtn.hidden = NO; }else{ self.youpaipgiftPopBtn.hidden = YES; } }); }); dispatch_resume(timer); } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch* touch = [touches anyObject]; UIView* view = [touch view]; if (view == self.youpaipdemoBarBgV) { self.youpaipdemoBarBgV.hidden = YES; } [self.view endEditing:YES]; } //- (void)youpaifinterHandel:(UITapGestureRecognizer*)interTap{ // if (interTap.state == UIGestureRecognizerStateEnded) { // if (interTap.view == self.demoBarBgV) { // self.demoBarBgV.hidden = YES; // [self.view endEditing:YES]; // }else{} // } //} - (void)youpaifdoubleTapHandel:(UITapGestureRecognizer*)tap{ if (tap.state == UIGestureRecognizerStateEnded) { if (self.youpaipinterView.frame.origin.x == KScreenWidth) { [self youpaifmsgViewAnimWithX:0]; }else{ [self youpaifmsgViewAnimWithX:KScreenWidth]; } } } - (void)youpaifmsgViewPanHandel:(UIPanGestureRecognizer*)panGesture{ //移动两点之间的绝对距离 [self.view endEditing:YES]; CGPoint translation = [panGesture translationInView:self.youpaipinterView]; if (self.youpaipinterView.frame.origin.x==0 && translation.x<0) { }else if(self.youpaipinterView.frame.origin.x==KScreenWidth && translation.x>0){ }else { CGPoint endPosition; if (panGesture.state == UIGestureRecognizerStateBegan){ self.youpaipstartPoint = [panGesture locationInView:self.youpaipinterView]; }else if (panGesture.state == UIGestureRecognizerStateChanged){ CGPoint origin = self.youpaipinterView.frame.origin; origin.x+=translation.x; if (origin.x<=0) { origin.x = 0; self.youpaipinterView.frame= CGRectMake(origin.x, 0, KScreenWidth, KScreenHeight); }else if(origin.x>=KScreenWidth){ origin.x = KScreenWidth; self.youpaipinterView.frame= CGRectMake(origin.x, 0, KScreenWidth, KScreenHeight); } }else if (panGesture.state == UIGestureRecognizerStateEnded) { endPosition = [panGesture locationInView:self.youpaipinterView]; if (endPosition.x-self.youpaipstartPoint.x>80) {//右移 小动画 [self youpaifmsgViewAnimWithX:KScreenWidth]; }else if(endPosition.x-self.youpaipstartPoint.x<-80){ //移 [self youpaifmsgViewAnimWithX:0]; } } } } - (void)youpaifmsgViewAnimWithX:(CGFloat)x{ NSTimeInterval durtionTime = fabs(self.youpaipinterView.x-x)*0.5/KScreenWidth; [UIView animateWithDuration:durtionTime animations:^{ self.youpaipinterView.frame = CGRectMake(x, 0, KScreenWidth, KScreenHeight); } completion:^(BOOL finished) { self.youpaipinterView.frame = CGRectMake(x, 0, KScreenWidth, KScreenHeight); }]; } - (void)youpaifloaclVideoHandel:(UITapGestureRecognizer*)localTap{ if (localTap.state == UIGestureRecognizerStateEnded) { if([self.youpaipremoteCanvas.view isEqual:self.youpaipremoteVideo.displayerOpenGLView]){ self.youpaipremoteCanvas.view = self.youpaiplocalVideo.displayerOpenGLView; self.youpaiplocalCanvas.view = self.youpaipremoteVideo.displayerOpenGLView; [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas]; [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas]; [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaiplocalVideo.displayerOpenGLView; [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaipremoteVideo.displayerOpenGLView; // 默认 // [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaiplocalVideo; // [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaipremoteVideo; }else{ self.youpaipremoteCanvas.view = self.youpaipremoteVideo.displayerOpenGLView; self.youpaiplocalCanvas.view = self.youpaiplocalVideo.displayerOpenGLView; [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas]; [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas]; [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaipremoteVideo.displayerOpenGLView; [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaiplocalVideo.displayerOpenGLView; } } } #pragma mark - ButtonClick - (void)youpaifmsgBtnClick{ [self.youpaipsendTextF becomeFirstResponder]; } - (void)youpaifbeautyBtnClick{ self.youpaipdemoBarBgV.hidden = NO; [self.view bringSubviewToFront:self.youpaipdemoBarBgV]; } - (void)youpaifgiftBtnClick{ self.youpaipgiftPopBtn.hidden = YES; YOUPAILZCommonGiftView *view = [YOUPAILZCommonGiftView new]; view.isTouchDismiss = YES; view.youpaipisAnchor = NO; @weakify(self); [self TFPresentVC:view completion:^{ }]; [view setJumToWalletBlock1:^{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [[NSNotificationCenter defaultCenter] postNotificationName:@"InsufficientBalanceNotice" object:nil userInfo:nil]; // YOUPAIHRRechargePayWindow *payWindow = [YOUPAIHRRechargePayWindow new]; // payWindow.isTouchDismiss = NO; // [self.navigationController TFPresentVC:payWindow completion:^{ // // }]; YMAccountBalanceViewModel *accountBalanceVM = [[YMAccountBalanceViewModel alloc]initWithParams:@{ ParamsId:@([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id intValue]) }]; YMAccountBalanceRechargePopupView *customView = [[YMAccountBalanceRechargePopupView alloc]init]; [customView ym_bindViewModel:accountBalanceVM]; YMPopupView *popupView = [YMPopupView initWithCustomView:customView parentView:nil popStyle:YMPopupStyleSmoothFromBottom dismissStyle:YMDismissStyleSmoothToBottom]; popupView.priority = 999; popupView.cornerRadius = adapt(10); popupView.rectCorners = UIRectCornerTopLeft|UIRectCornerTopRight; popupView.positionStyle = YMPositionStyleBottom; popupView.isClickBgDismiss = YES; popupView.isHideBg = NO; popupView.bgAlpha = 0.5; [popupView pop]; @weakify(popupView) customView.dismissBlock = ^{ @strongify(popupView) [popupView dismissWithStyle:YMDismissStyleSmoothToBottom duration:2.0]; }; }); }]; [view setYoupaiplzgiftblock:^(YOUPAILCGiftModel * _Nonnull giftModel, NSInteger count,NSString*categoryID) { @strongify(self); [UMengRecordTool umengEventCountWithId:GiveawayGiftVideo]; [self.youpaipsocketManager sendGift:giftModel.youpaipid count:count tyID:categoryID]; }]; } - (void)youpaifswitchBtnClick:(UIButton*)btn{ [_youpaipmCamera changeCameraInputDeviceisFront:!_youpaipmCamera.isFrontCamera]; [self.youpaipagoraKit switchCamera]; [[FUManager shareManager] onCameraChange]; } - (void)youpaifvoiceBtnClick:(UIButton*)btn{ btn.selected = !btn.selected; if (btn.selected == YES) { [self.youpaipagoraKit disableAudio]; }else{ [self.youpaipagoraKit enableAudio]; } } - (void)youpaifcameraBtnClick:(UIButton*)btn{ btn.selected = !btn.selected; if (btn.selected == YES) { self.youpaiplocalCanvas.view = self.youpaiplocalVideo.displayerOpenGLView; self.youpaipremoteCanvas.view = self.youpaipremoteVideo.displayerOpenGLView; [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas]; [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas]; [self.youpaipagoraKit muteLocalVideoStream:YES]; self.youpaiplocalVideo.hidden = YES; }else{ [self.youpaipagoraKit muteLocalVideoStream:NO]; self.youpaiplocalVideo.hidden = NO; } } //仙女棒 -(void)youpaifxianNvBangBtnClick { YOUPAIZYXianNvBangVC *VC= [[YOUPAIZYXianNvBangVC alloc]init]; // VC.delegate = self; VC.vWidth = KScreenWidth *(320.0/375.0); VC.vHeight = (VC.vWidth*137)/320.0+165; VC.youpaipinfoModel = self.youpaipvideoModel.youpaipfairy; VC.youpaipuser_id = self.youpaipvideoModel.youpaipto_uid; VC.youpaiproomid = self.youpaipvideoModel.youpaiproom_id; VC.youpaipisRoom = YES; VC.isTouchDismiss = YES; if(VC.youpaipinfoModel!=nil) [self TFPresentVC:VC completion:^{ }]; } //add by leo 视频中守护v1.0.8 -(void)youpaifguardBtnClick { YOUPAILPGuardHerVC *VC= [[YOUPAILPGuardHerVC alloc]init]; VC.youpaipdelegate = self; VC.vWidth = KScreenWidth-54; VC.vHeight = ((KScreenWidth-54)*165)/321.0+261.5; VC.youpaipinfoModel = self.youpaipvideoModel.youpaipguard; VC.youpaiproomid = self.youpaipvideoModel.youpaiproom_id; VC.youpaipuser_id = self.youpaipvideoModel.youpaipto_uid; VC.youpaipisRoom = YES; VC.isTouchDismiss = YES; [self TFPresentVC:VC completion:^{ }]; } #pragma mark - TableViewDelegate -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.youpaipchatArray.count; } -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ YOUPAILCVideoChatMessageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YOUPAILCVideoChatMessageCell"]; if (cell == nil) { cell = [[YOUPAILCVideoChatMessageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"YOUPAILCVideoChatMessageCell"]; } // YOUPAILCVideoChatMessageCell *cell = [[YOUPAILCVideoChatMessageCell alloc]initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:@"YOUPAILCVideoChatMessageCell"]; cell.youpaipmsgModel = self.youpaipchatArray[indexPath.row]; cell.youpaipdelegate = self; return cell; } //- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath //{ // YOUPAILCVideoChatMessageModel* model = (YOUPAILCVideoChatMessageModel*)self.chatArray[indexPath.row]; // return [YOUPAILCVideoChatMessageCell youpaifcellHeightWithModel:model]; //} // //- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { // return 40; //} //- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ // YOUPAILCVideoChatMessageModel* model =self.chatArray[indexPath.row]; // if (model.link_type==1) { // ZCBaseWebVC* web = [[ZCBaseWebVC alloc]init]; // web.contentUrl = model.link_url; // [self.navigationController pushViewController:web animated:YES]; // }else if (model.link_type==2){ // [self youpaifpageToStr:model.link_url]; // } //} - (void)youpaifcontentClicked:(YOUPAILCVideoChatMessageModel *)model{ if (model.youpaiplink_type==1) { if (model.youpaiplink_url.length>0) { ZCBaseWebVC* web = [[ZCBaseWebVC alloc]init]; web.contentUrl = model.youpaiplink_url; [self.navigationController pushViewController:web animated:YES]; } }else if (model.youpaiplink_type==2){ if (model.youpaiplink_url.length>0) { [self youpaifpageToStr:model.youpaiplink_url]; } } } #pragma mark - 键盘交互事件 - (void)youpaifwillResignActive { [_youpaipmCamera stopCapture]; } #pragma mark - FUAPIDemoBarDelegate -(void)restDefaultValue:(int)type{ if (type == 1) {//美肤 [[FUManager shareManager] setBeautyDefaultParameters:FUBeautyModuleTypeSkin]; } if (type == 2) { [[FUManager shareManager] setBeautyDefaultParameters:FUBeautyModuleTypeShape]; } } -(void)filterValueChange:(FUBeautyParam *)param{ int handle = [[FUManager shareManager] getHandleAboutType:FUNamaHandleTypeBeauty]; [FURenderer itemSetParam:handle withName:@"filter_name" value:[param.mParam lowercaseString]]; [FURenderer itemSetParam:handle withName:@"filter_level" value:@(param.mValue)]; //滤镜程度 [FUManager shareManager].seletedFliter = param; } -(void)beautyParamValueChange:(FUBeautyParam *)param{ if (_youpaipdemoBar.selBottomIndex == 3) {//风格栏 if (param.beautyAllparams) { [[FUManager shareManager] setStyleBeautyParams:param.beautyAllparams]; [FUManager shareManager].currentStyle = param; }else{// 点击无 [FUManager shareManager].currentStyle = param; [[FUManager shareManager] loadFilter]; } return; } if ([param.mParam isEqualToString:@"cheek_narrow"] || [param.mParam isEqualToString:@"cheek_small"]){//程度值 只去一半 [[FUManager shareManager] setParamItemAboutType:FUNamaHandleTypeBeauty name:param.mParam value:param.mValue * 0.5]; }else if([param.mParam isEqualToString:@"blur_level"]) {//磨皮 0~6 [[FUManager shareManager] setParamItemAboutType:FUNamaHandleTypeBeauty name:param.mParam value:param.mValue * 6]; }else{ [[FUManager shareManager] setParamItemAboutType:FUNamaHandleTypeBeauty name:param.mParam value:param.mValue]; } } - (void)willEnterForeground { [_youpaipmCamera startCapture]; // if (self.voiceBtn.selected == NO) { // [self.agoraKit enableAudio]; // [self.agoraKit disableAudio]; // }else{ // [self.agoraKit disableAudio]; // [self.agoraKit enableAudio]; // } } - (void)didBecomeActive { [_youpaipmCamera startCapture]; } //键盘即将隐藏 - (void)youpaifkeyboardWillHide:(NSNotification *)note{ // CGRect keyboardF = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; [UIView animateWithDuration:0.25 animations:^{ //KScreenHeight-KScreenHeight/3-60 self.youpaiptextToolView.mj_y = KScreenHeight; // self.chatTableView.frame = CGRectMake(10, KScreenHeight-KScreenHeight/4-70, 3*KScreenWidth/4, KScreenHeight/4); [self.youpaipchatTableView mas_updateConstraints:^(MASConstraintMaker *make) { make.bottom.offset(-(52.0f+SafeHeight+6.0f+29.0f+14.0f)); }]; }]; } //键盘即将弹出 - (void)youpaifkeyboardWillShow:(NSNotification *)note{ CGRect keyboardF = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; CGFloat keyboardH = keyboardF.size.height; [UIView animateWithDuration:0.25 animations:^{ self.youpaiptextToolView.mj_y = KScreenHeight-keyboardH-65; [self.youpaipchatTableView mas_updateConstraints:^(MASConstraintMaker *make) { make.bottom.offset(-(52.0f+SafeHeight+6.0f+29.0f+14.0f)-keyboardH/*(52.0f+6.0f+29.0f+14.0f+keyboardH-48+6.0f)*/); }]; }]; } //add by leo 防止录屏 #pragma mark - 监听录制 /** 监听屏幕录制 iOS 11.0 版本以上 */ - (void)youpaifmonitorRecordVideo {// 监听屏幕录制 @weakify(self); // 监测设备的录制状态 if (@available(iOS 11.0, *)) { [[NSNotificationCenter defaultCenter] addObserverForName:UIScreenCapturedDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { @strongify(self); NSLog(@"屏幕录制 ..."); //用self就会循环引用 if(self.youpaipisRecordScreen) { [self youpaifshowPromptWarningView:NO]; } else { [self youpaifshowPromptWarningView:YES]; //add by leo 录屏上报 [self youpaifshotCheck:2]; } }]; } else { // Fallback on earlier versions } } /** 提示视图 */ - (void)youpaifshowPromptWarningView:(BOOL)warning { if(warning) { _youpaipisRecordScreen = YES; [_youpaiprecoderHideView setFrame:self.youpaipremoteVideo.bounds]; [_youpaiprecoderHideView setHidden:NO]; NSLog(@"正在录屏"); [ZCHUDHelper showTitle:@"请勿录制屏幕" showtime:1]; } else { NSLog(@"录屏取消了"); _youpaipisRecordScreen =NO; [_youpaiprecoderHideView setHidden:YES]; } } #pragma mark 防止截屏 - (void)youpaifmonitorShot { @weakify(self); [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationUserDidTakeScreenshotNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { @strongify(self); NSLog(@"屏幕截图 ..."); if(![[ZCUtils getCurrentVC] isKindOfClass:[YOUPAILCBaseVideoCallVC class]]) { return; } [self youpaifshotCheck:1]; }]; } - (void)userDidTakeScreenshot { NSLog(@"检测到截屏"); UIView *backView = [[UIView alloc]initWithFrame:self.youpaipremoteVideo.bounds]; [backView setBackgroundColor:HexColorFromRGBA(0xffffff, 1.0)]; [self.youpaipremoteVideo addSubview:backView]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [backView removeFromSuperview]; }); [ZCHUDHelper showTitle:@"尊重隐私,请勿截屏" showtime:1]; //人为操作,获取截屏图片数据 /* UIImage *image = [self youpaifimageWithScreenshot]; NSLog(@"userDidTakeScreenshot:\n%@", image); UIImageView *imageScreenshot = [[UIImageView alloc] initWithImage:image];// 此处 image 资源可根据实际需求进行操作,展示当前截屏图片或者替换成一张固定的图片方式等等等! imageScreenshot.frame = self.remoteVideo.bounds; [imageScreenshot setBackgroundColor:[UIColor whiteColor]]; [self.remoteVideo addSubview:imageScreenshot];// 展示在当前 View 层级 */ } /** 返回截屏数据 @return 返回截屏数据 */ - (UIImage *)youpaifimageWithScreenshot { NSData *imageData = [self youpaifdataWithScreenshotInPNGFormat]; return [UIImage imageWithData:imageData]; } /** 获取当前屏幕 @return 获取当前屏幕 */ - (NSData *)youpaifdataWithScreenshotInPNGFormat { // Source (Under MIT License): CGSize imageSize = CGSizeZero; UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; if (UIInterfaceOrientationIsPortrait(orientation)) { imageSize = CGSizeMake(KScreenWidth,KScreenHeight); } else { imageSize = CGSizeMake(KScreenHeight, KScreenWidth); } // 传入的View.frame.size是0的话,直接返回nil,防止 UIGraphicsBeginImageContext() 传入0,导致崩溃 if (CGSizeEqualToSize(imageSize, CGSizeZero)) { return nil; } UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0); CGContextRef context = UIGraphicsGetCurrentContext(); for (UIWindow *window in [[UIApplication sharedApplication] windows]) { CGContextSaveGState(context); CGContextTranslateCTM(context, window.center.x, window.center.y); CGContextConcatCTM(context, window.transform); CGContextTranslateCTM(context, -window.bounds.size.width * window.layer.anchorPoint.x, -window.bounds.size.height * window.layer.anchorPoint.y); // Correct for the screen orientation if (orientation == UIInterfaceOrientationLandscapeLeft) { CGContextRotateCTM(context, M_PI_2); CGContextTranslateCTM(context, 0, -imageSize.width); } else if (orientation == UIInterfaceOrientationLandscapeRight) { CGContextRotateCTM(context, -M_PI_2); CGContextTranslateCTM(context, -imageSize.height, 0); } else if (orientation == UIInterfaceOrientationPortraitUpsideDown) { CGContextRotateCTM(context, M_PI); CGContextTranslateCTM(context, -imageSize.width, -imageSize.height); } if ([window respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) { [window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES]; } else { [window.layer renderInContext:context]; } CGContextRestoreGState(context); } UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return UIImagePNGRepresentation(image); } //add by leo 截屏上报 -(void)youpaifshotCheck:(NSInteger)type { @weakify(self); [LCHttpHelper requestWithURLString:ScreenShtoCheck parameters:@{@"type":@(type)} needToken:YES type:(HttpRequestTypePost) success:^(id responseObject) { @strongify(self); NSDictionary* dict = (NSDictionary*)responseObject; NSInteger code = [[dict objectForKey:@"code"] integerValue]; NSString *message =[dict objectForKey:@"message"]; if (code==0) {//成功 [self.youpaipsocketManager sendHangup]; } // [ZCHUDHelper showTitle:message]; LZAlertAction *confimAction = [LZAlertAction actionWithTitle:@"我知道了" handler:^(LZAlertAction *action) { }]; confimAction.cornerRadius = 24.0f; confimAction.color = [UIColor whiteColor]; confimAction.bgColor = [UIColor colorWithPatternImage:[LCTools ColorImage:CGSizeMake(KScreenWidth - 148.0f, 48.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:GradientLeftToRight]]; LZAlertWindow *alert = [LZAlertWindow alertWithTitle:@"提示" content:message action:@[confimAction]]; [self TFPresentVC:alert completion:^{}]; } failure:^(NSError *error) { }]; if(type ==2) { /* dispatch_async(dispatch_get_main_queue(), ^{ [self.socketManager youpaifsendHangup]; }); */ } } //add by leo v1.0.8 视频中守护回调 -(void)youpaifaddGuardSuccess { } //add by leo v1.0.8 弱网警告 -(void)autoHangUp { if(self.youpaipsocketManager) { //确定退出视频咨询 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"您的网络状况糟糕" message:@"为了良好的视频体验,建议您先挂断视频" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action){ }]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action){ [self videoEnd:5]; }]; [alertController addAction:cancelAction]; [alertController addAction:okAction]; [self presentViewController:alertController animated:YES completion:nil]; } } @end