From 48c5a2c66c549d26fecadc6d2dad1924fdd1cc8b Mon Sep 17 00:00:00 2001 From: Davin <591807572@qq.com> Date: 星期四, 27 七月 2023 13:52:08 +0800 Subject: [PATCH] bugfix 猫眼呼叫问题修复 --- EZSDK/EZSDK/EZ/UIViewControllers/EZPlaybackViewController.m | 339 ++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 219 insertions(+), 120 deletions(-) diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZPlaybackViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZPlaybackViewController.m index f1957be..34cb569 100644 --- a/EZSDK/EZSDK/EZ/UIViewControllers/EZPlaybackViewController.m +++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZPlaybackViewController.m @@ -10,27 +10,28 @@ #import "UIViewController+EZBackPop.h" #import "DDCollectionViewFlowLayout.h" #import "MJRefresh.h" -#import "EZRecordDownloader.h" -#import "EZDeviceRecordDownloadTask.h" -#import "EZCloudRecordDownloadTask.h" +#import <EZOpenSDKFramework/EZRecordDownloader.h> +#import <EZOpenSDKFramework/EZDeviceRecordDownloadTask.h> +#import <EZOpenSDKFramework/EZCloudRecordDownloadTask.h> #import "EZRecordCell.h" #import "DDKit.h" -#import "EZCloudRecordFile.h" -#import "EZDeviceRecordFile.h" -#import "EZPlayer.h" +#import <EZOpenSDKFramework/EZCloudRecordFile.h> +#import <EZOpenSDKFramework/EZDeviceRecordFile.h> +#import <EZOpenSDKFramework/EZPlayer.h> #import "HIKLoadView.h" #import "Masonry.h" -#import "EZCameraInfo.h" +#import <EZOpenSDKFramework/EZCameraInfo.h> #import "MBProgressHUD.h" #import "Toast+UIView.h" #import "EZCustomTableView.h" -#import "EZStreamPlayer.h" +#import <EZOpenSDKFramework/EZStreamPlayer.h> @interface EZPlaybackViewController ()<DDCollectionViewDelegateFlowLayout, UICollectionViewDataSource,EZPlayerDelegate, UIAlertViewDelegate, EZRecordCellDelegate, EZCustomTableViewDelegate,EZStreamPlayerDelegate> { BOOL _isOpenSound; BOOL _isPlaying; + BOOL _landscape; // 鏄惁鏃嬭浆 NSTimeInterval _playSeconds; //鎾斁绉掓暟 NSTimeInterval _duringSeconds; //褰曞儚鏃堕暱 @@ -44,8 +45,8 @@ NSArray *sdCardRate; NSArray *cloudRateStr; NSArray *sdCardRateStr; - -// BOOL _isDoBack; + + // BOOL _isDoBack; } @property (nonatomic, strong) NSIndexPath *selectedIndexPath; @@ -57,6 +58,7 @@ @property (nonatomic, strong) HIKLoadView *loadingView; @property (nonatomic) BOOL isSelectedDevice; @property (nonatomic, weak) IBOutlet UIView *playerView; +@property (weak, nonatomic) IBOutlet NSLayoutConstraint *playViewWHScale; @property (nonatomic, weak) IBOutlet UILabel *largeTitleLabel; @property (nonatomic, weak) IBOutlet UIDatePicker *datePicker; @property (nonatomic, weak) IBOutlet UITextField *dateTextField; @@ -102,12 +104,20 @@ [EZOPENSDK releasePlayer:_player]; } +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + self.navigationController.navigationBar.hidden = NO;//2021-02-01 + +} + - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.isAutorotate = YES; self.largeTitleLabel.text = self.deviceInfo.deviceName; self.largeTitleLabel.hidden = YES; + _landscape = NO; if(!_records) _records = [NSMutableArray new]; @@ -154,7 +164,7 @@ [self.duringSlider setThumbImage:[UIImage imageNamed:@"slider"] forState:UIControlStateNormal]; [self.duringSlider setThumbImage:[UIImage imageNamed:@"slider_sel"] forState:UIControlStateHighlighted]; - + self.cloudButton.selected = YES; self.largeBackButton.hidden = YES; @@ -166,7 +176,7 @@ [self.dateButton setTitle:[dateFormatter stringFromDate:self.datePicker.date] forState:UIControlStateNormal]; dateFormatter.dateFormat = @"MM-dd 鈻�"; [self.dateButton setTitle:[dateFormatter stringFromDate:self.datePicker.date] forState:UIControlStateSelected]; - + _isShowToolbox = YES; cloudRate = @[@(EZOPENSDK_PLAY_RATE_1), @@ -183,6 +193,11 @@ cloudRateStr = @[@"x1",@"x4",@"x8",@"x16",@"x32"]; sdCardRateStr = @[@"x1",@"x4",@"x8",@"x16"]; + + //2021-07-21 闅愯棌streamPlayBtn鍜宺ateBtn + [self.streamPlayBtn setHidden:YES]; + [self.rateBtn setHidden:YES]; + } - (void)viewWillDisappear:(BOOL)animated { @@ -204,18 +219,28 @@ } /* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ + #pragma mark - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. + } + */ - (UIInterfaceOrientationMask)supportedInterfaceOrientations { - return UIInterfaceOrientationMaskAllButUpsideDown; + if (@available(iOS 16.0, *)) { + if (_landscape) { + //妯睆 + return UIInterfaceOrientationMaskLandscape; + } else { + //绔栧睆 + return UIInterfaceOrientationMaskPortrait; + } + } else { + return UIInterfaceOrientationMaskAllButUpsideDown; + } } - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation @@ -230,6 +255,13 @@ self.largeButton.hidden = NO; self.voiceButton.hidden = NO; self.playButton.hidden = NO; + [self.playerView setTranslatesAutoresizingMaskIntoConstraints:NO]; + [NSLayoutConstraint deactivateConstraints:@[self.playViewWHScale]]; + self.playViewWHScale = [NSLayoutConstraint constraintWithItem:self.playerView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.playerView attribute:NSLayoutAttributeHeight multiplier:16/9. constant:0]; + [NSLayoutConstraint activateConstraints:@[self.playViewWHScale]]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self.playerView layoutIfNeeded]; + }); if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { @@ -242,6 +274,18 @@ self.playbackList.hidden = YES; self.largeBackButton.hidden = NO; self.navigationController.navigationBarHidden = YES; + + CGFloat tureScreenW = HDLEZ_APP_SCREEN_WIDTH > HDLEZ_APP_SCREEN_HEIGHT ? HDLEZ_APP_SCREEN_HEIGHT : HDLEZ_APP_SCREEN_WIDTH; + CGFloat tureScreenH = HDLEZ_APP_SCREEN_WIDTH < HDLEZ_APP_SCREEN_HEIGHT ? HDLEZ_APP_SCREEN_HEIGHT : HDLEZ_APP_SCREEN_WIDTH; + + + [self.playerView setTranslatesAutoresizingMaskIntoConstraints:NO]; + [NSLayoutConstraint deactivateConstraints:@[self.playViewWHScale]]; + self.playViewWHScale = [NSLayoutConstraint constraintWithItem:self.playerView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.playerView attribute:NSLayoutAttributeHeight multiplier:tureScreenH/(tureScreenW) constant:0]; + [NSLayoutConstraint activateConstraints:@[self.playViewWHScale]]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self.playerView layoutIfNeeded]; + }); } } @@ -288,6 +332,8 @@ cell.deviceSerial = _cameraInfo.deviceSerial; cell.isSelectedDevice = _isSelectedDevice; cell.delegate = self; + //2021-07-21 闅愯棌涓嬭浇鎸夐挳 + [cell.downloadBtn setHidden:YES]; if(_isSelectedDevice) { @@ -316,7 +362,7 @@ [self invalidateTimer]; -// [_player stopPlayback]; + // [_player stopPlayback]; if(_isSelectedDevice) { @@ -341,7 +387,7 @@ #pragma mark - ValidateCode Methods - (void)repeatDelay{ - + self.selectedCell = NO; } @@ -399,7 +445,7 @@ verifyCode:self.verifyCode savePath:path completion:^(EZDeviceRecordDownloadTask * _Nonnull task) { - + //璁剧疆鍥炶皟鍑芥暟 __weak typeof(task) weakTask = task; [task setDownloadCallBackWithFinshed:^(EZRecordDownloaderStatus statusCode) { @@ -559,7 +605,7 @@ NSLog(@"GetStreamFetchType:%d", [self.player getStreamFetchType]); - [self showStreamFetchType]; + // [self showStreamFetchType]; } else if (messageCode == PLAYER_PLAYBACK_STOP) { @@ -578,7 +624,7 @@ } - (void) invalidateTimer { - + if(self.playbackTimer) { [self.playbackTimer invalidate]; @@ -604,13 +650,13 @@ - (IBAction)hiddenPlayerToolbox:(id)sender { -// [UIView animateWithDuration:0.3 -// animations:^{ -// self.playerToolbox.alpha = 0.0f; -// } -// completion:^(BOOL finished) { -// _isShowToolbox = NO; -// }]; + // [UIView animateWithDuration:0.3 + // animations:^{ + // self.playerToolbox.alpha = 0.0f; + // } + // completion:^(BOOL finished) { + // _isShowToolbox = NO; + // }]; } #pragma mark - MJRefresh Methods @@ -620,7 +666,7 @@ [self.operation cancel]; [self.playbackList.header endRefreshing]; __weak __typeof(self) weakSelf = self; - + self.playbackList.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ weakSelf.noVideoImageView.hidden = YES; weakSelf.noVideoLabel.hidden = YES; @@ -630,34 +676,35 @@ beginTime:weakSelf.beginTime endTime:weakSelf.endTime completion:^(NSArray *deviceRecords, NSError *error) { - NSLog(@"deviceRecords is %@, error is %@", deviceRecords, error); - if (!error) - { - [weakSelf.records removeAllObjects]; - if(deviceRecords.count == 0) - { - weakSelf.noVideoLabel.hidden = NO; - weakSelf.noVideoImageView.hidden = NO; - [weakSelf.playbackList reloadData]; - [weakSelf.playbackList.header endRefreshing]; - return; - } - if (deviceRecords.count > 0) - { - [weakSelf.records addObjectsFromArray:deviceRecords]; - [weakSelf.playbackList reloadData]; - [weakSelf.playbackList.header endRefreshing]; - [weakSelf doPlayback]; - } - } - else - { - [UIView dd_showMessage:[NSString stringWithFormat:@"error code is %d",(int) error.code] onParentView:self.view]; - [weakSelf.playbackList.header endRefreshing]; - [weakSelf.records removeAllObjects]; - [weakSelf.playbackList reloadData]; - } - }]; + NSLog(@"deviceRecords is %@, error is %@", deviceRecords, error); + if (!error) + { + [weakSelf.records removeAllObjects]; + if(deviceRecords.count == 0) + { + weakSelf.noVideoLabel.hidden = NO; + weakSelf.noVideoImageView.hidden = NO; + [weakSelf.playbackList reloadData]; + [weakSelf.playbackList.header endRefreshing]; + return; + } + if (deviceRecords.count > 0) + { + [weakSelf.records addObjectsFromArray:deviceRecords]; + [weakSelf.playbackList reloadData]; + [weakSelf.playbackList.header endRefreshing]; + [weakSelf doPlayback]; + } + } + else + { + NSString *mes = [NSString stringWithFormat:@"%@(%ld)",NSLocalizedString(@"setting_opration_fail", @"鎿嶄綔澶辫触"), (long)error.code]; + [UIView dd_showMessage:mes onParentView:self.view]; + [weakSelf.playbackList.header endRefreshing]; + [weakSelf.records removeAllObjects]; + [weakSelf.playbackList reloadData]; + } + }]; } else { @@ -666,36 +713,38 @@ beginTime:weakSelf.beginTime endTime:weakSelf.endTime completion:^(NSArray *cloudRecords, NSError *error) { - - NSLog(@"cloudRecords is %@, error is %@", cloudRecords, error); - if (error) - { - if (error.code > 0) { - [UIView dd_showMessage:[NSString stringWithFormat:@"error code is %d",(int) error.code] onParentView:self.view]; - } - [weakSelf.playbackList.header endRefreshing]; - [weakSelf.records removeAllObjects]; - [weakSelf.playbackList reloadData]; - return ; - } - [weakSelf.records removeAllObjects]; - if(cloudRecords.count == 0) - { - weakSelf.noVideoLabel.hidden = NO; - weakSelf.noVideoImageView.hidden = NO; - [weakSelf.playbackList reloadData]; - [weakSelf.playbackList.header endRefreshing]; - return; - } - - if (cloudRecords.count > 0) - { - [weakSelf.records addObjectsFromArray:cloudRecords]; - [weakSelf.playbackList reloadData]; - [weakSelf.playbackList.header endRefreshing]; - [weakSelf doPlayback]; - } - }]; + + NSLog(@"cloudRecords is %@, error is %@", cloudRecords, error); + if (error) + { + if (error.code > 0) { + NSString *mes = [NSString stringWithFormat:@"%@(%ld)",NSLocalizedString(@"setting_opration_fail", @"鎿嶄綔澶辫触"), (long)error.code]; + [UIView dd_showMessage:mes onParentView:self.view]; + + } + [weakSelf.playbackList.header endRefreshing]; + [weakSelf.records removeAllObjects]; + [weakSelf.playbackList reloadData]; + return ; + } + [weakSelf.records removeAllObjects]; + if(cloudRecords.count == 0) + { + weakSelf.noVideoLabel.hidden = NO; + weakSelf.noVideoImageView.hidden = NO; + [weakSelf.playbackList reloadData]; + [weakSelf.playbackList.header endRefreshing]; + return; + } + + if (cloudRecords.count > 0) + { + [weakSelf.records addObjectsFromArray:cloudRecords]; + [weakSelf.playbackList reloadData]; + [weakSelf.playbackList.header endRefreshing]; + [weakSelf doPlayback]; + } + }]; } }]; self.playbackList.header.automaticallyChangeAlpha = YES; @@ -740,14 +789,60 @@ - (IBAction)large:(id)sender { - NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft]; - [[UIDevice currentDevice] setValue:value forKey:@"orientation"]; +// NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft]; +// [[UIDevice currentDevice] setValue:value forKey:@"orientation"]; + if (_landscape == YES) { + [self largeBack:self.largeBackButton]; + return; + } + _landscape = YES; + if (@available(iOS 16.0, *)) { + if (self.navigationController) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.navigationController setNeedsUpdateOfSupportedInterfaceOrientations]; + }); + } else { + dispatch_async(dispatch_get_main_queue(), ^{ + [self setNeedsUpdateOfSupportedInterfaceOrientations]; + }); + } + NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects]; + UIWindowScene *ws = (UIWindowScene *)array.firstObject; + UIWindowSceneGeometryPreferencesIOS *geometryPreferences = [[UIWindowSceneGeometryPreferencesIOS alloc] init]; + geometryPreferences.interfaceOrientations = UIInterfaceOrientationMaskLandscape; + [ws requestGeometryUpdateWithPreferences:geometryPreferences errorHandler:^(NSError * _Nonnull error) { + NSLog(@"iOS 16 Error: %@",error); + }]; + } else { + NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft]; + [[UIDevice currentDevice] setValue:value forKey:@"orientation"]; + } } - (IBAction)largeBack:(id)sender { - NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait]; - [[UIDevice currentDevice] setValue:value forKey:@"orientation"]; + _landscape = NO; + if (@available(iOS 16.0, *)) { + if (self.navigationController) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.navigationController setNeedsUpdateOfSupportedInterfaceOrientations]; + }); + } else { + dispatch_async(dispatch_get_main_queue(), ^{ + [self setNeedsUpdateOfSupportedInterfaceOrientations]; + }); + } + NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects]; + UIWindowScene *ws = (UIWindowScene *)array.firstObject; + UIWindowSceneGeometryPreferencesIOS *geometryPreferences = [[UIWindowSceneGeometryPreferencesIOS alloc] init]; + geometryPreferences.interfaceOrientations = UIInterfaceOrientationMaskPortrait; + [ws requestGeometryUpdateWithPreferences:geometryPreferences errorHandler:^(NSError * _Nonnull error) { + NSLog(@"iOS 16 Error: %@",error); + }]; + } else { + NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait]; + [[UIDevice currentDevice] setValue:value forKey:@"orientation"]; + } } - (IBAction)voiceButtonClicked:(id)sender @@ -777,7 +872,7 @@ [_player setPlaybackRate:rate mode:0]; } else { - + EZPlaybackRate rate = [cloudRate[indexPath.row] intValue]; [_player setPlaybackRate:rate mode:0]; } @@ -816,7 +911,7 @@ } - (IBAction)clickRateBtn:(UIButton *)sender { - + self.rateBtnTimer = [NSTimer scheduledTimerWithTimeInterval:2.5f target:self selector:@selector(hideRateView) userInfo:nil repeats:NO]; if(_isSelectedDevice) { @@ -888,14 +983,14 @@ self.selectedIndexPath = nil; [UIView animateWithDuration:0.3 animations:^{ - self.selectedImageViewConstraint.constant = 0; - [self.toolView setNeedsUpdateConstraints]; - [self.toolView layoutIfNeeded]; - } + self.selectedImageViewConstraint.constant = 0; + [self.toolView setNeedsUpdateConstraints]; + [self.toolView layoutIfNeeded]; + } completion:^(BOOL finished) { - self.cloudButton.selected = YES; - self.deviceButton.selected = NO; - }]; + self.cloudButton.selected = YES; + self.deviceButton.selected = NO; + }]; _isSelectedDevice = NO; [self.records removeAllObjects]; [self.playbackList reloadData]; @@ -912,14 +1007,14 @@ self.selectedIndexPath = nil; [UIView animateWithDuration:0.3 animations:^{ - self.selectedImageViewConstraint.constant = self.view.bounds.size.width / 2.0f; - [self.toolView setNeedsUpdateConstraints]; - [self.toolView layoutIfNeeded]; - } + self.selectedImageViewConstraint.constant = self.view.bounds.size.width / 2.0f; + [self.toolView setNeedsUpdateConstraints]; + [self.toolView layoutIfNeeded]; + } completion:^(BOOL finished) { - self.cloudButton.selected = NO; - self.deviceButton.selected = YES; - }]; + self.cloudButton.selected = NO; + self.deviceButton.selected = YES; + }]; _isSelectedDevice = YES; [self.records removeAllObjects]; [self.playbackList reloadData]; @@ -983,7 +1078,7 @@ - (void)playBoxToolRefresh:(NSTimer *)timer { NSDate *currentTime = [_player getOSDTime]; -NSLog(@"getOSDTime === %@", currentTime); + NSLog(@"getOSDTime === %@", currentTime); if(_isSelectedDevice) { _playSeconds = [currentTime timeIntervalSinceDate:_deviceRecord.startTime]; @@ -992,7 +1087,7 @@ { _playSeconds = [currentTime timeIntervalSinceDate:_cloudRecord.startTime]; } - + if(_playSeconds >= 3600) { int hour = (int)_playSeconds / 3600; @@ -1100,19 +1195,19 @@ - (void)streamPlayer:(EZStreamPlayer *)player didReceivedMessage:(EZStreamPlayerMsgType)msgType { dispatch_async(dispatch_get_main_queue(), ^{ - + NSString *msg; switch (msgType) { case EZStreamPlayerMsgTypeRealPlayStart: msg = @"寮�鍚瑙堟垚鍔�"; break; - case EZStreamPlayerMsgTypeRealPlayClose: + case EZStreamPlayerMsgTypeRealPlayClose: msg = @"鍏抽棴棰勮鎴愬姛"; break; - case EZStreamPlayerMsgTypePlayBackStart: + case EZStreamPlayerMsgTypePlayBackStart: msg = @"寮�鍚澶囧洖鏀炬垚鍔�"; break; - case EZStreamPlayerMsgTypePlayBackClose: + case EZStreamPlayerMsgTypePlayBackClose: msg = @"鍏抽棴璁惧鍥炴斁鎴愬姛"; break; default: @@ -1126,14 +1221,14 @@ { if (dataType == EZStreamDataTypeHeader) { dispatch_async(dispatch_get_main_queue(), ^{ - + [self.navigationController.view makeToast:@"寮�濮嬪啓鍏ユ枃浠�"]; }); } else if (dataType == EZStreamDataTypeStreamEnd) { dispatch_async(dispatch_get_main_queue(), ^{ - + self.streamPlayBtn.selected = NO; }); @@ -1143,4 +1238,8 @@ } } +- (BOOL)prefersHomeIndicatorAutoHidden { + return YES; +} + @end -- Gitblit v1.8.0