YOUPAILCBaseVideoCallVC.m 100 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367
  1. //
  2. // YOUPAILCBaseVideoCallVC.m
  3. // LiveChat
  4. //
  5. // Created by 张灿 on 2018/9/17.
  6. // Copyright © 2018年 caicai. All rights reserved.
  7. //
  8. #import "YOUPAILCBaseVideoCallVC.h"
  9. #import "FUCamera.h"
  10. #import "PFAPIDemoBar.h"
  11. #import "PFDateHandle.h"
  12. #import <PixelFree/SMPixelFree.h>
  13. //#import "YOUPAIAGVideoProcessing.h"
  14. #import "AppDelegate.h"
  15. //add by leo v1.0.8 视频中守护
  16. #import "YOUPAILPGuardHerVC.h"
  17. #import "UIViewController+TFPresent.h"
  18. #import "YOUPAIZYXianNvBangVC.h"
  19. #import "YOUPAILZVideoDiscountWindow.h"
  20. #import "YOUPAILCReportVC.h"
  21. #import <SVGAParser.h>
  22. #import <SVGAPlayer.h>
  23. #import "YOUPAIXRWalletVC.h"
  24. #import "LZAlertWindow.h"
  25. #import "YOUPAILZCommonGiftView.h"
  26. #import "YOUPAIHRRechargePayWindow.h"
  27. #import "SDCycleScrollView.h"
  28. #import "YOUPAIHRWebWindow.h"
  29. #import "YOUPAIZYAdvertWindow.h"
  30. #import "NIMMessageMaker.h"
  31. #import "YOUPAILCIMTool.h"
  32. @interface YOUPAILCBaseVideoCallVC ()<FUCameraDelegate,PFAPIDemoBarDelegate,SVGAPlayerDelegate,LZChatRoomGiftViewDelegate,LPGuardHerDelegate,SDCycleScrollViewDelegate,ZYAdvertWindowDelegate>
  33. @property (assign,nonatomic) CGPoint youpaipstartPoint; //用来做清屏
  34. @property (nonatomic, strong) FUCamera *youpaipmCamera; //Faceunity Camera
  35. @property(nonatomic,assign)BOOL youpaipisRecordScreen;
  36. @property(nonatomic,strong)UIView *youpaiprecoderHideView;
  37. @property (nonatomic,strong)UIButton *youpaipgiftPopBtn;
  38. @property (nonatomic, strong) NSMutableArray *youpaipgifts; // 礼物数据
  39. @property (nonatomic, strong) NSMutableArray <YOUPAILZChatRoomGiftView *>* youpaipgiftViews;// 礼物
  40. @property (nonatomic,strong)SVGAPlayer *youpaipsvgaPlayer;
  41. @property (nonatomic,strong)SVGAParser *youpaipparser;
  42. @property (nonatomic, assign) BOOL youpaipisPlaySvga;
  43. @property(nonatomic,strong)UIButton *closeBtn;
  44. @property(nonatomic,strong)SDCycleScrollView* youpaipscrollView;//右下侧轮播
  45. @property (nonatomic, strong) NSArray <YOUPAILCBannerModel *> *youpaipbannerArray;
  46. @property (strong, nonatomic) YOUPAILCFirstRechargeModel *youpaipfirstRechargeModel;
  47. @property(nonatomic, strong) PFAPIDemoBar *beautyEditView;
  48. @property (nonatomic, strong) NSUserDefaults *def;
  49. @property (nonatomic,strong) SMPixelFree *mPixelFree;
  50. @property (nonatomic,assign)BOOL clickCompare;
  51. @end
  52. @implementation YOUPAILCBaseVideoCallVC
  53. //@synthesize consumer;
  54. -(BOOL)prefersStatusBarHidden
  55. {
  56. return YES;
  57. }
  58. - (FUCamera *)youpaipmCamera {
  59. if (!_youpaipmCamera) {
  60. _youpaipmCamera = [[FUCamera alloc] init];
  61. _youpaipmCamera.delegate = self;
  62. }
  63. return _youpaipmCamera;
  64. }
  65. - (void)dealloc{
  66. NSLog(@"dealloc basevideo");
  67. [[NSNotificationCenter defaultCenter] removeObserver:self];
  68. [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
  69. }
  70. - (void)viewWillAppear:(BOOL)animated{
  71. [super viewWillAppear:animated];
  72. self.navigationController.navigationBarHidden = YES;
  73. [LCSaveData saveIsVideo:YES];
  74. [self.youpaipmCamera startCapture];
  75. }
  76. - (void)viewDidAppear:(BOOL)animated{
  77. [super viewDidAppear:animated];
  78. }
  79. - (void)viewWillDisappear:(BOOL)animated{
  80. [super viewWillDisappear:animated];
  81. // if (self.youpaipsvgaPlayer) {
  82. // [self.youpaipsvgaPlayer removeFromSuperview];
  83. // }
  84. [self.youpaipplayer stop];
  85. //add by leo 此处会导致vc无法释放
  86. self.youpaipplayer =nil;
  87. //add by leo 异常退出/被踢 显示处于视频中
  88. [LCSaveData saveIsVideo:NO];
  89. self.navigationController.navigationBarHidden = NO;
  90. }
  91. - (void)viewDidLoad{
  92. [super viewDidLoad];
  93. self.def = [NSUserDefaults standardUserDefaults];
  94. [self initPixelFree];
  95. [self setDefaultParam];
  96. [self youpaifmonitorShot];
  97. [self youpaifmonitorRecordVideo];
  98. self.sx_disableInteractivePop = YES;
  99. self.youpaipchatArray = [NSMutableArray array];
  100. self.youpaipsocketManager = [[LCWebSocketManager alloc]initWithDelegate:self serverUrl:self.youpaipvideoModel.youpaipsocket_url roomId:self.youpaipvideoModel.youpaiproom_id];
  101. kAppDelegate.ksocketManager = self.youpaipsocketManager;
  102. NSString* path = [[NSBundle mainBundle] pathForResource:@"sound"ofType:@"bundle"];
  103. NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/call_bg.mp3",path]];
  104. self.youpaipplayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
  105. [self.youpaipplayer prepareToPlay];
  106. self.youpaipplayer.numberOfLoops = -1;
  107. [self.youpaipplayer play];
  108. [self youpaifinitView];
  109. [self youpaifinitSvga];
  110. [self youpaifinitAgora];
  111. [self youpaifrequestBannerData];
  112. // NSString* str=[AgoraRtcEngineKit getSdkVersion];
  113. //设置默认曝光度
  114. [self.youpaipmCamera setExposureValue:0];
  115. [self.youpaipmCamera startCapture];
  116. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youpaifkeyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
  117. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youpaifkeyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
  118. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youpaifwillResignActive) name:UIApplicationWillResignActiveNotification object:nil];
  119. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];
  120. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil];
  121. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youpaiflLogout) name:@"AbnormalLogout" object:nil];
  122. }
  123. #pragma mark 澜极美颜--start
  124. -(PFAPIDemoBar *)beautyEditView {
  125. if (!_beautyEditView) {
  126. _beautyEditView = [[PFAPIDemoBar alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 280, self.view.frame.size.width, 280)];
  127. _beautyEditView.mDelegate = self;
  128. }
  129. return _beautyEditView ;
  130. }
  131. -(void)comparisonButtonDidClick:(BOOL)state{
  132. self.clickCompare = state;
  133. }
  134. -(void)writeData:(NSData *)data fileName:(NSString *)fileName{
  135. NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  136. NSString *documentDirectory = [documentDirectories objectAtIndex:0];
  137. // 获取目标文件的完整路径
  138. NSString *filePath = [documentDirectory stringByAppendingPathComponent:fileName];
  139. // [[NSFileManager defaultManager] fileExistsAtPath:filePath];
  140. // 创建文件并覆盖写入数据
  141. BOOL success = [[NSFileManager defaultManager] createFileAtPath:filePath
  142. contents:data
  143. attributes:nil];
  144. if (success) {
  145. NSLog(@"数据写入成功");
  146. } else {
  147. NSLog(@"数据写入失败");
  148. }
  149. }
  150. -(NSData *)readDatafileName:(NSString *)fileName{
  151. NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  152. NSString *documentDirectory = [documentDirectories objectAtIndex:0];
  153. // 获取目标文件的完整路径
  154. NSString *filePath = [documentDirectory stringByAppendingPathComponent:fileName];
  155. NSData *data = [NSData dataWithContentsOfFile:filePath];
  156. return data;
  157. }
  158. -(void)initPixelFree{
  159. NSString *face_FiltePath = [[NSBundle mainBundle] pathForResource:@"filter_model.bundle" ofType:nil];
  160. NSString *authFile = [[NSBundle mainBundle] pathForResource:@"pixelfreeAuth.lic" ofType:nil];
  161. self.mPixelFree = [[SMPixelFree alloc] initWithProcessContext:nil srcFilterPath:face_FiltePath authFile:authFile];
  162. [self.view addSubview:self.beautyEditView];
  163. self.beautyEditView.hidden = YES;
  164. }
  165. -(void)setDefaultParam{
  166. NSArray<PFBeautyParam *>* defaultData = [PFDateHandle setupShapData];
  167. NSArray<PFBeautyParam *>* defaultSkinData = [PFDateHandle setupSkinData];
  168. NSArray<PFBeautyParam *>* defaultfiltersData = [PFDateHandle setupFilterData];
  169. NSArray<PFBeautyParam *>* defaultfaceData = [PFDateHandle setupFaceType];
  170. // 读本地缓存
  171. NSData *data = [self readDatafileName:@"shapeParamsData"];
  172. if (data) {
  173. defaultData = [NSKeyedUnarchiver unarchiveObjectWithData:data];
  174. }
  175. data = [self readDatafileName:@"skinParamsData"];
  176. if (data) {
  177. defaultSkinData = [NSKeyedUnarchiver unarchiveObjectWithData:data];
  178. }
  179. data = [self readDatafileName:@"filtersParamsData"];
  180. if (data) {
  181. defaultfiltersData = [NSKeyedUnarchiver unarchiveObjectWithData:data];
  182. }
  183. data = [self readDatafileName:@"oneKeyParamsData"];
  184. if (data) {
  185. defaultfaceData = [NSKeyedUnarchiver unarchiveObjectWithData:data];
  186. }
  187. // 更新 UI
  188. self.beautyEditView.shapeParams = defaultData;
  189. self.beautyEditView.skinParams = defaultSkinData;
  190. self.beautyEditView.filtersParams = defaultfiltersData;
  191. self.beautyEditView.faceTypeParams = defaultfaceData;
  192. NSUserDefaults*userDefaults = [NSUserDefaults standardUserDefaults];
  193. int oneKeyType = (int)[userDefaults integerForKey:@"oneKeyType"];
  194. int filtersIndex = (int)[userDefaults integerForKey:@"filtersUseIndex"];
  195. self.beautyEditView.oneKeyType = oneKeyType;
  196. self.beautyEditView.filterIndex = filtersIndex;
  197. [self.beautyEditView updateDemoBar];
  198. // 更新 SDK 设置
  199. for (PFBeautyParam *param in defaultData) {
  200. [self filterValueChange:param];
  201. }
  202. for (PFBeautyParam *param in defaultSkinData) {
  203. [self filterValueChange:param];
  204. }
  205. PFBeautyParam *param = defaultfaceData[oneKeyType];
  206. [self filterValueChange:param];
  207. param = defaultfiltersData[filtersIndex];
  208. [self filterValueChange:param];
  209. }
  210. -(void)filterValueChange:(PFBeautyParam *)param{
  211. CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();
  212. float value = param.mValue;
  213. if(param.type == FUDataTypeBeautify){
  214. if ([param.mParam isEqualToString:@"face_EyeStrength"]) {
  215. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_EyeStrength value:&value];
  216. }
  217. if ([param.mParam isEqualToString:@"face_thinning"]) {
  218. float aa = param.mValue;
  219. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_thinning value:&value];
  220. }
  221. if ([param.mParam isEqualToString:@"face_narrow"]) {
  222. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_narrow value:&value];
  223. }
  224. if ([param.mParam isEqualToString:@"face_chin"]) {
  225. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_chin value:&value];
  226. }
  227. if ([param.mParam isEqualToString:@"face_V"]) {
  228. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_V value:&value];
  229. }
  230. if ([param.mParam isEqualToString:@"face_small"]) {
  231. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_small value:&value];
  232. }
  233. if ([param.mParam isEqualToString:@"face_nose"]) {
  234. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_nose value:&value];
  235. }
  236. if ([param.mParam isEqualToString:@"face_forehead"]) {
  237. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_forehead value:&value];
  238. }
  239. if ([param.mParam isEqualToString:@"face_mouth"]) {
  240. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_mouth value:&value];
  241. }
  242. if ([param.mParam isEqualToString:@"face_philtrum"]) {
  243. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_philtrum value:&value];
  244. }
  245. if ([param.mParam isEqualToString:@"face_long_nose"]) {
  246. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_long_nose value:&value];
  247. }
  248. if ([param.mParam isEqualToString:@"face_eye_space"]) {
  249. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_eye_space value:&value];
  250. }
  251. if ([param.mParam isEqualToString:@"face_smile"]) {
  252. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_smile value:&value];
  253. }
  254. if ([param.mParam isEqualToString:@"face_eye_rotate"]) {
  255. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_eye_rotate value:&value];
  256. }
  257. if ([param.mParam isEqualToString:@"face_canthus"]) {
  258. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFace_canthus value:&value];
  259. }
  260. if ([param.mParam isEqualToString:@"runddy"]) {
  261. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFaceRuddyStrength value:&value];
  262. }
  263. if ([param.mParam isEqualToString:@"writen"]) {
  264. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFaceWhitenStrength value:&value];
  265. }
  266. if ([param.mParam isEqualToString:@"blur"]) {
  267. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFaceBlurStrength value:&value];
  268. }
  269. if ([param.mParam isEqualToString:@"sharpen"]) {
  270. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFaceSharpenStrength value:&value];
  271. }
  272. if ([param.mParam isEqualToString:@"newWhitenStrength"]) {
  273. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFaceM_newWhitenStrength value:&value];
  274. }
  275. if ([param.mParam isEqualToString:@"qualityStrength"]) {
  276. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeFaceH_qualityStrength value:&value];
  277. }
  278. }
  279. if (param.type == FUDataTypeFilter) {
  280. const char *aaa = [param.mParam UTF8String];
  281. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterName value:(void *)aaa];
  282. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterStrength value:&value];
  283. }
  284. if (param.type == FUDataTypeStickers) {
  285. if([param.mParam isEqualToString:@"origin"]){
  286. [self.mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterSticker2DFilter value:NULL];
  287. } else{
  288. // NSString *path = [[NSBundle mainBundle] pathForResource:@"Stickers" ofType:nil];
  289. // NSString *currentFolder = [path stringByAppendingPathComponent:param.mParam];
  290. // const char *aaa = [currentFolder UTF8String];
  291. // [self.mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterSticker2DFilter value:(void *)aaa];
  292. NSString *name = [NSString stringWithFormat:@"%@.bundle",param.mParam];
  293. NSString *paths = [[NSBundle mainBundle] pathForResource:name ofType:nil];
  294. [self.mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterSticker2DFilter value:(void *)[paths UTF8String]];
  295. }
  296. }
  297. if (param.type == FUDataTypeOneKey) {
  298. if ([param.mTitle isEqualToString:@"origin"]) {
  299. int value = PFBeautyTypeOneKeyNormal;
  300. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeOneKey value:&value];
  301. }
  302. if ([param.mTitle isEqualToString:@"自然"]) {
  303. int value = PFBeautyTypeOneKeyNatural;
  304. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeOneKey value:&value];
  305. }
  306. if ([param.mTitle isEqualToString:@"可爱"]) {
  307. int value = PFBeautyTypeOneKeyCute;
  308. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeOneKey value:&value];
  309. }
  310. if ([param.mTitle isEqualToString:@"女神"]) {
  311. int value = PFBeautyTypeOneKeyGoddess;
  312. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeOneKey value:&value];
  313. }
  314. if ([param.mTitle isEqualToString:@"白净"]) {
  315. int value = PFBeautyTypeOneKeyFair;
  316. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeOneKey value:&value];
  317. }
  318. }
  319. }
  320. -(void)bottomDidChange:(int)index{
  321. if (index != 0 && _beautyEditView.oneKeyType != PFBeautyTypeOneKeyNormal) {
  322. int value = PFBeautyTypeOneKeyNormal;
  323. [_mPixelFree pixelFreeSetBeautyFiterParam:PFBeautyFiterTypeOneKey value:&value];
  324. [self showDelayedAlert];
  325. _beautyEditView.oneKeyType = PFBeautyTypeOneKeyNormal;
  326. }
  327. }
  328. - (void)showDelayedAlert {
  329. // 创建 UIAlertController
  330. UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"一键美颜已关闭" preferredStyle:UIAlertControllerStyleAlert];
  331. dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC));
  332. dispatch_after(delay, dispatch_get_main_queue(), ^{
  333. [alertController dismissViewControllerAnimated:YES completion:nil];
  334. });
  335. [self presentViewController:alertController animated:YES completion:nil];
  336. }
  337. #pragma mark 澜极美颜--end
  338. - (void)youpaiflLogout{
  339. [self videoEnd:5];
  340. }
  341. - (void)youpaifinitView{
  342. self.youpaipremoteVideo = [[YMMagicView alloc]initWithFrame:CGRectMake(0,0,KScreenWidth,KScreenHeight)];
  343. self.youpaipremoteVideo.backgroundColor = [UIColor clearColor];
  344. [self.view addSubview:self.youpaipremoteVideo];
  345. self.youpaiprecoderHideView = [[UIView alloc]init];
  346. [self.youpaiprecoderHideView setBackgroundColor:[UIColor whiteColor]];
  347. [self.youpaiprecoderHideView setHidden:YES];
  348. [self.view addSubview:self.youpaiprecoderHideView];
  349. UIView* msgCoverView = [[UIView alloc]initWithFrame:CGRectMake(-KScreenWidth, 0, KScreenWidth*2, KScreenHeight)];
  350. msgCoverView.backgroundColor = [UIColor clearColor];
  351. UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(youpaifmsgViewPanHandel:)];
  352. [msgCoverView addGestureRecognizer:pan];
  353. UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(youpaifdoubleTapHandel:)];
  354. doubleTap.numberOfTapsRequired = 2;
  355. [msgCoverView addGestureRecognizer:doubleTap];
  356. self.youpaipmsgCoverView = msgCoverView;
  357. [self.view addSubview:msgCoverView];
  358. UIView* interView = [[UIView alloc]initWithFrame:CGRectMake(KScreenWidth, 0, KScreenWidth, KScreenHeight)];
  359. interView.backgroundColor = [UIColor clearColor];
  360. self.youpaipinterView = interView;
  361. [msgCoverView addSubview:interView];
  362. //设置顶部按钮
  363. UIButton* closeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  364. [closeBtn setImage:[UIImage imageNamed:@"vqu_images_video_end"] forState:(UIControlStateNormal)];
  365. self.closeBtn = closeBtn;
  366. [closeBtn addTarget:self action:@selector(youpaifcloseBtnClick) forControlEvents:(UIControlEventTouchUpInside)];
  367. [self.youpaipinterView addSubview:closeBtn];
  368. [closeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  369. make.left.offset(14.0f);
  370. make.top.offset(StatusBarHeight + 4.0f);
  371. make.size.mas_offset(CGSizeMake(30.0f, 30.0f));
  372. }];
  373. closeBtn.hidden = YES;
  374. UIView *timeBgv = [[UIView alloc] init];
  375. timeBgv.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7];
  376. timeBgv.layer.cornerRadius = 10;
  377. timeBgv.layer.masksToBounds = YES;
  378. [self.youpaipinterView addSubview:timeBgv];
  379. UILabel *durationLb = [UILabel new];
  380. durationLb.textColor = [UIColor whiteColor];
  381. durationLb.font = [UIFont monospacedDigitSystemFontOfSize:12 weight:(UIFontWeightRegular)];
  382. durationLb.textAlignment = NSTextAlignmentCenter;
  383. durationLb.text = @"通话时长: 00:00:00";
  384. [timeBgv addSubview:durationLb];
  385. self.youpaiptimeLabel = durationLb;
  386. UILabel *hLine = [UILabel new];
  387. hLine.backgroundColor = [UIColor whiteColor];
  388. [timeBgv addSubview:hLine];
  389. UILabel *remainLb = [UILabel new];
  390. remainLb.textColor = [UIColor whiteColor];
  391. remainLb.font = [UIFont monospacedDigitSystemFontOfSize:12 weight:(UIFontWeightRegular)];
  392. remainLb.textAlignment = NSTextAlignmentCenter;
  393. remainLb.text = @"剩余时长: 00:00:00";
  394. [timeBgv addSubview:remainLb];
  395. self.youpaipcancallTimeLab = remainLb;
  396. [timeBgv mas_makeConstraints:^(MASConstraintMaker *make) {
  397. make.top.equalTo(closeBtn.mas_bottom).offset(10);
  398. make.left.equalTo(closeBtn.mas_left).offset(0);
  399. }];
  400. [durationLb mas_makeConstraints:^(MASConstraintMaker *make) {
  401. make.top.equalTo(timeBgv.mas_top).offset(10);
  402. make.left.equalTo(timeBgv.mas_left).offset(10);
  403. make.right.equalTo(timeBgv.mas_right).offset(-10);
  404. }];
  405. [hLine mas_makeConstraints:^(MASConstraintMaker *make) {
  406. make.top.equalTo(durationLb.mas_bottom).offset(6);
  407. make.left.equalTo(timeBgv.mas_left).offset(10);
  408. make.right.equalTo(timeBgv.mas_right).offset(-10);
  409. make.height.mas_equalTo(0.7);
  410. }];
  411. [remainLb mas_makeConstraints:^(MASConstraintMaker *make) {
  412. make.top.equalTo(hLine.mas_bottom).offset(6);
  413. make.left.equalTo(timeBgv.mas_left).offset(10);
  414. make.right.equalTo(timeBgv.mas_right).offset(-10);
  415. make.bottom.equalTo(timeBgv.mas_bottom).offset(-10);
  416. }];
  417. // UITapGestureRecognizer* interTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(youpaifinterHandel:)];
  418. // [self.demoBarBgV addGestureRecognizer:interTap];
  419. self.youpaiplocalVideo = [[YMMagicView alloc]initWithFrame:CGRectMake(KScreenWidth-14.0f-90.0f,StatusBarHeight+4, 90.0f, 120.0f)];
  420. self.youpaiplocalVideo.backgroundColor = [UIColor blackColor];
  421. self.youpaiplocalVideo.layer.cornerRadius = 5.0;
  422. self.youpaiplocalVideo.layer.masksToBounds = YES;
  423. [self.view addSubview:self.youpaiplocalVideo];
  424. self.youpaiplocalVideo.hidden = YES;
  425. UITapGestureRecognizer* localTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(youpaifloaclVideoHandel:)];
  426. [self.youpaiplocalVideo addGestureRecognizer:localTap];
  427. //右下侧轮播
  428. SDCycleScrollView *bannerView1 = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(KScreenWidth - 12.0f - 49.0f, (KScreenHeight-50)/2, 50, 50.0f) delegate:self placeholderImage:[UIImage imageNamed:@""]];
  429. self.youpaipscrollView = bannerView1;
  430. bannerView1.pageControlDotSize = CGSizeMake(0, 0);
  431. bannerView1.autoScrollTimeInterval = 3.0;//2s轮播
  432. bannerView1.pageControlStyle = SDCycleScrollViewPageContolStyleNone;
  433. bannerView1.bannerImageViewContentMode = UIViewContentModeScaleAspectFit;
  434. bannerView1.backgroundColor = [UIColor clearColor];
  435. [self.view addSubview:bannerView1];
  436. bannerView1.hidden = YES;
  437. }
  438. /// 获取banner数据
  439. - (void)youpaifrequestBannerData{
  440. @weakify(self);
  441. [LCHttpHelper requestWithURLString:GetAdvert parameters:@{@"position":@"10"} needToken:YES type:(HttpRequestTypePost) success:^(id responseObject) {
  442. @strongify(self);
  443. NSDictionary* dict = (NSDictionary*)responseObject;
  444. NSInteger code = [[dict objectForKey:@"code"] integerValue];
  445. if (code==0) {//成功
  446. self.youpaipfirstRechargeModel = [YOUPAILCFirstRechargeModel mj_objectWithKeyValues:dict[@"data"]];
  447. NSMutableArray *imgUrlArray1 = [NSMutableArray new];
  448. for (YOUPAILCBannerModel* model in self.youpaipfirstRechargeModel.youpaiplist) {
  449. [imgUrlArray1 addObject:[LCTools getImageUrlWithAddress:model.youpaipimage]];
  450. }
  451. self.youpaipscrollView.imageURLStringsGroup = imgUrlArray1;
  452. }
  453. } failure:^(NSError *error) {
  454. }];
  455. }
  456. #pragma mark - SDCycleScrollViewDelegate
  457. - (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index
  458. {
  459. YOUPAILCBannerModel* model = self.youpaipfirstRechargeModel.youpaiplist[index];
  460. if (model.youpaipwindow_type==2) {
  461. YOUPAIHRWebWindow *window = [[YOUPAIHRWebWindow alloc] init];
  462. window.isTouchDismiss = YES;
  463. window.youpaipurl = model.youpaipwindow_link;
  464. window.youpaipwidth = model.youpaipwidth;
  465. window.youpaipheight = model.youpaipheight;
  466. window.youpaipgravity = model.youpaipgravity;
  467. [self TFPresentVC:window completion:^{}];
  468. }else {
  469. YOUPAIZYAdvertWindow *VC= [[YOUPAIZYAdvertWindow alloc]init];
  470. VC.youpaipdelegate = self;
  471. VC.vWidth = KScreenWidth -30;
  472. VC.vHeight = KScreenWidth-30;
  473. VC.youpaipimageurl = model.youpaipimage;
  474. VC.youpaiplink_type = model.youpaiplink_type;
  475. VC.youpaiplink_url = model.youpaiplink_url;
  476. VC.isTouchDismiss = YES;
  477. [self TFPresentVC:VC completion:^{}];
  478. }
  479. }
  480. #pragma mark -ZYAdvertWindowDelegate
  481. -(void)youpaifclickAdverImage:(NSInteger)link_type andUrl:(NSString *)link_url
  482. {
  483. if (link_type == 1) {
  484. ZCBaseWebVC* baseWeb = [[ZCBaseWebVC alloc]init];
  485. baseWeb.contentUrl = link_url;
  486. [self.navigationController pushViewController:baseWeb animated:YES];
  487. }else if (link_type==2 || link_type==3){
  488. [self youpaifpageToStr:link_url];
  489. }
  490. }
  491. - (void)youpaifinitSvga{
  492. self.youpaipsvgaPlayer = [[SVGAPlayer alloc] initWithFrame:[UIScreen mainScreen].bounds];
  493. self.youpaipsvgaPlayer.contentMode = UIViewContentModeScaleAspectFit;
  494. self.youpaipsvgaPlayer.delegate = self;
  495. [self.view addSubview:self.youpaipsvgaPlayer];
  496. self.youpaipsvgaPlayer.userInteractionEnabled = NO;
  497. self.youpaipsvgaPlayer.hidden = YES;
  498. self.youpaipsvgaPlayer.loops = 1;
  499. self.youpaipsvgaPlayer.clearsAfterStop = true;
  500. self.youpaipparser = [[SVGAParser alloc] init];
  501. }
  502. - (UILabel*)youpaifcreateLabelWithFrame:(CGRect)frame text:(NSString*)contentText{
  503. UILabel* lab = [[UILabel alloc]initWithFrame:frame];
  504. lab.textColor = [UIColor whiteColor];
  505. lab.font = [UIFont systemFontOfSize:11];
  506. lab.textAlignment = NSTextAlignmentLeft;
  507. lab.text = contentText;
  508. return lab;
  509. }
  510. - (void)youpaifinitTextToolView{
  511. UIView* textToolView = [[UIView alloc]initWithFrame:CGRectMake(0, KScreenHeight, KScreenWidth, 65)];
  512. [LCTools clipCorner:UIRectCornerTopLeft|UIRectCornerTopRight View:textToolView size:CGSizeMake(20.0f, 20.0f)];
  513. textToolView.backgroundColor = HexColorFromRGB(0xffffff);
  514. [self.view addSubview:textToolView];
  515. self.youpaiptextToolView = textToolView;
  516. //文本
  517. UITextField *sendTextView = [[UITextField alloc]init];
  518. sendTextView.layer.cornerRadius = 17.5f;
  519. sendTextView.clipsToBounds = YES;
  520. sendTextView.tintColor = ZYPinkColor;
  521. sendTextView.leftViewMode = UITextFieldViewModeAlways;
  522. sendTextView.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 13, 35)];
  523. UIView* rightView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 13, 35)];
  524. sendTextView.rightView = rightView;
  525. sendTextView.rightViewMode = UITextFieldViewModeAlways;
  526. sendTextView.font = [UIFont systemFontOfSize:14];
  527. sendTextView.placeholder = @"说点什么...";
  528. sendTextView.backgroundColor = LZF7F8FAColor;
  529. //sendTextView.delegate = self;
  530. self.youpaipsendTextF = sendTextView;
  531. [textToolView addSubview:sendTextView];
  532. //发送
  533. UIButton *sendMsgBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  534. sendMsgBtn.titleLabel.font = [UIFont systemFontOfSize:14];
  535. [sendMsgBtn setTitle:@"发送" forState:UIControlStateNormal];
  536. [sendMsgBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)];
  537. sendMsgBtn.layer.cornerRadius = 17.5f;
  538. sendMsgBtn.clipsToBounds = YES;
  539. [sendMsgBtn setBackgroundImage:[LCTools ColorImage:CGSizeMake(62, 35) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:GradientLeftToRight] forState:UIControlStateNormal];
  540. [sendMsgBtn addTarget:self action:@selector(youpaifsendMsgBtnClick) forControlEvents:UIControlEventTouchUpInside];
  541. [textToolView addSubview:sendMsgBtn];
  542. [sendTextView makeConstraints:^(MASConstraintMaker *make) {
  543. make.left.offset(12);
  544. make.centerY.equalTo(textToolView);
  545. make.right.equalTo(sendMsgBtn.mas_left).offset(-12.0f);
  546. make.height.equalTo(35);
  547. }];
  548. [sendMsgBtn makeConstraints:^(MASConstraintMaker *make) {
  549. make.right.offset(-12.0f);
  550. make.centerY.equalTo(textToolView);
  551. make.height.equalTo(35.0f);
  552. make.width.equalTo(62);
  553. }];
  554. }
  555. - (void)youpaifsetupInterView{
  556. UIView *timerBgV = [[UIView alloc] init];
  557. timerBgV.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3f];
  558. timerBgV.layer.cornerRadius = 10.5f;
  559. timerBgV.clipsToBounds = YES;
  560. [self.view addSubview:timerBgV];
  561. [timerBgV mas_makeConstraints:^(MASConstraintMaker *make) {
  562. make.left.offset(54.0f);
  563. make.top.offset(StatusBarHeight + 9.0f);
  564. make.height.offset(21.0f);
  565. make.width.greaterThanOrEqualTo(45.0f);
  566. }];
  567. // UIImageView *timerImgV = [[UIImageView alloc] init];
  568. // timerImgV.image = [UIImage imageNamed:@"vqu_images_video_timer"];
  569. // [timerBgV addSubview:timerImgV];
  570. // [timerImgV mas_makeConstraints:^(MASConstraintMaker *make) {
  571. // make.left.offset(6.0f);
  572. // make.centerY.equalTo(timerBgV);
  573. // make.size.mas_offset(CGSizeMake(14.0f, 14.0f));
  574. // }];
  575. // UILabel *timeL = [[UILabel alloc] init];
  576. // timeL.textColor = [UIColor whiteColor];
  577. // timeL.font = LCFont12;
  578. // timeL.text = @"00:00";
  579. // [timerBgV addSubview:timeL];
  580. // self.youpaiptimeLabel = timeL;
  581. // [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
  582. // make.left.offset(6.0f);
  583. // // make.left.equalTo(timerImgV.mas_right).offset(4.0f);
  584. // make.top.bottom.offset(0.0f);
  585. // make.centerY.equalTo(timerBgV);
  586. // }];
  587. UIButton *reportBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  588. reportBtn.hidden = YES;
  589. reportBtn.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3f];
  590. reportBtn.frame = CGRectMake(0.0f, StatusBarHeight + 72.0f, 45.0f, 21.0f);
  591. [LCTools clipCorner:UIRectCornerBottomRight|UIRectCornerTopRight View:reportBtn size:CGSizeMake(10.5f, 10.5f)];
  592. [reportBtn addTarget:self action:@selector(youpaifreportBtnClick) forControlEvents:UIControlEventTouchUpInside];
  593. [self.view addSubview:reportBtn];
  594. UILabel *reportL = [[UILabel alloc] init];
  595. reportL.hidden = YES;
  596. reportL.textColor = HexColorFromRGB(0xEEEEEE);
  597. reportL.font = LCFont12;
  598. reportL.text = @"举报";
  599. [reportBtn addSubview:reportL];
  600. [reportL mas_makeConstraints:^(MASConstraintMaker *make) {
  601. make.right.offset(-7.0f);
  602. make.top.bottom.offset(0.0f);
  603. }];
  604. UIView *footerView = [[UIView alloc] init];
  605. [self.youpaipinterView addSubview:footerView];
  606. [footerView mas_makeConstraints:^(MASConstraintMaker *make) {
  607. make.left.right.offset(0.0f);
  608. make.bottom.offset(0.0f);
  609. make.height.offset(52.0f + SafeHeight);
  610. }];
  611. NSMutableArray *btns = [NSMutableArray array];
  612. // 美颜
  613. [btns addObject:@{
  614. @"image":[UIImage imageNamed:@"vqu_images_video_beauty"],
  615. @"selectedImage":[UIImage imageNamed:@"vqu_images_video_beauty"],
  616. @"event":@"youpaifbeautyBtnClick"
  617. }];
  618. // 切换摄像头
  619. [btns addObject:@{
  620. @"image":[UIImage imageNamed:@"vqu_images_video_change"],
  621. @"selectedImage":[UIImage imageNamed:@"vqu_images_video_change"],
  622. @"event":@"youpaifswitchBtnClick:"
  623. }];
  624. // 麦克风
  625. [btns addObject:@{
  626. @"image":[UIImage imageNamed:@"vqu_images_video_sound_on"],
  627. @"selectedImage":[UIImage imageNamed:@"vqu_images_video_sound_off"],
  628. @"event":@"youpaifvoiceBtnClick:"
  629. }];
  630. if (![[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){
  631. // 关闭摄像头
  632. [btns addObject:@{
  633. @"image":[UIImage imageNamed:@"vqu_images_video_on"],
  634. @"selectedImage":[UIImage imageNamed:@"vqu_images_video_off"],
  635. @"event":@"youpaifcameraBtnClick:"
  636. }];
  637. }
  638. // 信息
  639. [btns addObject:@{
  640. @"image":[UIImage imageNamed:@"vqu_images_video_news"],
  641. @"selectedImage":[UIImage imageNamed:@"vqu_images_video_news"],
  642. @"event":@"youpaifmsgBtnClick"
  643. }];
  644. // 礼物
  645. [btns addObject:@{
  646. @"image":[UIImage imageNamed:@"vqu_images_video_gift"],
  647. @"selectedImage":[UIImage imageNamed:@"vqu_images_video_gift"],
  648. @"event":@"youpaifgiftBtnClick"
  649. }];
  650. CGFloat totalWidth = btns.count * 46.0f + (btns.count - 1) * 15.0f;
  651. CGFloat startX = (KScreenWidth - totalWidth) / 2.0f;
  652. CGFloat width = kScreenWidth / btns.count;
  653. for (NSInteger i = 0; i < btns.count; i ++) {
  654. NSDictionary *dict = btns[i];
  655. UIImage *image = dict[@"image"];
  656. UIImage *selectedImage = dict[@"selectedImage"];
  657. UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  658. [btn setImage:image forState:UIControlStateNormal];
  659. [btn setImage:selectedImage forState:UIControlStateSelected];
  660. [btn addTarget:self action:NSSelectorFromString(dict[@"event"]) forControlEvents:(UIControlEventTouchUpInside)];
  661. //CGFloat x = startX + i * 46.0f + i * 15.0f;
  662. CGFloat x = i * width;
  663. btn.frame = CGRectMake(x, 0.0f, width, 46.0f);
  664. [footerView addSubview:btn];
  665. }
  666. UIButton *giftPopBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  667. [giftPopBtn setBackgroundImage:[UIImage imageNamed:@"vqu_images_video_gift_remind"] forState:UIControlStateNormal];
  668. [giftPopBtn addTarget:self action:@selector(youpaifgiftBtnClick) forControlEvents:UIControlEventTouchUpInside];
  669. giftPopBtn.hidden = YES;
  670. [self.youpaipinterView addSubview:giftPopBtn];
  671. self.youpaipgiftPopBtn = giftPopBtn;
  672. [giftPopBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  673. make.right.offset(-startX);
  674. make.bottom.equalTo(footerView.mas_top).offset(-8.0f);
  675. make.size.mas_offset(CGSizeMake(157.5f, 33.0f));
  676. }];
  677. if (![[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){
  678. UIButton *guardBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  679. guardBtn.hidden = YES;
  680. [guardBtn setBackgroundImage:[UIImage imageNamed:@"vqu_images_video_guard"] forState:UIControlStateNormal];
  681. [guardBtn addTarget:self action:@selector(youpaifguardBtnClick) forControlEvents:UIControlEventTouchUpInside];
  682. [self.youpaipinterView addSubview:guardBtn];
  683. [guardBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  684. make.right.offset(-14.0f);
  685. make.bottom.equalTo(giftPopBtn.mas_top).offset(-6.0f);
  686. make.size.mas_offset(CGSizeMake(57.0f, 45.0f));
  687. }];
  688. }
  689. UIView *durationBgL = [[UIView alloc] init];
  690. durationBgL.backgroundColor = [HexColorFromRGB(0x000000) colorWithAlphaComponent:0.3f];
  691. durationBgL.layer.cornerRadius = 14.5f;
  692. durationBgL.clipsToBounds = YES;
  693. [self.youpaipinterView addSubview:durationBgL];
  694. [durationBgL mas_makeConstraints:^(MASConstraintMaker *make) {
  695. make.left.offset(14.0f);
  696. make.bottom.equalTo(footerView.mas_top).offset(-14.0f);
  697. make.height.offset(29.0f);
  698. make.width.greaterThanOrEqualTo(46.0f);
  699. }];
  700. UIButton *rechargeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  701. rechargeBtn.hidden = YES;
  702. [rechargeBtn setBackgroundImage:[LCTools ColorImage:CGSizeMake(46.0f, 29.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:(GradientLeftToRight)] forState:(UIControlStateNormal)];
  703. rechargeBtn.titleLabel.font = LCFont14;
  704. [rechargeBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)];
  705. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){
  706. [rechargeBtn setTitle:@"提醒" forState:UIControlStateNormal];
  707. }else{
  708. [rechargeBtn setTitle:@"充值" forState:UIControlStateNormal];
  709. }
  710. rechargeBtn.layer.cornerRadius = 14.5f;
  711. rechargeBtn.layer.masksToBounds = YES;
  712. [rechargeBtn addTarget:self action:@selector(youpaiftoRecharge) forControlEvents:UIControlEventTouchUpInside];
  713. [durationBgL addSubview:rechargeBtn];
  714. [rechargeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  715. make.right.bottom.top.offset(0.0f);
  716. make.width.offset(46.0f);
  717. }];
  718. // UILabel *cancallTimeLab = [[UILabel alloc] init];
  719. // cancallTimeLab.textColor = [UIColor whiteColor];
  720. // cancallTimeLab.font = LCFont14;
  721. // [durationBgL addSubview:cancallTimeLab];
  722. // self.youpaipcancallTimeLab = cancallTimeLab;
  723. // [cancallTimeLab mas_makeConstraints:^(MASConstraintMaker *make) {
  724. // make.left.mas_equalTo(0);
  725. // make.right.mas_equalTo(rechargeBtn.mas_left).offset(-7.0f);
  726. // make.top.bottom.mas_equalTo(0.0f);
  727. // }];
  728. [self youpaiftimeStart];
  729. //设置聊天列表
  730. UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(14, KScreenHeight-KScreenHeight/4-70, 276.0f, KScreenHeight/4) style:UITableViewStylePlain];
  731. tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  732. tableView.showsVerticalScrollIndicator = NO;
  733. tableView.delegate = self;
  734. tableView.dataSource = self;
  735. tableView.backgroundColor = [UIColor clearColor];
  736. tableView.transform = CGAffineTransformMakeScale(1, -1);
  737. tableView.rowHeight = UITableViewAutomaticDimension;
  738. // tableView.estimatedRowHeight = 44.0f;
  739. tableView.estimatedSectionHeaderHeight = 0.0f;
  740. tableView.estimatedSectionFooterHeight = 0.0f;
  741. if (@available(iOS 15.0, *)) {
  742. tableView.sectionHeaderTopPadding = 0;
  743. }
  744. self.youpaipchatTableView = tableView;
  745. [self.youpaipinterView addSubview:tableView];
  746. [tableView mas_makeConstraints:^(MASConstraintMaker *make) {
  747. make.left.offset(14.0f);
  748. make.bottom.offset(-(52.0f+SafeHeight+6.0f+29.0f+14.0f));
  749. make.size.mas_offset(CGSizeMake(kScreenWidth - 28, KScreenHeight/4));
  750. }];
  751. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid] && self.youpaipvideoModel.youpaipchat_open_reduce == 1){
  752. // UIView *discountBgV = [[UIView alloc] init];
  753. // discountBgV.backgroundColor = [HexColorFromRGB(0x000000) colorWithAlphaComponent:0.3f];
  754. // discountBgV.layer.cornerRadius = 10.5f;
  755. // discountBgV.clipsToBounds = YES;
  756. // [self.view addSubview:discountBgV];
  757. // [discountBgV mas_makeConstraints:^(MASConstraintMaker *make) {
  758. // make.right.offset(-14.0f);
  759. // make.top.equalTo(self.youpaiplocalVideo.mas_bottom).offset(6.0f);
  760. // make.height.offset(21.0f);
  761. // make.width.greaterThanOrEqualTo(38.0f);
  762. // }];
  763. // UIButton *discountBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  764. // [discountBtn setBackgroundImage:[LCTools ColorImage:CGSizeMake(38.0f, 21.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:(GradientLeftToRight)] forState:(UIControlStateNormal)];
  765. // discountBtn.titleLabel.font = LCFont12;
  766. // [discountBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)];
  767. // [discountBtn setTitle:@"减免" forState:UIControlStateNormal];
  768. // discountBtn.layer.cornerRadius = 10.5f;
  769. // discountBtn.layer.masksToBounds = YES;
  770. // [discountBtn addTarget:self action:@selector(youpaifdiscountBtnClick) forControlEvents:UIControlEventTouchUpInside];
  771. // [discountBgV addSubview:discountBtn];
  772. // [discountBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  773. // make.left.bottom.top.offset(0.0f);
  774. // make.width.offset(38.0f);
  775. // }];
  776. // UILabel *discountL = [[UILabel alloc] init];
  777. // discountL.font = LCFont12;
  778. // discountL.textColor = [UIColor whiteColor];
  779. // [discountBgV addSubview:discountL];
  780. // self.youpaipdiscountL = discountL;
  781. // [discountL mas_makeConstraints:^(MASConstraintMaker *make) {
  782. // make.right.bottom.top.offset(0.0f);
  783. //// make.left.equalTo(discountBtn.mas_right).offset(0.0f);
  784. // make.left.bottom.top.offset(0.0f);
  785. // }];
  786. UIView *balanceBgV = [[UIView alloc] init];
  787. balanceBgV.layer.cornerRadius = 10.5f;
  788. balanceBgV.clipsToBounds = YES;
  789. balanceBgV.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3f];
  790. [self.view addSubview:balanceBgV];
  791. [balanceBgV mas_makeConstraints:^(MASConstraintMaker *make) {
  792. make.right.offset(-14.0f);
  793. make.top.equalTo(self.youpaiplocalVideo.mas_bottom).offset(6.0f);
  794. make.height.offset(21.0f);
  795. }];
  796. UILabel *balanceL = [[UILabel alloc] init];
  797. balanceL.textColor = [UIColor whiteColor];
  798. balanceL.font = LCFont12;
  799. [balanceBgV addSubview:balanceL];
  800. self.youpaipbalanceL = balanceL;
  801. [balanceL mas_makeConstraints:^(MASConstraintMaker *make) {
  802. make.top.bottom.offset(0.0f);
  803. make.right.offset(-7.0f);
  804. make.left.offset(7.0f);
  805. }];
  806. }else{
  807. UIView *discountBgV = [[UIView alloc] init];
  808. discountBgV.backgroundColor = [HexColorFromRGB(0x000000) colorWithAlphaComponent:0.3f];
  809. discountBgV.layer.cornerRadius = 10.5f;
  810. discountBgV.clipsToBounds = YES;
  811. discountBgV.hidden =YES;
  812. [self.view addSubview:discountBgV];
  813. self.youpaipformDiscountBgV = discountBgV;
  814. [discountBgV mas_makeConstraints:^(MASConstraintMaker *make) {
  815. make.right.offset(-14.0f);
  816. make.top.equalTo(self.youpaiplocalVideo.mas_bottom).offset(6.0f);
  817. make.height.offset(21.0f);
  818. }];
  819. UILabel *discountL = [[UILabel alloc] init];
  820. discountL.font = LCFont12;
  821. discountL.textColor = [UIColor whiteColor];
  822. [discountBgV addSubview:discountL];
  823. self.youpaipformDiscountL = discountL;
  824. [discountL mas_makeConstraints:^(MASConstraintMaker *make) {
  825. make.bottom.offset(-3.0f);
  826. make.top.offset(3.0f);
  827. make.left.offset(7.0f);
  828. make.right.offset(-7.0f);
  829. }];
  830. }
  831. [self youpaifinitTextToolView];
  832. }
  833. - (void)youpaifreportBtnClick{
  834. NSString *uid = [[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqual:self.youpaipvideoModel.youpaipto_uid] ? self.youpaipvideoModel.youpaipfrom_uid : self.youpaipvideoModel.youpaipto_uid;
  835. YOUPAILCReportVC* report = [[YOUPAILCReportVC alloc]init];
  836. report.youpaipreport_uid = uid;
  837. report.youpaiptype = 2;
  838. [self.navigationController pushViewController:report animated:YES];
  839. }
  840. -(void)youpaiftoRecharge
  841. {
  842. [UMengRecordTool umengEventCountWithId:RechargeClickVideo];
  843. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){
  844. [self.youpaipsocketManager sendChat:1 content:@"你余额不足哦,快去充值继续聊吧"];
  845. }
  846. else
  847. {
  848. YOUPAIXRWalletVC* coinRecharge = [[YOUPAIXRWalletVC alloc]init];
  849. [[ZCUtils getCurrentVC].navigationController pushViewController:coinRecharge animated:YES];
  850. }
  851. }
  852. - (void)youpaifdiscountBtnClick{
  853. @weakify(self);
  854. [LCHttpHelper requestWithURLString:VideoGetReduce parameters:@{@"room_id":self.youpaipvideoModel.youpaiproom_id} needToken:YES type:(HttpRequestTypePost) success:^(id responseObject) {
  855. @strongify(self);
  856. NSDictionary* dict = (NSDictionary*)responseObject;
  857. NSInteger code = [[dict objectForKey:@"code"] integerValue];
  858. if (code==0) {//成功
  859. YOUPAILZVideoDiscountWindow *vc = [[YOUPAILZVideoDiscountWindow alloc] init];
  860. vc.isTouchDismiss = YES;
  861. vc.youpaipmodel = [YOUPAILZVideoDiscountModel mj_objectWithKeyValues:[dict objectForKey:@"data"]];
  862. [vc setConfirmBtnClickBlock:^(YOUPAILZVideoDiscountItemModel * _Nonnull itemModel) {
  863. @strongify(self);
  864. [self.youpaipsocketManager discountWithTimerId:itemModel.youpaiptime_id];
  865. }];
  866. [self TFPresentVC:vc completion:^{}];
  867. }
  868. } failure:^(NSError *error) {
  869. }];
  870. }
  871. #pragma mark - Agora
  872. - (void)youpaifinitAgora{
  873. self.youpaipagoraKit = [AgoraRtcEngineKit sharedEngineWithAppId:AgoraID delegate:self];
  874. NSLog(@"version is %@",[AgoraRtcEngineKit getSdkVersion]);
  875. AgoraVideoEncoderConfiguration *configuration = [[AgoraVideoEncoderConfiguration alloc] initWithSize:AgoraVideoDimension1280x720 frameRate:AgoraVideoFrameRateFps24 bitrate:AgoraVideoBitrateCompatible orientationMode:AgoraVideoOutputOrientationModeAdaptative mirrorMode:AgoraVideoMirrorModeAuto];
  876. [self.youpaipagoraKit setVideoEncoderConfiguration:configuration];
  877. [self.youpaipagoraKit enableVideo];
  878. [self.youpaipagoraKit setExternalVideoSource:YES useTexture:YES sourceType:AgoraExternalVideoSourceTypeVideoFrame]; //只允许外部源
  879. [self.youpaipagoraKit setChannelProfile:AgoraChannelProfileLiveBroadcasting];
  880. [self.youpaipagoraKit setClientRole:AgoraClientRoleBroadcaster];
  881. //add by leo 修复视频镜像问题
  882. // [self.youpaipagoraKit setLocalVideoMirrorMode:AgoraVideoMirrorModeDisabled];
  883. // [self.youpaipagoraKit enableWebSdkInteroperability:YES];
  884. //
  885. AgoraRtcVideoCanvas *videoCanvas = [[AgoraRtcVideoCanvas alloc] init];
  886. videoCanvas.mirrorMode = AgoraVideoMirrorModeDisabled;
  887. videoCanvas.uid = 0;
  888. videoCanvas.view = self.youpaiplocalVideo.displayerOpenGLView;
  889. videoCanvas.renderMode = AgoraVideoRenderModeHidden;
  890. self.youpaiplocalCanvas = videoCanvas;
  891. [self.youpaipagoraKit setupLocalVideo:videoCanvas];
  892. }
  893. #pragma mark - AgoraRtcEngineDelegate
  894. //收到对方的视频
  895. - (void)rtcEngine:(AgoraRtcEngineKit *)engine firstRemoteVideoDecodedOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed
  896. {
  897. self.youpaiplocalVideo.hidden = NO;
  898. self.youpaipremoteVideo.hidden = NO;
  899. self.closeBtn.hidden = NO;
  900. self.youpaipscrollView.hidden = NO;
  901. AgoraRtcVideoCanvas *videoCanvas = [[AgoraRtcVideoCanvas alloc] init];
  902. videoCanvas.renderMode = AgoraVideoRenderModeHidden;
  903. videoCanvas.mirrorMode = AgoraVideoMirrorModeDisabled;
  904. self.youpaipremoteCanvas= videoCanvas;
  905. self.youpaipremoteCanvas.uid = uid;
  906. self.youpaipremoteCanvas.view = self.youpaipremoteVideo.displayerOpenGLView;
  907. int value = [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  908. NSLog(@"%d",value);
  909. }
  910. //- (void)rtcEngine:(AgoraRtcEngineKit *)engine
  911. // didVideoMuted:(BOOL)muted byUid:(NSUInteger)uid{
  912. // if (muted) {//对端关闭了视频
  913. // self.youpaiplocalCanvas.view = self.youpaipremoteVideo;
  914. // self.youpaipremoteCanvas.view = self.youpaiplocalVideo;
  915. // [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  916. // [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  917. // self.youpaiplocalVideo.hidden = YES;
  918. // }else{
  919. // self.youpaiplocalCanvas.view = self.youpaiplocalVideo;
  920. // self.youpaipremoteCanvas.view = self.youpaipremoteVideo;
  921. // [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  922. // [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  923. // self.youpaiplocalVideo.hidden = NO;
  924. // }
  925. //
  926. //}
  927. - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine
  928. remoteVideoStateChangedOfUid:(NSUInteger)uid state:(AgoraVideoRemoteState)state reason:(AgoraVideoRemoteReason)reason elapsed:(NSInteger)elapsed
  929. {
  930. if(reason == AgoraVideoRemoteReasonRemoteMuted){
  931. self.youpaiplocalCanvas.view = self.youpaipremoteVideo.displayerOpenGLView;
  932. self.youpaipremoteCanvas.view = self.youpaiplocalVideo.displayerOpenGLView;
  933. [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  934. [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  935. self.youpaiplocalVideo.hidden = YES;
  936. [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaipremoteVideo.displayerOpenGLView;
  937. [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaiplocalVideo.displayerOpenGLView;
  938. }else if(reason == AgoraVideoRemoteReasonRemoteUnmuted){ //远端恢复视频上传
  939. self.youpaiplocalCanvas.view = self.youpaiplocalVideo.displayerOpenGLView;
  940. self.youpaipremoteCanvas.view = self.youpaipremoteVideo.displayerOpenGLView;
  941. [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  942. [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  943. self.youpaiplocalVideo.hidden = NO;
  944. [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaiplocalVideo.displayerOpenGLView;
  945. [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaipremoteVideo.displayerOpenGLView;
  946. }
  947. }
  948. - (void)rtcEngine:(AgoraRtcEngineKit *)engine didAudioRouteChanged:(AgoraAudioOutputRouting)routing{
  949. // [ZCHUDHelper showTitle:[NSString stringWithFormat:@"音频路由已切换%d",routing]];
  950. }
  951. //踢人 v1.1.1
  952. //- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine connectionChangedToState:(AgoraConnectionStateType)state reason:(AgoraConnectionChangedReason)reason
  953. //{
  954. // if(reason ==3)
  955. // {
  956. // NSLog(@"收到踢人消息");
  957. // // [self videoEnd:5];
  958. // }
  959. //}
  960. #pragma mark - Agora Video Source Protocol
  961. - (BOOL)shouldInitialize {
  962. return YES;
  963. }
  964. - (void)shouldStart {
  965. [self.youpaipmCamera startCapture];
  966. }
  967. - (void)shouldStop {
  968. [self.youpaipmCamera stopCapture];
  969. }
  970. - (void)shouldDispose {
  971. }
  972. //- (AgoraVideoBufferType)bufferType {
  973. // return AgoraVideoBufferTypePixelBuffer;
  974. //}
  975. //- (AgoraVideoCaptureType)captureType{
  976. // return AgoraVideoCaptureTypeCamera;
  977. //}
  978. #pragma mark - FUCameraDelegate
  979. bool isNeeded = YES;
  980. -(void)didOutputVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer {
  981. if (isNeeded) {
  982. isNeeded = !isNeeded;
  983. return;
  984. }
  985. isNeeded = !isNeeded;
  986. CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();
  987. CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)CMSampleBufferGetImageBuffer(sampleBuffer) ;
  988. CVPixelBufferLockBaseAddress(pixelBuffer, 0);
  989. [_mPixelFree processWithBuffer:pixelBuffer rotationMode:PFRotationMode0];
  990. CGSize frameSize;
  991. if (CVPixelBufferGetPixelFormatType(pixelBuffer) == kCVPixelFormatType_32BGRA) {
  992. frameSize = CGSizeMake(CVPixelBufferGetBytesPerRow(pixelBuffer) / 4, CVPixelBufferGetHeight(pixelBuffer));
  993. }else{
  994. frameSize = CGSizeMake(CVPixelBufferGetWidth(pixelBuffer), CVPixelBufferGetHeight(pixelBuffer));
  995. }
  996. AgoraVideoFrame *videoFrame = [[AgoraVideoFrame alloc] init];
  997. videoFrame.format = 12;
  998. videoFrame.rotation = 0;
  999. videoFrame.textureBuf = pixelBuffer;
  1000. // self.youpaiplocalCanvas.view;
  1001. [[YOUPAIXLVideoShotTool sharedPusher].localVideo displayPixelBuffer:pixelBuffer withLandmarks:NULL count:0 MAX:YES];
  1002. // [self.youpaiplocalVideo displayPixelBuffer:pixelBuffer withLandmarks:NULL count:0 MAX:YES];
  1003. // BOOL result = [self.youpaipagoraKit pushExternalAudioFrameSampleBuffer:videoFrame];
  1004. BOOL result = [self.youpaipagoraKit pushExternalVideoFrame:videoFrame];
  1005. // pushExternalVideoFrame:videoFrame];
  1006. // CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
  1007. }
  1008. #pragma mark - WebSocketDelegate
  1009. - (void)youpaifrequestSuccess{
  1010. }
  1011. - (void)responseConnent{
  1012. }
  1013. - (void)responseChoosing:(NSString*)tip{
  1014. }
  1015. //add by leo 剩余可通话时间
  1016. - (void)canCallTime:(NSString*)tip
  1017. {
  1018. }
  1019. //v1.1.1断连重连
  1020. - (void)videoStart:(NSDictionary*)dict{
  1021. [self.youpaipplayer stop];
  1022. self.youpaipvideoModel.youpaipduration = [dict[@"duration"] integerValue];
  1023. //测试闪退
  1024. /*
  1025. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(),^{
  1026. NSString *aSt = nil;
  1027. NSDictionary *dic = @{@"key":aSt};
  1028. });
  1029. */
  1030. //add by leo 防止录屏
  1031. UIScreen * sc = [UIScreen mainScreen];
  1032. if (@available(iOS 11.0, *))
  1033. {
  1034. if (sc.isCaptured)
  1035. {
  1036. [self youpaifshowPromptWarningView:YES];
  1037. //add by leo 录屏上报
  1038. [self youpaifshotCheck:2];
  1039. }
  1040. }
  1041. else {
  1042. // Fallback on earlier versions
  1043. }
  1044. //是否主叫
  1045. BOOL callfrom = [[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipfrom_uid];
  1046. if (self.youpaipvideoModel.youpaipporn_check_v2.youpaipis_open && (self.youpaipvideoModel.youpaipporn_check_v2.youpaipcheck_from_user || callfrom)) {
  1047. NSLog(@"鉴黄已打开");
  1048. [YOUPAIXLVideoShotTool sharedPusher].shotCycle = self.youpaipvideoModel.youpaipporn_check_v2.youpaipinterval_time;
  1049. [YOUPAIXLVideoShotTool sharedPusher].periodArray = self.youpaipvideoModel.youpaipporn_check_v2.youpaipperiod_array;
  1050. // [YOUPAIAGVideoProcessing registerVideoPreprocessing:self.youpaipagoraKit];
  1051. //老版本
  1052. /*
  1053. [YOUPAIXLVideoShotTool sharedPusher].shotCycle = self.videoModel.porn_check.interval_time;
  1054. [YOUPAIXLVideoShotTool sharedPusher].period = self.videoModel.porn_check.period;
  1055. */
  1056. [YOUPAIXLVideoShotTool sharedPusher].room_id = self.youpaipvideoModel.youpaiproom_id;
  1057. [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaiplocalVideo.displayerOpenGLView;
  1058. [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaipremoteVideo.displayerOpenGLView;
  1059. [YOUPAIXLVideoShotTool sharedPusher].isPornCheckOpen = YES;
  1060. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipfrom_uid]){//自己是被叫端
  1061. [YOUPAIXLVideoShotTool sharedPusher].isFrom = YES;
  1062. [YOUPAIXLVideoShotTool sharedPusher].uid = self.youpaipvideoModel.youpaipto_uid;
  1063. }else{
  1064. [YOUPAIXLVideoShotTool sharedPusher].isFrom = NO;
  1065. [YOUPAIXLVideoShotTool sharedPusher].uid = self.youpaipvideoModel.youpaipfrom_uid;
  1066. }
  1067. [YOUPAIXLVideoShotTool start];
  1068. }
  1069. //加入声网频道
  1070. //modify by leo fix bug object unrelease
  1071. @weakify(self);
  1072. 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) {
  1073. @strongify(self);
  1074. if([self.youpaipagoraKit isSpeakerphoneEnabled]){
  1075. [self.youpaipagoraKit setEnableSpeakerphone:YES];
  1076. }
  1077. // self.localVideo.hidden = YES;
  1078. [UIApplication sharedApplication].idleTimerDisabled = YES;
  1079. }];
  1080. if (status<0) {
  1081. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
  1082. NSString *cachesDir = [paths objectAtIndex:0];
  1083. // 构建文件路径
  1084. NSString *filePath = [cachesDir stringByAppendingPathComponent:@"agorasdk.log"];
  1085. // 检查文件是否存在
  1086. if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
  1087. [LCCommonHttp uploadWithLocalFile:filePath successBlock:nil];
  1088. }
  1089. }
  1090. }
  1091. //1主动取消 2。拒绝 3.超时 4.被叫者挂断 5.主叫者挂断 6.费用不足
  1092. - (void)videoEnd:(NSInteger)type{
  1093. [self.youpaipsocketManager stopConnect];
  1094. self.youpaipsocketManager = nil;
  1095. kAppDelegate.ksocketManager = nil;
  1096. [LCSaveData saveIsVideo:NO];
  1097. [[NSNotificationCenter defaultCenter] removeObserver:self];
  1098. if (self.youpaiptimer) {
  1099. dispatch_source_cancel(self.youpaiptimer);//删除GCD定时器
  1100. self.youpaiptimer = nil;
  1101. }
  1102. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  1103. [self.youpaipmCamera stopCapture];
  1104. dispatch_async(self.youpaipmCamera.videoCaptureQueue, ^{
  1105. });
  1106. [self.youpaipagoraKit setExternalVideoSource:YES useTexture:YES sourceType:AgoraExternalVideoSourceTypeVideoFrame]; //只允许外部源
  1107. [self.youpaipagoraKit leaveChannel:nil];
  1108. [AgoraRtcEngineKit destroy];
  1109. if (type==11) {
  1110. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){//自己是被叫端
  1111. [self.navigationController dismissViewControllerAnimated:YES completion:^{
  1112. }];
  1113. }else{//自己是主叫端
  1114. [YOUPAIXLVideoShotTool stop];
  1115. YOUPAILCVideoFinishVC* finish = [[YOUPAILCVideoFinishVC alloc]init];
  1116. finish.youpaipvideoModel = self.youpaipvideoModel;
  1117. finish.role = 1;
  1118. [self.navigationController pushViewController:finish animated:YES];
  1119. }
  1120. }
  1121. if (type==4|| type==5 || type==6 || type==10) {//去往评价结束界面
  1122. //add by leo 关闭上传截图 定时器
  1123. [YOUPAIXLVideoShotTool stop];
  1124. YOUPAILCVideoFinishVC* finish = [[YOUPAILCVideoFinishVC alloc]init];
  1125. finish.youpaipvideoModel = self.youpaipvideoModel;
  1126. finish.role = 2;
  1127. [self.navigationController pushViewController:finish animated:YES];
  1128. }else{
  1129. [self.navigationController dismissViewControllerAnimated:YES completion:^{
  1130. NSLog(@"2222222");
  1131. }];
  1132. }
  1133. });
  1134. }
  1135. //刷新会话页面的chatTableView
  1136. - (void)reciveTxt:(NSDictionary*)dict{
  1137. YOUPAILCVideoChatMessageModel* msgModel = [YOUPAILCVideoChatMessageModel mj_objectWithKeyValues:dict];
  1138. if ([msgModel.youpaipfrom_uid isEqual:self.youpaipvideoModel.youpaipfrom_uid]) {
  1139. msgModel.youpaipfrom_nickname = self.youpaipvideoModel.youpaipfrom_nickname;
  1140. msgModel.youpaipto_nickname = self.youpaipvideoModel.youpaipto_nickname;
  1141. msgModel.youpaipfrom_avatar = self.youpaipvideoModel.youpaipfrom_avatar;
  1142. msgModel.youpaipto_avatar = self.youpaipvideoModel.youpaipto_avatar;
  1143. }else{
  1144. msgModel.youpaipfrom_nickname = self.youpaipvideoModel.youpaipto_nickname;
  1145. msgModel.youpaipto_nickname = self.youpaipvideoModel.youpaipfrom_nickname;
  1146. msgModel.youpaipfrom_avatar = self.youpaipvideoModel.youpaipto_avatar;
  1147. msgModel.youpaipto_avatar = self.youpaipvideoModel.youpaipfrom_avatar;
  1148. }
  1149. NSLog(@"reciveTxt 消息类型 = %ld",msgModel.youpaiptype);
  1150. NSLog(@"reciveTxt content = %@",msgModel.youpaipcontent);
  1151. [self.youpaipchatArray insertObject:msgModel atIndex:0];
  1152. [self.youpaipchatTableView beginUpdates];
  1153. [self.youpaipchatTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:(UITableViewRowAnimationNone)];
  1154. [self.youpaipchatTableView endUpdates];
  1155. [self.youpaipchatTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:(UITableViewScrollPositionNone) animated:YES];
  1156. if (msgModel.youpaiptype == 6 && [self.youpaipvideoModel.youpaipto_uid isEqual:[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id]) {
  1157. [ZCHUDHelper showTitle:@"减免成功"];
  1158. return;
  1159. }
  1160. NSDictionary* giftDict = [msgModel.youpaipcontent mj_JSONObject];
  1161. NSString* gifttype = [giftDict objectForKey:@"gifttype"];
  1162. NSString* giftsvga = [giftDict objectForKey:@"giftsvga"];
  1163. if (giftsvga.length == 0) {
  1164. gifttype = [dict objectForKey:@"gifttype"];
  1165. giftsvga = [dict objectForKey:@"giftsvga"];
  1166. }
  1167. NSInteger link_type = [[dict objectForKey:@"link_type"] integerValue];
  1168. NSString *link_url = [dict objectForKey:@"link_url"];
  1169. if (msgModel.youpaiptype == 1 && link_type == 2 && [link_url isEqual:@"rechargeCoin"]){//礼物
  1170. LZAlertAction *cancelAction = [LZAlertAction actionWithTitle:@"舍不得" handler:^(LZAlertAction *action) {
  1171. }];
  1172. cancelAction.cornerRadius = 24.0f;
  1173. cancelAction.color = LZ273145Color;
  1174. cancelAction.bgColor = LZF5F4F7Color;
  1175. LZAlertAction *confimAction = [LZAlertAction actionWithTitle:@"去充值" handler:^(LZAlertAction *action) {
  1176. [[NSNotificationCenter defaultCenter] postNotificationName:@"InsufficientBalanceNotice" object:nil userInfo:nil];
  1177. // YOUPAIHRRechargePayWindow *payWindow = [YOUPAIHRRechargePayWindow new];
  1178. // payWindow.isTouchDismiss = NO;
  1179. // [self.navigationController TFPresentVC:payWindow completion:^{
  1180. //
  1181. // }];
  1182. YMAccountBalanceViewModel *accountBalanceVM = [[YMAccountBalanceViewModel alloc]initWithParams:@{
  1183. ParamsId:@([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id intValue])
  1184. }];
  1185. YMAccountBalanceRechargePopupView *customView = [[YMAccountBalanceRechargePopupView alloc]init];
  1186. [customView ym_bindViewModel:accountBalanceVM];
  1187. YMPopupView *popupView = [YMPopupView initWithCustomView:customView parentView:nil popStyle:YMPopupStyleSmoothFromBottom dismissStyle:YMDismissStyleSmoothToBottom];
  1188. popupView.priority = 999;
  1189. popupView.cornerRadius = adapt(10);
  1190. popupView.rectCorners = UIRectCornerTopLeft|UIRectCornerTopRight;
  1191. popupView.positionStyle = YMPositionStyleBottom;
  1192. popupView.isClickBgDismiss = YES;
  1193. popupView.isHideBg = NO;
  1194. popupView.bgAlpha = 0.5;
  1195. [popupView pop];
  1196. @weakify(popupView)
  1197. customView.dismissBlock = ^{
  1198. @strongify(popupView)
  1199. [popupView dismissWithStyle:YMDismissStyleSmoothToBottom duration:2.0];
  1200. };
  1201. }];
  1202. confimAction.cornerRadius = 24.0f;
  1203. confimAction.color = [UIColor whiteColor];
  1204. confimAction.bgColor = [UIColor colorWithPatternImage:[LCTools ColorImage:CGSizeMake((KScreenWidth - 105.0f) / 2.0f, 48.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:GradientLeftToRight]];
  1205. LZAlertWindow *alert = [LZAlertWindow alertWithTitle:@"提示" content:@"您的钻石数量不足,去购买" action:@[cancelAction,confimAction]];
  1206. alert.contentTextAlignment = NSTextAlignmentCenter;
  1207. [self TFPresentVC:alert completion:^{}];
  1208. }
  1209. if (msgModel.youpaiptype==3){//礼物
  1210. // NSDictionary* giftDict = [msgModel.content mj_JSONObject];
  1211. NSString* giftcount = [giftDict objectForKey:@"giftcount"];
  1212. NSInteger giftid = [[giftDict objectForKey:@"giftid"] integerValue];
  1213. // NSString* gifttype = [giftDict objectForKey:@"gifttype"];
  1214. // NSString* giftsvga = [giftDict objectForKey:@"giftsvga"];
  1215. NSString* gifticon = [giftDict objectForKey:@"gifticon"];
  1216. YOUPAILZLiveGIftModel *giftModel = [[YOUPAILZLiveGIftModel alloc] init];
  1217. giftModel.youpaipavatar = msgModel.youpaipfrom_avatar;
  1218. giftModel.youpaipnickName = msgModel.youpaipfrom_nickname;
  1219. giftModel.youpaipgiftImage = gifticon;
  1220. giftModel.youpaipgiftCount = [giftcount integerValue];
  1221. giftModel.youpaipuser_id = [msgModel.youpaipfrom_uid integerValue];
  1222. giftModel.youpaipgift_id = giftid;
  1223. giftModel.youpaipgift_svga = giftsvga;
  1224. giftModel.youpaipgift_type = [gifttype integerValue];
  1225. giftModel.youpaipto_uid = [msgModel.youpaipto_uid integerValue];
  1226. giftModel.youpaipto_nickName= msgModel.youpaipto_nickname;
  1227. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqual:msgModel.youpaipfrom_uid]) {
  1228. [self.youpaipgifts insertObject:giftModel atIndex:0];
  1229. }else{
  1230. [self.youpaipgifts addObject:giftModel];
  1231. }
  1232. [self youpaifeditGiftView];
  1233. }else if (msgModel.youpaiptype==1 && giftsvga.length != 0){
  1234. // NSDictionary* giftDict = [msgModel.content mj_JSONObject];
  1235. NSString* giftcount = [dict objectForKey:@"giftcount"];
  1236. NSInteger giftid = -1;
  1237. // NSString* gifttype = [giftDict objectForKey:@"gifttype"];
  1238. // NSString* giftsvga = [giftDict objectForKey:@"giftsvga"];
  1239. NSString* gifticon = [dict objectForKey:@"gifticon"];
  1240. YOUPAILZLiveGIftModel *giftModel = [[YOUPAILZLiveGIftModel alloc] init];
  1241. giftModel.youpaipavatar = msgModel.youpaipto_avatar;
  1242. giftModel.youpaipnickName = msgModel.youpaipto_nickname;
  1243. giftModel.youpaipgiftImage = gifticon;
  1244. giftModel.youpaipgiftCount = [giftcount integerValue];
  1245. giftModel.youpaipuser_id = [msgModel.youpaipfrom_uid integerValue];
  1246. giftModel.youpaipgift_id = giftid;
  1247. giftModel.youpaipgift_svga = giftsvga;
  1248. giftModel.youpaipgift_type = [gifttype integerValue];
  1249. giftModel.youpaipto_uid = [msgModel.youpaipfrom_uid integerValue];
  1250. giftModel.youpaipto_nickName= msgModel.youpaipfrom_nickname;
  1251. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqual:msgModel.youpaipfrom_uid]) {
  1252. [self.youpaipgifts insertObject:giftModel atIndex:0];
  1253. }else{
  1254. [self.youpaipgifts addObject:giftModel];
  1255. }
  1256. [self youpaifeditGiftView];
  1257. }
  1258. }
  1259. #pragma mark -消息来自聊天房间
  1260. - (void)giftMsgForIm:(YOUPAILZLiveGIftModel *)chatRoomGiftModel{
  1261. NSString *youpaipfrom_uid = self.youpaipvideoModel.youpaipfrom_uid; //呼叫者UID
  1262. NSString *youpaipto_uid = self.youpaipvideoModel.youpaipto_uid; // 被叫者UID
  1263. // 只播放当前房间正在交流的 礼物svga
  1264. if([youpaipto_uid integerValue] == chatRoomGiftModel.youpaipuser_id ||
  1265. [youpaipfrom_uid integerValue] == chatRoomGiftModel.youpaipuser_id){
  1266. [self.youpaipgifts insertObject:chatRoomGiftModel atIndex:0];
  1267. [self youpaifeditGiftView];
  1268. }
  1269. }
  1270. //视频过程中 收到同房间的消息
  1271. - (void)videoingRecMessage:(NIMMessage *)message{
  1272. NSString *youpaipto_uid = self.youpaipvideoModel.youpaipto_uid; //被叫者UID
  1273. NSString *youpaipfrom_uid = self.youpaipvideoModel.youpaipfrom_uid; //呼叫者UID
  1274. NSString *currentAccount = [[[NIMSDK sharedSDK] loginManager] currentAccount];
  1275. // BOOL recIsMe = [message.session.sessionId isEqualToString:currentAccount]; // 收到消息是发给我的
  1276. // 且发消息的人 是我们正在视频中的人
  1277. BOOL recIsCurrRoom = [message.session.sessionId isEqualToString:youpaipto_uid] || [message.session.sessionId isEqualToString:youpaipfrom_uid];
  1278. if(recIsCurrRoom){
  1279. // asds
  1280. YOUPAILCVideoChatMessageModel* msgModel = [[YOUPAILCVideoChatMessageModel alloc] init];
  1281. msgModel.youpaiptype = 2;
  1282. msgModel.youpaipcontent = message.text;
  1283. if ([message.from isEqualToString:currentAccount]) { // 如果收到的消息 是自己发送的消息
  1284. msgModel.youpaipfrom_nickname = @"我";
  1285. msgModel.youpaipto_nickname = @"";
  1286. msgModel.youpaipfrom_avatar = @"";
  1287. msgModel.youpaipto_avatar = @"";
  1288. msgModel.youpaipfrom_uid = [LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id; //
  1289. }else{
  1290. // 是对方发过来的
  1291. msgModel.youpaipfrom_nickname = message.senderName; //发送消息人的名字
  1292. msgModel.youpaipto_nickname = @"我";
  1293. msgModel.youpaipfrom_avatar = @"";
  1294. msgModel.youpaipto_avatar = @"";
  1295. msgModel.youpaipfrom_uid = [self getRemoteSessionID]; //
  1296. }
  1297. NSLog(@"reciveTxt 消息类型 = %ld",msgModel.youpaiptype);
  1298. NSLog(@"reciveTxt content = %@",msgModel.youpaipcontent);
  1299. [self.youpaipchatArray insertObject:msgModel atIndex:0];
  1300. [self.youpaipchatTableView beginUpdates];
  1301. [self.youpaipchatTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:(UITableViewRowAnimationNone)];
  1302. [self.youpaipchatTableView endUpdates];
  1303. [self.youpaipchatTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:(UITableViewScrollPositionNone) animated:YES];
  1304. }
  1305. }
  1306. /// 处理礼物
  1307. - (void)youpaifeditGiftView{
  1308. NSInteger maxCount = 2;
  1309. NSInteger count = maxCount - self.youpaipgiftViews.count;
  1310. if (count > self.youpaipgifts.count) {
  1311. count = self.youpaipgifts.count;
  1312. }
  1313. if (count <= 0) {
  1314. for (NSInteger i = 0; i < self.youpaipgiftViews.count; i ++) {
  1315. if (self.youpaipgifts.count <= 0) {
  1316. return;
  1317. }
  1318. YOUPAILZLiveGIftModel *giftModel = self.youpaipgifts[i];
  1319. YOUPAILZChatRoomGiftView *giftView = nil;
  1320. for (YOUPAILZChatRoomGiftView *f_giftView in self.youpaipgiftViews) {
  1321. if (f_giftView.youpaipgiftModel.youpaipuser_id == giftModel.youpaipuser_id && f_giftView.youpaipgiftModel.youpaipgift_id == giftModel.youpaipgift_id && giftModel.youpaipgift_id != -1) {
  1322. giftView = f_giftView;
  1323. break;
  1324. }
  1325. }
  1326. if (giftView != nil) {
  1327. i --;
  1328. [giftView youpaifupdateGiftCount:giftModel.youpaipgiftCount];
  1329. [self.youpaipgifts removeObject:giftModel];
  1330. if (giftModel.youpaipgift_type == 1 && ![giftModel.youpaipgift_svga isEqualToString:@""]) {
  1331. [self.youpaipsvgas addObject:giftModel];
  1332. [self youpaifstartPlaySvga];
  1333. }
  1334. [self.youpaipgifts removeObject:giftModel];
  1335. }
  1336. }
  1337. }else{
  1338. for (NSInteger i = 0; i < count; i ++) {
  1339. if (self.youpaipgifts.count <= 0) {
  1340. return;
  1341. }
  1342. YOUPAILZLiveGIftModel *giftModel = self.youpaipgifts[i];
  1343. YOUPAILZChatRoomGiftView *giftView = nil;
  1344. for (YOUPAILZChatRoomGiftView *f_giftView in self.youpaipgiftViews) {
  1345. if (f_giftView.youpaipgiftModel.youpaipuser_id == giftModel.youpaipuser_id && f_giftView.youpaipgiftModel.youpaipgift_id == giftModel.youpaipgift_id && giftModel.youpaipgift_id != -1) {
  1346. giftView = f_giftView;
  1347. break;
  1348. }
  1349. }
  1350. if (giftView != nil) {
  1351. i --;
  1352. [giftView youpaifupdateGiftCount:giftModel.youpaipgiftCount];
  1353. [self.youpaipgifts removeObject:giftModel];
  1354. if (giftModel.youpaipgift_type == 1 && ![giftModel.youpaipgift_svga isEqualToString:@""]) {
  1355. [self.youpaipsvgas addObject:giftModel];
  1356. [self youpaifstartPlaySvga];
  1357. }
  1358. }else{
  1359. if (giftModel.youpaipgift_type == 1 && ![giftModel.youpaipgift_svga isEqualToString:@""]) {
  1360. [self.youpaipsvgas addObject:giftModel];
  1361. [self youpaifstartPlaySvga];
  1362. }
  1363. YOUPAILZChatRoomGiftView *giftView = [[YOUPAILZChatRoomGiftView alloc] initWithModel:giftModel];
  1364. // [giftView addTarget:self action:@selector(youpaifgiftAnimationViewClick:) forControlEvents:UIControlEventTouchUpInside];
  1365. NSInteger tag = 0;
  1366. if (self.youpaipgiftViews.count == 1){
  1367. if (self.youpaipgiftViews.lastObject.tag == 1) {
  1368. tag = 0;
  1369. }else{
  1370. tag = 1;
  1371. }
  1372. }
  1373. giftView.tag = tag;
  1374. [self.youpaipinterView addSubview:giftView];
  1375. [self.youpaipgiftViews addObject:giftView];
  1376. if (giftView != nil) {
  1377. UIView *view = self.youpaipgiftViews.lastObject;
  1378. if (view != nil) {
  1379. [giftView mas_makeConstraints:^(MASConstraintMaker *make) {
  1380. make.left.offset(-200.0f);
  1381. if (view.tag == 0) {
  1382. make.bottom.equalTo(self.youpaipchatTableView.mas_top).offset(-15.0f);
  1383. }else{
  1384. make.bottom.equalTo(self.youpaipchatTableView.mas_top).offset(-30.0f-40.0f);
  1385. }
  1386. make.height.offset(40.0f);
  1387. }];
  1388. }
  1389. }
  1390. [giftView.superview layoutIfNeeded];
  1391. [giftView youpaifshowAnimation];
  1392. giftView.delegate = self;
  1393. [self.youpaipgifts removeObject:giftModel];
  1394. }
  1395. }
  1396. }
  1397. }
  1398. - (void)youpaifanimatiomFinishWithView:(YOUPAILZChatRoomGiftView *)liveGiftView{
  1399. [self.youpaipgiftViews removeObject:liveGiftView];
  1400. [liveGiftView removeFromSuperview];
  1401. [self youpaifeditGiftView];
  1402. }
  1403. - (void)youpaifstartPlaySvga{
  1404. if (self.youpaipisPlaySvga == NO && self.youpaipsvgas.count != 0) {
  1405. self.youpaipisPlaySvga = YES;
  1406. YOUPAILZLiveGIftModel* giftModel = self.youpaipsvgas[0];
  1407. [self.youpaipsvgaPlayer stopAnimation];
  1408. if (giftModel.youpaipgift_type == 1 && ![giftModel.youpaipgift_svga isEqualToString:@""]) {
  1409. self.youpaipsvgaPlayer.hidden = NO;
  1410. }
  1411. NSString* svgaName = [[giftModel.youpaipgift_svga componentsSeparatedByString:@"/"] lastObject];
  1412. NSString* svgaCanchesPath= [[NSString alloc]initWithFormat:@"%@/%@/%@",CachesPath,@"SVGA",svgaName];
  1413. if (![LCTools giftSVGAWithSvgaUrlStr:giftModel.youpaipgift_svga]){
  1414. NSString* urlStr = [NSString stringWithFormat:@"%@/%@",[LCSaveData getImageUrl]?[LCSaveData getImageUrl]:BaseImgUrl,giftModel.youpaipgift_svga];
  1415. @weakify(self);
  1416. [self.youpaipparser parseWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) {
  1417. @strongify(self);
  1418. if (videoItem != nil) {
  1419. self.youpaipsvgaPlayer.hidden = NO;
  1420. self.youpaipsvgaPlayer.videoItem = videoItem;
  1421. [self.youpaipsvgaPlayer startAnimation];
  1422. }
  1423. } failureBlock:^(NSError * _Nullable error) {
  1424. @strongify(self);
  1425. self.youpaipsvgaPlayer.hidden = YES;
  1426. self.youpaipisPlaySvga = NO;
  1427. [self youpaifstartPlaySvga];
  1428. }];
  1429. [LCTools giftSVGAWithSvgaUrlStr:giftModel.youpaipgift_svga];
  1430. }else{
  1431. @weakify(self);
  1432. [self.youpaipparser parseWithData:[LCTools giftSVGAWithSvgaUrlStr:giftModel.youpaipgift_svga] cacheKey:svgaCanchesPath completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) {
  1433. @strongify(self);
  1434. if (videoItem != nil) {
  1435. self.youpaipsvgaPlayer.hidden = NO;
  1436. self.youpaipsvgaPlayer.videoItem = videoItem;
  1437. [self.youpaipsvgaPlayer startAnimation];
  1438. }
  1439. } failureBlock:^(NSError * _Nonnull error) {
  1440. @strongify(self);
  1441. self.youpaipsvgaPlayer.hidden = YES;
  1442. self.youpaipisPlaySvga = NO;
  1443. [self youpaifstartPlaySvga];
  1444. }];
  1445. }
  1446. [self.youpaipsvgas removeObject:giftModel];
  1447. }
  1448. }
  1449. - (NSMutableArray *)youpaipgifts{// 礼物数据
  1450. if (!_youpaipgifts) {
  1451. _youpaipgifts = [NSMutableArray array];
  1452. }
  1453. return _youpaipgifts;
  1454. }
  1455. - (NSMutableArray<YOUPAILZChatRoomGiftView *> *)youpaipgiftViews{// 礼物
  1456. if (!_youpaipgiftViews) {
  1457. _youpaipgiftViews = [NSMutableArray array];
  1458. }
  1459. return _youpaipgiftViews;
  1460. }
  1461. - (NSMutableArray *)youpaipsvgas{
  1462. if (!_youpaipsvgas) {
  1463. _youpaipsvgas = [NSMutableArray array];
  1464. }
  1465. return _youpaipsvgas;
  1466. }
  1467. #pragma mark - SVGAPlayerDelegate
  1468. - (void)svgaPlayerDidFinishedAnimation:(SVGAPlayer *)player{
  1469. self.youpaipsvgaPlayer.hidden = YES;
  1470. self.youpaipisPlaySvga = NO;
  1471. [self youpaifstartPlaySvga];
  1472. }
  1473. - (void)youpaifcloseBtnClick{
  1474. LZAlertAction *cancelAction = [LZAlertAction actionWithTitle:@"取消" handler:^(LZAlertAction *action) {
  1475. }];
  1476. cancelAction.cornerRadius = 24.0f;
  1477. cancelAction.color = LZ273145Color;
  1478. cancelAction.bgColor = LZF5F4F7Color;
  1479. @weakify(self);
  1480. LZAlertAction *confimAction = [LZAlertAction actionWithTitle:@"确定" handler:^(LZAlertAction *action) {
  1481. @strongify(self);
  1482. [self.youpaipsocketManager sendHangup];
  1483. }];
  1484. confimAction.cornerRadius = 24.0f;
  1485. confimAction.color = [UIColor whiteColor];
  1486. confimAction.bgColor = [UIColor colorWithPatternImage:[LCTools ColorImage:CGSizeMake((KScreenWidth - 105.0f) / 2.0f, 48.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:GradientLeftToRight]];
  1487. LZAlertWindow *alert = [LZAlertWindow alertWithTitle:@"提示" content:@"确定挂断视频咨询?" action:@[cancelAction,confimAction]];
  1488. alert.contentTextAlignment = NSTextAlignmentCenter;
  1489. [self TFPresentVC:alert completion:^{}];
  1490. }
  1491. // 获取对方的id
  1492. - (NSString *)getRemoteSessionID{
  1493. NSString *youpaipto_uid = self.youpaipvideoModel.youpaipto_uid; //被叫者UID
  1494. NSString *youpaipfrom_uid = self.youpaipvideoModel.youpaipfrom_uid; //呼叫者UID
  1495. NSString *currentAccount = [[[NIMSDK sharedSDK] loginManager] currentAccount];
  1496. if([currentAccount isEqualToString:youpaipto_uid]){
  1497. return youpaipfrom_uid;
  1498. }else{
  1499. return youpaipto_uid;
  1500. }
  1501. }
  1502. #pragma mark - interActive
  1503. - (void)youpaifsendMsgBtnClick{
  1504. NSString* sendText =[self.youpaipsendTextF.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
  1505. if (sendText.length > 0) {
  1506. // 组装消息体
  1507. NIMMessage *message = [NIMMessageMaker msgWithText:sendText];
  1508. NIMSession *session = [NIMSession session:[self getRemoteSessionID] type:(NIMSessionTypeP2P)];
  1509. WeakSelf;
  1510. [YOUPAILCIMTool sendMessage:message sessionid:session.sessionId completion:^(NIMMessage *resultMsg,NSInteger filter,NSString *contentStr) {
  1511. if (filter==0) {
  1512. [[[NIMSDK sharedSDK] chatManager] sendMessage:resultMsg toSession:session error:nil];
  1513. }else{
  1514. resultMsg.text = contentStr;
  1515. [[[NIMSDK sharedSDK] chatManager] sendMessage:resultMsg toSession:session error:nil];
  1516. }
  1517. [self videoingRecMessage:message];
  1518. }];
  1519. self.youpaipsendTextF.text = @"";
  1520. }else{
  1521. [ZCHUDHelper showTitle:@"发送内容不能为空"];
  1522. }
  1523. }
  1524. - (void)youpaiftimeStart{
  1525. //v1.1.1断连重连
  1526. __block NSInteger timeout = self.youpaipvideoModel.youpaipduration;
  1527. @weakify(self);
  1528. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  1529. dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
  1530. self.youpaiptimer = timer;
  1531. dispatch_source_set_timer(timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
  1532. dispatch_source_set_event_handler(timer, ^{
  1533. timeout++;
  1534. dispatch_async(dispatch_get_main_queue(), ^{
  1535. @strongify(self);
  1536. self.youpaiptimeLabel.text = [NSString stringWithFormat:@"通话时长: %@",[ZCUtils getHHMMSSFromSS:timeout]];
  1537. kAppDelegate.logCallTime = self.youpaiptimeLabel.text;
  1538. if (timeout >= 30 && timeout <= 40 && ![[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]) {
  1539. self.youpaipgiftPopBtn.hidden = NO;
  1540. }else{
  1541. self.youpaipgiftPopBtn.hidden = YES;
  1542. }
  1543. });
  1544. });
  1545. dispatch_resume(timer);
  1546. }
  1547. - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
  1548. self.beautyEditView.hidden = YES;
  1549. [self.view endEditing:YES];
  1550. }
  1551. //- (void)youpaifinterHandel:(UITapGestureRecognizer*)interTap{
  1552. // if (interTap.state == UIGestureRecognizerStateEnded) {
  1553. // if (interTap.view == self.demoBarBgV) {
  1554. // self.demoBarBgV.hidden = YES;
  1555. // [self.view endEditing:YES];
  1556. // }else{}
  1557. // }
  1558. //}
  1559. - (void)youpaifdoubleTapHandel:(UITapGestureRecognizer*)tap{
  1560. if (tap.state == UIGestureRecognizerStateEnded) {
  1561. if (self.youpaipinterView.frame.origin.x == KScreenWidth) {
  1562. [self youpaifmsgViewAnimWithX:0];
  1563. }else{
  1564. [self youpaifmsgViewAnimWithX:KScreenWidth];
  1565. }
  1566. }
  1567. }
  1568. - (void)youpaifmsgViewPanHandel:(UIPanGestureRecognizer*)panGesture{
  1569. //移动两点之间的绝对距离
  1570. [self.view endEditing:YES];
  1571. CGPoint translation = [panGesture translationInView:self.youpaipinterView];
  1572. if (self.youpaipinterView.frame.origin.x==0 && translation.x<0) {
  1573. }else if(self.youpaipinterView.frame.origin.x==KScreenWidth && translation.x>0){
  1574. }else {
  1575. CGPoint endPosition;
  1576. if (panGesture.state == UIGestureRecognizerStateBegan){
  1577. self.youpaipstartPoint = [panGesture locationInView:self.youpaipinterView];
  1578. }else if (panGesture.state == UIGestureRecognizerStateChanged){
  1579. CGPoint origin = self.youpaipinterView.frame.origin;
  1580. origin.x+=translation.x;
  1581. if (origin.x<=0) {
  1582. origin.x = 0;
  1583. self.youpaipinterView.frame= CGRectMake(origin.x, 0, KScreenWidth, KScreenHeight);
  1584. }else if(origin.x>=KScreenWidth){
  1585. origin.x = KScreenWidth;
  1586. self.youpaipinterView.frame= CGRectMake(origin.x, 0, KScreenWidth, KScreenHeight);
  1587. }
  1588. }else if (panGesture.state == UIGestureRecognizerStateEnded) {
  1589. endPosition = [panGesture locationInView:self.youpaipinterView];
  1590. if (endPosition.x-self.youpaipstartPoint.x>80) {//右移 小动画
  1591. [self youpaifmsgViewAnimWithX:KScreenWidth];
  1592. }else if(endPosition.x-self.youpaipstartPoint.x<-80){ //移
  1593. [self youpaifmsgViewAnimWithX:0];
  1594. }
  1595. }
  1596. }
  1597. }
  1598. - (void)youpaifmsgViewAnimWithX:(CGFloat)x{
  1599. NSTimeInterval durtionTime = fabs(self.youpaipinterView.x-x)*0.5/KScreenWidth;
  1600. [UIView animateWithDuration:durtionTime animations:^{
  1601. self.youpaipinterView.frame = CGRectMake(x, 0, KScreenWidth, KScreenHeight);
  1602. } completion:^(BOOL finished) {
  1603. self.youpaipinterView.frame = CGRectMake(x, 0, KScreenWidth, KScreenHeight);
  1604. }];
  1605. }
  1606. - (void)youpaifloaclVideoHandel:(UITapGestureRecognizer*)localTap{
  1607. if (localTap.state == UIGestureRecognizerStateEnded) {
  1608. if([self.youpaipremoteCanvas.view isEqual:self.youpaipremoteVideo.displayerOpenGLView]){
  1609. self.youpaipremoteCanvas.view = self.youpaiplocalVideo.displayerOpenGLView;
  1610. self.youpaiplocalCanvas.view = self.youpaipremoteVideo.displayerOpenGLView;
  1611. [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  1612. [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  1613. [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaiplocalVideo.displayerOpenGLView;
  1614. [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaipremoteVideo.displayerOpenGLView;
  1615. // 默认
  1616. // [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaiplocalVideo;
  1617. // [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaipremoteVideo;
  1618. }else{
  1619. self.youpaipremoteCanvas.view = self.youpaipremoteVideo.displayerOpenGLView;
  1620. self.youpaiplocalCanvas.view = self.youpaiplocalVideo.displayerOpenGLView;
  1621. [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  1622. [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  1623. [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaipremoteVideo.displayerOpenGLView;
  1624. [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaiplocalVideo.displayerOpenGLView;
  1625. }
  1626. }
  1627. }
  1628. #pragma mark - ButtonClick
  1629. - (void)youpaifmsgBtnClick{
  1630. [self.youpaipsendTextF becomeFirstResponder];
  1631. }
  1632. - (void)youpaifbeautyBtnClick{
  1633. [self.view bringSubviewToFront:self.beautyEditView];
  1634. self.beautyEditView.hidden = NO;
  1635. }
  1636. - (void)youpaifgiftBtnClick{
  1637. self.youpaipgiftPopBtn.hidden = YES;
  1638. YOUPAILZCommonGiftView *view = [YOUPAILZCommonGiftView new];
  1639. view.isTouchDismiss = YES;
  1640. view.youpaipisAnchor = NO;
  1641. @weakify(self);
  1642. [self TFPresentVC:view completion:^{
  1643. }];
  1644. [view setJumToWalletBlock1:^{
  1645. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  1646. [[NSNotificationCenter defaultCenter] postNotificationName:@"InsufficientBalanceNotice" object:nil userInfo:nil];
  1647. // YOUPAIHRRechargePayWindow *payWindow = [YOUPAIHRRechargePayWindow new];
  1648. // payWindow.isTouchDismiss = NO;
  1649. // [self.navigationController TFPresentVC:payWindow completion:^{
  1650. //
  1651. // }];
  1652. YMAccountBalanceViewModel *accountBalanceVM = [[YMAccountBalanceViewModel alloc]initWithParams:@{
  1653. ParamsId:@([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id intValue])
  1654. }];
  1655. YMAccountBalanceRechargePopupView *customView = [[YMAccountBalanceRechargePopupView alloc]init];
  1656. [customView ym_bindViewModel:accountBalanceVM];
  1657. YMPopupView *popupView = [YMPopupView initWithCustomView:customView parentView:nil popStyle:YMPopupStyleSmoothFromBottom dismissStyle:YMDismissStyleSmoothToBottom];
  1658. popupView.priority = 999;
  1659. popupView.cornerRadius = adapt(10);
  1660. popupView.rectCorners = UIRectCornerTopLeft|UIRectCornerTopRight;
  1661. popupView.positionStyle = YMPositionStyleBottom;
  1662. popupView.isClickBgDismiss = YES;
  1663. popupView.isHideBg = NO;
  1664. popupView.bgAlpha = 0.5;
  1665. [popupView pop];
  1666. @weakify(popupView)
  1667. customView.dismissBlock = ^{
  1668. @strongify(popupView)
  1669. [popupView dismissWithStyle:YMDismissStyleSmoothToBottom duration:2.0];
  1670. };
  1671. });
  1672. }];
  1673. [view setYoupaiplzgiftblock:^(YOUPAILCGiftModel * _Nonnull giftModel, NSInteger count,NSString*categoryID) {
  1674. @strongify(self);
  1675. [UMengRecordTool umengEventCountWithId:GiveawayGiftVideo];
  1676. [self.youpaipsocketManager sendGift:giftModel.youpaipid count:count tyID:categoryID];
  1677. }];
  1678. }
  1679. - (void)youpaifswitchBtnClick:(UIButton*)btn{
  1680. [_youpaipmCamera changeCameraInputDeviceisFront:!_youpaipmCamera.isFrontCamera];
  1681. [self.youpaipagoraKit switchCamera];
  1682. }
  1683. - (void)youpaifvoiceBtnClick:(UIButton*)btn{
  1684. btn.selected = !btn.selected;
  1685. if (btn.selected == YES) {
  1686. [self.youpaipagoraKit disableAudio];
  1687. }else{
  1688. [self.youpaipagoraKit enableAudio];
  1689. }
  1690. }
  1691. - (void)youpaifcameraBtnClick:(UIButton*)btn{
  1692. btn.selected = !btn.selected;
  1693. if (btn.selected == YES) {
  1694. self.youpaiplocalCanvas.view = self.youpaiplocalVideo.displayerOpenGLView;
  1695. self.youpaipremoteCanvas.view = self.youpaipremoteVideo.displayerOpenGLView;
  1696. [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  1697. [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  1698. [self.youpaipagoraKit muteLocalVideoStream:YES];
  1699. self.youpaiplocalVideo.hidden = YES;
  1700. }else{
  1701. [self.youpaipagoraKit muteLocalVideoStream:NO];
  1702. self.youpaiplocalVideo.hidden = NO;
  1703. }
  1704. }
  1705. //仙女棒
  1706. -(void)youpaifxianNvBangBtnClick
  1707. {
  1708. YOUPAIZYXianNvBangVC *VC= [[YOUPAIZYXianNvBangVC alloc]init];
  1709. // VC.delegate = self;
  1710. VC.vWidth = KScreenWidth *(320.0/375.0);
  1711. VC.vHeight = (VC.vWidth*137)/320.0+165;
  1712. VC.youpaipinfoModel = self.youpaipvideoModel.youpaipfairy;
  1713. VC.youpaipuser_id = self.youpaipvideoModel.youpaipto_uid;
  1714. VC.youpaiproomid = self.youpaipvideoModel.youpaiproom_id;
  1715. VC.youpaipisRoom = YES;
  1716. VC.isTouchDismiss = YES;
  1717. if(VC.youpaipinfoModel!=nil)
  1718. [self TFPresentVC:VC completion:^{
  1719. }];
  1720. }
  1721. //add by leo 视频中守护v1.0.8
  1722. -(void)youpaifguardBtnClick
  1723. {
  1724. YOUPAILPGuardHerVC *VC= [[YOUPAILPGuardHerVC alloc]init];
  1725. VC.youpaipdelegate = self;
  1726. VC.vWidth = KScreenWidth-54;
  1727. VC.vHeight = ((KScreenWidth-54)*165)/321.0+261.5;
  1728. VC.youpaipinfoModel = self.youpaipvideoModel.youpaipguard;
  1729. VC.youpaiproomid = self.youpaipvideoModel.youpaiproom_id;
  1730. VC.youpaipuser_id = self.youpaipvideoModel.youpaipto_uid;
  1731. VC.youpaipisRoom = YES;
  1732. VC.isTouchDismiss = YES;
  1733. [self TFPresentVC:VC completion:^{
  1734. }];
  1735. }
  1736. #pragma mark - TableViewDelegate
  1737. -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
  1738. return 1;
  1739. }
  1740. -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
  1741. return self.youpaipchatArray.count;
  1742. }
  1743. -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  1744. YOUPAILCVideoChatMessageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YOUPAILCVideoChatMessageCell"];
  1745. if (cell == nil) {
  1746. cell = [[YOUPAILCVideoChatMessageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"YOUPAILCVideoChatMessageCell"];
  1747. }
  1748. // YOUPAILCVideoChatMessageCell *cell = [[YOUPAILCVideoChatMessageCell alloc]initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:@"YOUPAILCVideoChatMessageCell"];
  1749. cell.youpaipmsgModel = self.youpaipchatArray[indexPath.row];
  1750. cell.youpaipdelegate = self;
  1751. return cell;
  1752. }
  1753. //- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  1754. //{
  1755. // YOUPAILCVideoChatMessageModel* model = (YOUPAILCVideoChatMessageModel*)self.chatArray[indexPath.row];
  1756. // return [YOUPAILCVideoChatMessageCell youpaifcellHeightWithModel:model];
  1757. //}
  1758. //
  1759. //- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
  1760. // return 40;
  1761. //}
  1762. //- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  1763. // YOUPAILCVideoChatMessageModel* model =self.chatArray[indexPath.row];
  1764. // if (model.link_type==1) {
  1765. // ZCBaseWebVC* web = [[ZCBaseWebVC alloc]init];
  1766. // web.contentUrl = model.link_url;
  1767. // [self.navigationController pushViewController:web animated:YES];
  1768. // }else if (model.link_type==2){
  1769. // [self youpaifpageToStr:model.link_url];
  1770. // }
  1771. //}
  1772. - (void)youpaifcontentClicked:(YOUPAILCVideoChatMessageModel *)model{
  1773. if (model.youpaiplink_type==1) {
  1774. if (model.youpaiplink_url.length>0) {
  1775. ZCBaseWebVC* web = [[ZCBaseWebVC alloc]init];
  1776. web.contentUrl = model.youpaiplink_url;
  1777. [self.navigationController pushViewController:web animated:YES];
  1778. }
  1779. }else if (model.youpaiplink_type==2){
  1780. if (model.youpaiplink_url.length>0) {
  1781. [self youpaifpageToStr:model.youpaiplink_url];
  1782. }
  1783. }
  1784. }
  1785. #pragma mark - 键盘交互事件
  1786. - (void)youpaifwillResignActive {
  1787. [_youpaipmCamera stopCapture];
  1788. }
  1789. - (void)willEnterForeground {
  1790. [_youpaipmCamera startCapture];
  1791. // if (self.voiceBtn.selected == NO) {
  1792. // [self.agoraKit enableAudio];
  1793. // [self.agoraKit disableAudio];
  1794. // }else{
  1795. // [self.agoraKit disableAudio];
  1796. // [self.agoraKit enableAudio];
  1797. // }
  1798. }
  1799. - (void)didBecomeActive {
  1800. [_youpaipmCamera startCapture];
  1801. }
  1802. //键盘即将隐藏
  1803. - (void)youpaifkeyboardWillHide:(NSNotification *)note{
  1804. // CGRect keyboardF = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
  1805. [UIView animateWithDuration:0.25 animations:^{
  1806. //KScreenHeight-KScreenHeight/3-60
  1807. self.youpaiptextToolView.mj_y = KScreenHeight;
  1808. // self.chatTableView.frame = CGRectMake(10, KScreenHeight-KScreenHeight/4-70, 3*KScreenWidth/4, KScreenHeight/4);
  1809. [self.youpaipchatTableView mas_updateConstraints:^(MASConstraintMaker *make) {
  1810. make.bottom.offset(-(52.0f+SafeHeight+6.0f+29.0f+14.0f));
  1811. }];
  1812. }];
  1813. }
  1814. //键盘即将弹出
  1815. - (void)youpaifkeyboardWillShow:(NSNotification *)note{
  1816. CGRect keyboardF = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
  1817. CGFloat keyboardH = keyboardF.size.height;
  1818. [UIView animateWithDuration:0.25 animations:^{
  1819. self.youpaiptextToolView.mj_y = KScreenHeight-keyboardH-65;
  1820. [self.youpaipchatTableView mas_updateConstraints:^(MASConstraintMaker *make) {
  1821. 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)*/);
  1822. }];
  1823. }];
  1824. }
  1825. //add by leo 防止录屏
  1826. #pragma mark - 监听录制
  1827. /**
  1828. 监听屏幕录制
  1829. iOS 11.0 版本以上
  1830. */
  1831. - (void)youpaifmonitorRecordVideo {// 监听屏幕录制
  1832. @weakify(self);
  1833. // 监测设备的录制状态
  1834. if (@available(iOS 11.0, *)) {
  1835. [[NSNotificationCenter defaultCenter] addObserverForName:UIScreenCapturedDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
  1836. @strongify(self);
  1837. NSLog(@"屏幕录制 ...");
  1838. //用self就会循环引用
  1839. if(self.youpaipisRecordScreen)
  1840. {
  1841. [self youpaifshowPromptWarningView:NO];
  1842. }
  1843. else
  1844. {
  1845. [self youpaifshowPromptWarningView:YES];
  1846. //add by leo 录屏上报
  1847. [self youpaifshotCheck:2];
  1848. }
  1849. }];
  1850. } else {
  1851. // Fallback on earlier versions
  1852. }
  1853. }
  1854. /**
  1855. 提示视图
  1856. */
  1857. - (void)youpaifshowPromptWarningView:(BOOL)warning {
  1858. if(warning)
  1859. {
  1860. _youpaipisRecordScreen = YES;
  1861. [_youpaiprecoderHideView setFrame:self.youpaipremoteVideo.bounds];
  1862. [_youpaiprecoderHideView setHidden:NO];
  1863. NSLog(@"正在录屏");
  1864. [ZCHUDHelper showTitle:@"请勿录制屏幕" showtime:1];
  1865. }
  1866. else
  1867. {
  1868. NSLog(@"录屏取消了");
  1869. _youpaipisRecordScreen =NO;
  1870. [_youpaiprecoderHideView setHidden:YES];
  1871. }
  1872. }
  1873. #pragma mark 防止截屏
  1874. - (void)youpaifmonitorShot
  1875. {
  1876. @weakify(self);
  1877. [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationUserDidTakeScreenshotNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
  1878. @strongify(self);
  1879. NSLog(@"屏幕截图 ...");
  1880. if(![[ZCUtils getCurrentVC] isKindOfClass:[YOUPAILCBaseVideoCallVC class]])
  1881. {
  1882. return;
  1883. }
  1884. [self youpaifshotCheck:1];
  1885. }];
  1886. }
  1887. - (void)userDidTakeScreenshot {
  1888. NSLog(@"检测到截屏");
  1889. UIView *backView = [[UIView alloc]initWithFrame:self.youpaipremoteVideo.bounds];
  1890. [backView setBackgroundColor:HexColorFromRGBA(0xffffff, 1.0)];
  1891. [self.youpaipremoteVideo addSubview:backView];
  1892. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  1893. [backView removeFromSuperview];
  1894. });
  1895. [ZCHUDHelper showTitle:@"尊重隐私,请勿截屏" showtime:1];
  1896. //人为操作,获取截屏图片数据
  1897. /*
  1898. UIImage *image = [self youpaifimageWithScreenshot];
  1899. NSLog(@"userDidTakeScreenshot:\n%@", image);
  1900. UIImageView *imageScreenshot = [[UIImageView alloc] initWithImage:image];// 此处 image 资源可根据实际需求进行操作,展示当前截屏图片或者替换成一张固定的图片方式等等等!
  1901. imageScreenshot.frame = self.remoteVideo.bounds;
  1902. [imageScreenshot setBackgroundColor:[UIColor whiteColor]];
  1903. [self.remoteVideo addSubview:imageScreenshot];// 展示在当前 View 层级
  1904. */
  1905. }
  1906. /**
  1907. 返回截屏数据
  1908. @return 返回截屏数据
  1909. */
  1910. - (UIImage *)youpaifimageWithScreenshot {
  1911. NSData *imageData = [self youpaifdataWithScreenshotInPNGFormat];
  1912. return [UIImage imageWithData:imageData];
  1913. }
  1914. /**
  1915. 获取当前屏幕
  1916. @return 获取当前屏幕
  1917. */
  1918. - (NSData *)youpaifdataWithScreenshotInPNGFormat {
  1919. // Source (Under MIT License):
  1920. CGSize imageSize = CGSizeZero;
  1921. UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
  1922. if (UIInterfaceOrientationIsPortrait(orientation)) {
  1923. imageSize = CGSizeMake(KScreenWidth,KScreenHeight);
  1924. }
  1925. else {
  1926. imageSize = CGSizeMake(KScreenHeight, KScreenWidth);
  1927. }
  1928. // 传入的View.frame.size是0的话,直接返回nil,防止 UIGraphicsBeginImageContext() 传入0,导致崩溃
  1929. if (CGSizeEqualToSize(imageSize, CGSizeZero)) {
  1930. return nil;
  1931. }
  1932. UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);
  1933. CGContextRef context = UIGraphicsGetCurrentContext();
  1934. for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
  1935. CGContextSaveGState(context);
  1936. CGContextTranslateCTM(context, window.center.x, window.center.y);
  1937. CGContextConcatCTM(context, window.transform);
  1938. CGContextTranslateCTM(context, -window.bounds.size.width * window.layer.anchorPoint.x, -window.bounds.size.height * window.layer.anchorPoint.y);
  1939. // Correct for the screen orientation
  1940. if (orientation == UIInterfaceOrientationLandscapeLeft) {
  1941. CGContextRotateCTM(context, M_PI_2);
  1942. CGContextTranslateCTM(context, 0, -imageSize.width);
  1943. }
  1944. else if (orientation == UIInterfaceOrientationLandscapeRight) {
  1945. CGContextRotateCTM(context, -M_PI_2);
  1946. CGContextTranslateCTM(context, -imageSize.height, 0);
  1947. }
  1948. else if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
  1949. CGContextRotateCTM(context, M_PI);
  1950. CGContextTranslateCTM(context, -imageSize.width, -imageSize.height);
  1951. }
  1952. if ([window respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
  1953. [window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES];
  1954. }
  1955. else {
  1956. [window.layer renderInContext:context];
  1957. }
  1958. CGContextRestoreGState(context);
  1959. }
  1960. UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  1961. UIGraphicsEndImageContext();
  1962. return UIImagePNGRepresentation(image);
  1963. }
  1964. //add by leo 截屏上报
  1965. -(void)youpaifshotCheck:(NSInteger)type
  1966. {
  1967. @weakify(self);
  1968. [LCHttpHelper requestWithURLString:ScreenShtoCheck parameters:@{@"type":@(type)} needToken:YES type:(HttpRequestTypePost) success:^(id responseObject) {
  1969. @strongify(self);
  1970. NSDictionary* dict = (NSDictionary*)responseObject;
  1971. NSInteger code = [[dict objectForKey:@"code"] integerValue];
  1972. NSString *message =[dict objectForKey:@"message"];
  1973. if (code==0) {//成功
  1974. [self.youpaipsocketManager sendHangup];
  1975. }
  1976. // [ZCHUDHelper showTitle:message];
  1977. LZAlertAction *confimAction = [LZAlertAction actionWithTitle:@"我知道了" handler:^(LZAlertAction *action) {
  1978. }];
  1979. confimAction.cornerRadius = 24.0f;
  1980. confimAction.color = [UIColor whiteColor];
  1981. confimAction.bgColor = [UIColor colorWithPatternImage:[LCTools ColorImage:CGSizeMake(KScreenWidth - 148.0f, 48.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:GradientLeftToRight]];
  1982. LZAlertWindow *alert = [LZAlertWindow alertWithTitle:@"提示" content:message action:@[confimAction]];
  1983. [self TFPresentVC:alert completion:^{}];
  1984. } failure:^(NSError *error) {
  1985. }];
  1986. if(type ==2)
  1987. {
  1988. /*
  1989. dispatch_async(dispatch_get_main_queue(), ^{
  1990. [self.socketManager youpaifsendHangup];
  1991. });
  1992. */
  1993. }
  1994. }
  1995. //add by leo v1.0.8 视频中守护回调
  1996. -(void)youpaifaddGuardSuccess
  1997. {
  1998. }
  1999. //add by leo v1.0.8 弱网警告
  2000. -(void)autoHangUp
  2001. {
  2002. if(self.youpaipsocketManager)
  2003. {
  2004. //确定退出视频咨询
  2005. UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"您的网络状况糟糕" message:@"为了良好的视频体验,建议您先挂断视频" preferredStyle:UIAlertControllerStyleAlert];
  2006. UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action){
  2007. }];
  2008. UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action){
  2009. [self videoEnd:5];
  2010. }];
  2011. [alertController addAction:cancelAction];
  2012. [alertController addAction:okAction];
  2013. [self presentViewController:alertController animated:YES completion:nil];
  2014. }
  2015. }
  2016. @end