From b4e1288a9b63eb820e9c9489c56aac4bf6b31067 Mon Sep 17 00:00:00 2001
From: Davin <591807572@qq.com>
Date: 星期三, 18 十二月 2024 14:34:16 +0800
Subject: [PATCH] feature 图片资源更新
---
EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m | 546 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 504 insertions(+), 42 deletions(-)
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
index f648436..295632f 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
@@ -11,19 +11,21 @@
#import <Photos/Photos.h>
#import "EZLivePlayViewController.h"
#import "UIViewController+EZBackPop.h"
-#import "EZDeviceInfo.h"
-#import "EZPlayer.h"
+#import <EZOpenSDKFramework/EZDeviceInfo.h>
+#import <EZOpenSDKFramework/EZPlayer.h>
#import "DDKit.h"
#import "Masonry.h"
#import "HIKLoadView.h"
#import "MBProgressHUD.h"
-#import "EZCameraInfo.h"
+#import <EZOpenSDKFramework/EZCameraInfo.h>
#import <AVFoundation/AVFoundation.h>
#import "Toast+UIView.h"
-#import "EZStreamPlayer.h"
+#import <EZOpenSDKFramework/EZStreamPlayer.h>
#import "MBProgressHUD.h"
-#import "EZPMPlayPrivateTokenInfo.h"
+#import <EZOpenSDKFramework/EZPMPlayPrivateTokenInfo.h>
#import "HDLEZAlertInputView.h"
+#import "HDLEZOPButton.h"
+#import "HDLEZVideoDoorToolView.h"
#define MinimumZoomScale 1.0
#define MaximumZoomScale 4.0
@@ -32,10 +34,12 @@
{
NSOperation *op;
BOOL _isPressed;
+ BOOL _landscape; // 鏄惁鏃嬭浆
}
@property (nonatomic) BOOL isOpenSound;
@property (nonatomic) BOOL isPlaying;
+@property (nonatomic) BOOL isAnswering; // 姝e湪鎺ュ惉涓�
@property (nonatomic, strong) NSTimer *recordTimer;
@property (nonatomic) NSTimeInterval seconds;
@property (nonatomic, strong) CALayer *orangeLayer;
@@ -47,6 +51,9 @@
@property (nonatomic, strong) HIKLoadView *loadingView;
@property (nonatomic, weak) IBOutlet UIButton *playerPlayButton;
@property (nonatomic, weak) IBOutlet UIView *playerView;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *playerViewWHRatio;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *playerViewBottomMargin;
+
@property (nonatomic, weak) IBOutlet UIView *toolBar;
@property (nonatomic, weak) IBOutlet UIView *bottomView;
@property (nonatomic, weak) IBOutlet UIButton *controlButton;
@@ -54,12 +61,16 @@
@property (nonatomic, weak) IBOutlet UIButton *captureButton;
@property (nonatomic, weak) IBOutlet UIButton *localRecordButton;
@property (nonatomic, weak) IBOutlet UIButton *playButton;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *playBtnLeftMargin;
@property (weak, nonatomic) IBOutlet UIButton *streamPlayBtn;
@property (nonatomic, weak) IBOutlet UIButton *voiceButton;
@property (nonatomic, weak) IBOutlet UIButton *qualityButton;
@property (nonatomic, weak) IBOutlet UIButton *emptyButton;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *emptyBtnLeftMargin;
@property (nonatomic, weak) IBOutlet UIButton *largeButton;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *largeBtnRightMargin;
@property (nonatomic, weak) IBOutlet UIButton *largeBackButton;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *largeBackBtnLeftMargin;
@property (nonatomic, weak) IBOutlet UIView *ptzView;
@property (nonatomic, weak) IBOutlet UIButton *ptzCloseButton;
@property (nonatomic, weak) IBOutlet UIButton *ptzControlButton;
@@ -88,11 +99,24 @@
@property (nonatomic, strong) EZCameraInfo *cameraInfo;
@property (weak, nonatomic) IBOutlet UILabel *streamTypeLabel;
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *scrollViewTopMargin;
@property (weak, nonatomic) IBOutlet UILabel *zoomSizeLabel;
-
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *scrollViewWHRatio; // 婊氬姩瑙嗗浘瀹介珮姣�
@property (nonatomic, strong) HDLEZButton *unlockButton;//寮�閿佹寜閽�
@property (nonatomic, copy) NSString *streamToken;
+
+@property (nonatomic, strong) UIView *doorPlayerView;//闂ㄩ攣鎾斁view
+@property (nonatomic, assign) CGFloat doorPlayerAspectRatio; // 闂ㄩ攣鎾斁瑙嗗浘瀹介珮姣�
+
+// 鍛煎彨瑙嗗浘鐩稿叧鎺т欢
+@property (weak, nonatomic) IBOutlet UIView *videoCallOutView; // 鍛煎彨寮规
+@property (weak, nonatomic) IBOutlet UILabel *callOutAlertLabel; // 鎻愮ず璇█
+@property (weak, nonatomic) IBOutlet HDLEZOPButton *hangUpButton; // 鎸傛柇鎸夐挳
+@property (weak, nonatomic) IBOutlet HDLEZOPButton *ignoreButton; // 蹇界暐鎸夐挳
+@property (weak, nonatomic) IBOutlet HDLEZOPButton *answerButton; // 鎺ュ惉鎸夐挳
+
+@property (strong, nonatomic) HDLEZVideoDoorToolView *fullSceneToolView; // 鍏ㄥ睆宸ュ叿瑙嗗浘
@end
@@ -113,6 +137,10 @@
self.isStartingTalk = NO;
self.ptzView.hidden = YES;
self.talkView.hidden = YES;
+ self.isAnswering = NO;
+ self.videoCallOutView.hidden = YES;
+ self.doorPlayerAspectRatio = HDLEZ_APP_SCREEN_WIDTH / HDLEZ_APP_SCREEN_HEIGHT;
+ _landscape = NO;
if (!self.deviceInfo) {//濡傛灉娌℃湁浼燿eviceInfo,闇�涓诲姩鑾峰彇
[self getDeviceInfo];
@@ -121,6 +149,7 @@
//鍒濆鍖栫浉鍏虫暟鎹�
[self initialData];
+ [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:HDLEZHEXCOLOR(0x1B2D4D, 1.),NSFontAttributeName:[UIFont systemFontOfSize:18]}];
// self.talkButton.enabled = self.deviceInfo.isSupportTalk;
// self.controlButton.enabled = self.deviceInfo.isSupportPTZ;
@@ -240,6 +269,29 @@
// }
}
+/*娣诲姞闂ㄩ攣鎾斁view
+ */
+-(UIView*)doorPlayerView{
+ if (!_doorPlayerView) {
+ _doorPlayerView=[[UIView alloc] init];
+ [_playerView addSubview:_doorPlayerView];
+ [_doorPlayerView mas_makeConstraints:^(MASConstraintMaker *make) {
+ make.centerX.equalTo(_playerView.mas_centerX);
+ make.top.bottom.equalTo(_playerView);
+ make.width.mas_equalTo(_doorPlayerView.mas_height).multipliedBy(1);
+ }];
+ }
+ return _doorPlayerView;
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+ [super viewWillAppear:animated];
+ if (self.navigationController) {
+ self.navigationController.navigationBar.hidden = NO;
+ [self.navigationController setNavigationBarHidden:NO];
+ }
+}
+
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.navigationController.navigationBar.hidden = NO;//2021-02-01
@@ -253,15 +305,16 @@
//缁撴潫鏈湴褰曞儚
if(self.localRecordButton.selected)
{
+ __weak __typeof(self)weakSelf = self;
[_player stopLocalRecordExt:^(BOOL ret) {
NSLog(@"%d", ret);
- [_recordTimer invalidate];
- _recordTimer = nil;
- self.localRecordLabel.hidden = YES;
- [self saveRecordToPhotosAlbum:_filePath];
- _filePath = nil;
+ [weakSelf.recordTimer invalidate];
+ weakSelf.recordTimer = nil;
+ weakSelf.localRecordLabel.hidden = YES;
+ [weakSelf saveRecordToPhotosAlbum:weakSelf.filePath];
+ weakSelf.filePath = nil;
}];
}
@@ -288,11 +341,15 @@
/*鑾峰彇璁惧淇℃伅
*/
-(void)getDeviceInfo{
+ __weak __typeof(self)weakSelf = self;
//鑾峰彇璁惧淇℃伅
[EZOpenSDK getDeviceInfo:self.deviceSerial completion:^(EZDeviceInfo *deviceInfo, NSError *error) {
if(error)
{
- NSLog(@"EZ 鏌ヨ璁惧淇℃伅澶辫触");
+ NSLog(@"EZ 鏌ヨ璁惧淇℃伅澶辫触:%@",error);
+ [weakSelf.view makeToast:error.userInfo[@"NSLocalizedDescription"]
+ duration:1.5
+ position:@"center"];
return;
}
if (deviceInfo) {
@@ -310,6 +367,7 @@
self.captureButton.enabled = NO;
self.localRecordButton.enabled = NO;
self.streamPlayBtn.hidden = YES;
+// self.isShowAlert = YES;
if (_url)
{
@@ -342,6 +400,7 @@
}
if (_cameraInfo.cameraNo == 0 || [self.deviceInfo.deviceType containsString:@"CAS"]) { //涓嶆敮鎸佹竻鏅板害鍒囨崲
self.qualityButton.hidden = YES;
+ [self.fullSceneToolView supportVideoLevelChange:NO];
}
if (self.deviceInfo.cameraInfo.count > 1) {
@@ -357,8 +416,9 @@
if (!_url)
{
//鎶撳浘鎺ュ彛婕旂ず浠g爜
+ __weak __typeof(self)weakSelf = self;
[EZOPENSDK captureCamera:_cameraInfo.deviceSerial cameraNo:_cameraInfo.cameraNo completion:^(NSString *url, NSError *error) {
- NSLog(@"[%@] capture cameraNo is [%d] url is %@, error is %@", _cameraInfo.deviceSerial, (int)_cameraInfo.cameraNo, url, error);
+ NSLog(@"[%@] capture cameraNo is [%d] url is %@, error is %@", weakSelf.cameraInfo.deviceSerial, (int)weakSelf.cameraInfo.cameraNo, url, error);
}];
}
#endif
@@ -372,7 +432,11 @@
[_player setPlayVerifyCode:verifyCode];
[_talkPlayer setPlayVerifyCode:verifyCode];
}
- [_player setPlayerView:_playerView];
+// if ([GlobalKit shareKit].deviceType==HDLEZDeviceType_Door) {//涓洪棬閿佹椂
+ [_player setPlayerView:self.doorPlayerView];
+// }else{
+// [_player setPlayerView:_playerView];
+// }
BOOL hdStatus = [[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"EZVideoPlayHardDecodingStatus_%@", self.deviceInfo.deviceSerial]];
[_player setHDPriority:hdStatus];
[_player startRealPlay];
@@ -415,9 +479,9 @@
self.scrollView.multipleTouchEnabled = YES;
self.scrollView.pagingEnabled = NO;
- if ([GlobalKit shareKit].deviceType==HDLEZDeviceType_Door) {//涓洪棬閿佹椂锛屽彧鏄剧ず楹﹀厠椋庡拰寮�闂ㄦ寜閽�
- self.captureButton.hidden=YES;
- self.localRecordButton.hidden=YES;
+ if ([GlobalKit shareKit].deviceType==HDLEZDeviceType_Door) {//涓洪棬閿佹椂锛屾樉绀洪害鍏嬮
+// self.captureButton.hidden=YES;
+// self.localRecordButton.hidden=YES;
self.controlButton.hidden=YES;
//閲嶈鎺у埗鍙版寜閽�
@@ -437,11 +501,41 @@
// [self.controlButton setImage:[UIImage imageNamed:@"hdl_ez_ic_unlock"] forState:UIControlStateNormal];
// [self.controlButton setTitle:NSLocalizedString(@"device_open", @"寮�闂�") forState:UIControlStateNormal];
}
+
+ self.callOutAlertLabel.text = HDLEZLocallizedString(@"device_callout_alert_message");
+ [self.hangUpButton setTitle:HDLEZLocallizedString(@"device_callout_hang_up") forState:UIControlStateNormal];
+ self.hangUpButton.imagePosition = HDLEZOPButtonImagePositionTop;
+ self.hangUpButton.spacingBetweenImageAndTitle = 12.;
+ [self.ignoreButton setTitle:HDLEZLocallizedString(@"device_callout_ignore") forState:UIControlStateNormal];
+ self.ignoreButton.imagePosition = HDLEZOPButtonImagePositionTop;
+ self.ignoreButton.spacingBetweenImageAndTitle = 12.;
+ [self.answerButton setTitle:HDLEZLocallizedString(@"device_callout_answered") forState:UIControlStateNormal];
+ self.answerButton.imagePosition = HDLEZOPButtonImagePositionTop;
+ self.answerButton.spacingBetweenImageAndTitle = 12.;
+
+ // 闂ㄩ攣鍏ㄥ睆鐘舵�佷笅宸ュ叿鏍�
+ [self.view addSubview:self.fullSceneToolView];
+ __weak __typeof(self)weakSelf = self;
+ [self.fullSceneToolView ringRingRing:YES]; // 榛樿鏄剧ず鎸傛柇鎸夐挳
+ [self.fullSceneToolView configPlayStatus:YES soundOn:YES videoLevel:_cameraInfo.videoLevel toolOperation:^(HDLEZVideoFullSceneOperation operationType) {
+ [weakSelf doorLockFullSceneOperation:operationType];
+ }];
+
+ // 鎸傛柇寮规
+ if (_isShowAlert) {
+ [self showCallOutAlertView];
+ } else {
+ [self hiddenCallOutAlertView];
+ }
}
/*寮�閿�
*/
-(void)unlockDoor{
+ if (![self isSupportOneKeyUnlockDoor]) { // 涓嶆敮鎸佷竴閿紑閿�
+ [UIView dd_showMessage:@"璇ヨ澶囦笉鏀寔涓�閿紑閿�"];
+ return;
+ }
[HDLEZAlertInputView showInputAlertWithtitle:HDLEZLocallizedString(@"device_please_input_door_password") cancleTitle:HDLEZLocallizedString(@"device_temp_cancle") sureTitle:HDLEZLocallizedString(@"device_temp_sure") keyboardType:UIKeyboardTypeASCIICapableNumberPad cancleBlock:^{
} sureBlock:^(NSString * _Nonnull content) {
@@ -450,7 +544,7 @@
__weak __typeof(self)weakSelf = self;
[[EZHttpUtil sharedManager] authLockByHDL:content deviceId:self.deviceId completion:^(ResponseData * _Nonnull responseData) {
if (responseData.success) {
- [[EZHttpUtil sharedManager] remoteOpenByHDL:self.streamToken deviceId:self.deviceId completion:^(ResponseData * _Nonnull responseData) {
+ [[EZHttpUtil sharedManager] remoteOpenByHDL:weakSelf.streamToken deviceId:weakSelf.deviceId completion:^(ResponseData * _Nonnull responseData) {
[MBProgressHUD hideHUDForView:weakSelf.view animated:YES];
if (responseData.success) {
[weakSelf.view makeToast:HDLEZLocallizedString(@"device_open_success")
@@ -503,29 +597,87 @@
}
}
-- (UIInterfaceOrientationMask)supportedInterfaceOrientations
-{
- return UIInterfaceOrientationMaskAllButUpsideDown;
+//- (UIInterfaceOrientationMask)supportedInterfaceOrientations
+//{
+// return UIInterfaceOrientationMaskAllButUpsideDown;
+//}
+- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
+ if (@available(iOS 16.0, *)) {
+ if (_landscape && !self.isVideoDoorLock) {
+ //妯睆
+ return UIInterfaceOrientationMaskLandscape;
+ } else {
+ //绔栧睆
+ return UIInterfaceOrientationMaskPortrait;
+ }
+ } else {
+ return UIInterfaceOrientationMaskAllButUpsideDown;
+ }
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
{
+ if (self.isVideoDoorLock) return;
self.navigationController.navigationBarHidden = NO;
self.toolBar.hidden = NO;
self.largeBackButton.hidden = YES;
self.bottomView.hidden = NO;
self.largeTitleLabel.hidden = YES;
self.localRecrodContraint.constant = 10;
+
+ [self.scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [self.toolBar setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [self.playButton setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [self.emptyButton setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [self.largeButton setTranslatesAutoresizingMaskIntoConstraints:NO];
+// [self.largeBackButton setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [NSLayoutConstraint deactivateConstraints:@[self.scrollViewWHRatio, self.playBtnLeftMargin, self.emptyBtnLeftMargin, self.largeBtnRightMargin]];
+ self.scrollViewWHRatio = [NSLayoutConstraint constraintWithItem:self.scrollView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeHeight multiplier:16/9. constant:0];
+ self.playBtnLeftMargin = [NSLayoutConstraint constraintWithItem:self.playButton attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.toolBar attribute:NSLayoutAttributeLeading multiplier:1 constant:0];
+ self.emptyBtnLeftMargin = [NSLayoutConstraint constraintWithItem:self.emptyButton attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.qualityButton attribute:NSLayoutAttributeTrailing multiplier:1 constant:0];
+ self.largeBtnRightMargin = [NSLayoutConstraint constraintWithItem:self.toolBar attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.largeButton attribute:NSLayoutAttributeTrailing multiplier:1 constant:0];
+ [NSLayoutConstraint activateConstraints:@[self.scrollViewWHRatio, self.playBtnLeftMargin, self.emptyBtnLeftMargin, self.largeBtnRightMargin]];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [self.scrollView layoutIfNeeded];
+ [self.toolBar layoutIfNeeded];
+ [self.playButton layoutIfNeeded];
+ [self.emptyButton layoutIfNeeded];
+ [self.largeButton layoutIfNeeded];
+ });
+
if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
self.navigationController.navigationBarHidden = YES;
self.localRecrodContraint.constant = 50;
- self.toolBar.hidden = YES;
+// self.toolBar.hidden = YES;
self.largeTitleLabel.hidden = NO;
self.largeBackButton.hidden = NO;
self.bottomView.hidden = 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;
+ CGFloat marginSpace = 64;
+
+ [self.scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [self.toolBar setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [self.playButton setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [self.emptyButton setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [self.largeButton setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [NSLayoutConstraint deactivateConstraints:@[self.scrollViewWHRatio, self.playBtnLeftMargin, self.emptyBtnLeftMargin, self.largeBtnRightMargin]];
+ self.scrollViewWHRatio = [NSLayoutConstraint constraintWithItem:self.scrollView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeHeight multiplier:tureScreenH/(tureScreenW - 37) constant:0];
+ self.playBtnLeftMargin = [NSLayoutConstraint constraintWithItem:self.playButton attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.toolBar attribute:NSLayoutAttributeLeading multiplier:1 constant:marginSpace];
+ self.emptyBtnLeftMargin = [NSLayoutConstraint constraintWithItem:self.emptyButton attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.qualityButton attribute:NSLayoutAttributeTrailing multiplier:1 constant:(tureScreenH - tureScreenW - 2 * marginSpace)];
+ self.largeBtnRightMargin = [NSLayoutConstraint constraintWithItem:self.toolBar attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.largeButton attribute:NSLayoutAttributeTrailing multiplier:1 constant:marginSpace];
+ [NSLayoutConstraint activateConstraints:@[self.scrollViewWHRatio, self.playBtnLeftMargin, self.emptyBtnLeftMargin, self.largeBtnRightMargin]];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [self.scrollView layoutIfNeeded];
+ [self.toolBar layoutIfNeeded];
+ [self.playButton layoutIfNeeded];
+ [self.emptyButton layoutIfNeeded];
+ [self.largeButton layoutIfNeeded];
+ });
}
}
@@ -578,6 +730,28 @@
}
[_emptyButton setTitle:[NSString stringWithFormat:fromatStr,value] forState:UIControlStateNormal];
+}
+
+
+/**
+ * 鏀跺埌鐨勭敾闈㈤暱瀹藉��
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param height 楂樺害
+ * @param width 瀹藉害
+ */
+- (void)player:(EZPlayer *)player didReceivedDisplayHeight:(NSInteger)height displayWidth:(NSInteger)width{
+ NSLog(@"鐢婚潰闀匡細%ld锛屽锛�%ld",(long)height,(long)width);
+ CGFloat playerVH=self.playerView.frame.size.height;
+// HDLEZLog(@"楂橈細%ld",(long)playerVH);
+ CGFloat ratio=((CGFloat)width)/((CGFloat)height);
+ NSLog(@"姣斾緥锛�%f",ratio);
+// CGFloat playerVW=playerVH*ratio;
+ self.doorPlayerAspectRatio = ratio;
+// HDLEZLog(@"瀹斤細%ld",(long)playerVW);
+ [self.doorPlayerView mas_updateConstraints:^(MASConstraintMaker *make) {
+ make.width.mas_equalTo(_doorPlayerView.mas_height).multipliedBy(ratio);
+ }];
}
@@ -709,7 +883,11 @@
self.streamToken=tokenInfo.token;
if (!_unlockButton.isEnabled) {
- [_unlockButton setImage:[UIImage imageNamed:@"hdl_ez_ic_unlock"] forState:UIControlStateNormal];
+ if ([self isSupportOneKeyUnlockDoor]) { // 鏀寔涓�閿紑閿�
+ [_unlockButton setImage:[UIImage imageNamed:@"hdl_ez_ic_unlock"] forState:UIControlStateNormal];
+ } else {
+ [_unlockButton setImage:[UIImage imageNamed:@"hdl_ez_ic_unlock_disable"] forState:UIControlStateNormal];
+ }
_unlockButton.enabled=YES;
}
}
@@ -773,14 +951,122 @@
- (IBAction)large:(id)sender
{
- NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
- [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
+ if (!self.isPlaying)return; // 鏈挱鏀剧姝㈠叏灞忥紝
+ self.videoCallOutView.hidden = YES;
+ if (_landscape == YES) {
+ [self largeBack:self.largeBackButton];
+ return;
+ }
+ _landscape = YES;
+ if (self.isVideoDoorLock) {
+ self.navigationController.navigationBarHidden = YES;
+ self.localRecrodContraint.constant = 50;
+ self.toolBar.hidden = YES;
+ self.largeTitleLabel.hidden = YES;
+ self.largeBackButton.hidden = YES;
+ self.bottomView.hidden = YES;
+ self.scrollView.backgroundColor = [UIColor blackColor];
+
+ [self.scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [self.playerView setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [NSLayoutConstraint deactivateConstraints:@[self.scrollViewTopMargin, self.scrollViewWHRatio, self.playerViewWHRatio, self.playerViewBottomMargin]];
+ self.scrollViewTopMargin = [NSLayoutConstraint constraintWithItem:self.scrollView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.topLayoutGuide attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-[self hdlEZStatusBarHeight]];
+ self.scrollViewWHRatio = [NSLayoutConstraint constraintWithItem:self.scrollView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeHeight multiplier:HDLEZ_APP_SCREEN_WIDTH/HDLEZ_APP_SCREEN_HEIGHT constant:0];
+
+ self.playerViewWHRatio = [NSLayoutConstraint constraintWithItem:self.playerView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.playerView attribute:NSLayoutAttributeHeight multiplier:self.doorPlayerAspectRatio constant:0];
+ CGFloat playerBottomMargin = HDLEZ_APP_SCREEN_HEIGHT - (HDLEZ_APP_SCREEN_WIDTH / self.doorPlayerAspectRatio);
+ NSLog(@"########鎾斁闂撮殭锛�%lf", playerBottomMargin);
+ self.playerViewBottomMargin = [NSLayoutConstraint constraintWithItem:self.scrollView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.playerView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:playerBottomMargin];
+ [NSLayoutConstraint activateConstraints:@[self.scrollViewTopMargin, self.scrollViewWHRatio, self.playerViewWHRatio, self.playerViewBottomMargin]];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [self.scrollView layoutIfNeeded];
+ [self.playerView layoutIfNeeded];
+ });
+ self.fullSceneToolView.hidden = NO;
+ [self.view bringSubviewToFront:self.fullSceneToolView];
+ return;
+ }
+ 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"];
+ }
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+ [self.largeButton setImage:[UIImage imageNamed:@"preview_enlarge_full"] forState:UIControlStateNormal];
+ [self.largeButton setImage:[UIImage imageNamed:@"preview_enlarge_full_btn_sel"] forState:UIControlStateHighlighted];
+ });
}
- (IBAction)largeBack:(id)sender
{
- NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
- [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
+ _landscape = NO;
+ if (self.isVideoDoorLock) {
+ self.navigationController.navigationBarHidden = NO;
+ self.toolBar.hidden = NO;
+ self.largeBackButton.hidden = YES;
+ self.bottomView.hidden = NO;
+ self.largeTitleLabel.hidden = YES;
+ self.localRecrodContraint.constant = 10;
+ self.videoCallOutView.hidden = !self.isShowAlert;
+ self.scrollView.backgroundColor = [UIColor clearColor];
+
+ [self.scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [self.playerView setTranslatesAutoresizingMaskIntoConstraints:NO];
+ [NSLayoutConstraint deactivateConstraints:@[self.scrollViewTopMargin,self.scrollViewWHRatio, self.playerViewWHRatio, self.playerViewBottomMargin]];
+ self.scrollViewTopMargin = [NSLayoutConstraint constraintWithItem:self.scrollView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.topLayoutGuide attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0];
+ self.scrollViewWHRatio = [NSLayoutConstraint constraintWithItem:self.scrollView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeHeight multiplier:16/9. constant:0];
+
+ self.playerViewWHRatio = [NSLayoutConstraint constraintWithItem:self.playerView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.playerView attribute:NSLayoutAttributeHeight multiplier:16/9. constant:0];
+ self.playerViewBottomMargin = [NSLayoutConstraint constraintWithItem:self.scrollView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.playerView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0];
+ [NSLayoutConstraint activateConstraints:@[self.scrollViewTopMargin,self.scrollViewWHRatio, self.playerViewWHRatio, self.playerViewBottomMargin]];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [self.scrollView layoutIfNeeded];
+ [self.playerView layoutIfNeeded];
+ });
+ self.fullSceneToolView.hidden = YES;
+ return;
+ }
+ 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"];
+ }
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+ [self.largeButton setImage:[UIImage imageNamed:@"preview_enlarge"] forState:UIControlStateNormal];
+ [self.largeButton setImage:[UIImage imageNamed:@"preview_enlarge_btn_sel"] forState:UIControlStateHighlighted];
+ });
}
- (IBAction)capture:(id)sender
@@ -846,6 +1132,7 @@
[self.voiceButton setImage:[UIImage imageNamed:@"preview_voice_btn"] forState:UIControlStateNormal];
}
_isOpenSound = !_isOpenSound;
+ [self.fullSceneToolView soundOn:_isOpenSound];
}
- (IBAction)playButtonClicked:(id)sender
@@ -859,6 +1146,11 @@
self.localRecordButton.enabled = NO;
self.captureButton.enabled = NO;
self.playerPlayButton.hidden = NO;
+
+ //寮�闂ㄦ寜閽疆鐏帮紝涓嶇粰鐐瑰嚮锛堟殏鍋滅殑鎯呭喌涓嬩笉缁欏紑闂級
+ [_unlockButton setImage:[UIImage imageNamed:@"hdl_ez_ic_unlock_disable"] forState:UIControlStateNormal];
+ _unlockButton.enabled=NO;
+
}
else
{
@@ -869,6 +1161,11 @@
[self.loadingView startSquareClcokwiseAnimation];
}
_isPlaying = !_isPlaying;
+ [self.fullSceneToolView playStatus:_isPlaying];
+}
+
+- (SEL)extracted {
+ return @selector(hideQualityView);
}
- (IBAction)qualityButtonClicked:(id)sender
@@ -881,7 +1178,7 @@
{
self.qualityView.hidden = NO;
//鍋滅暀5s浠ュ悗闅愯棌瑙嗛璐ㄩ噺View.
- [self performSelector:@selector(hideQualityView) withObject:nil afterDelay:5.0f];
+ [self performSelector:[self extracted] withObject:nil afterDelay:5.0f];
}
self.qualityButton.selected = !self.qualityButton.selected;
}
@@ -934,14 +1231,17 @@
if (sender == weakSelf.highButton)
{
[weakSelf.qualityButton setTitle:NSLocalizedString(@"device_quality_high", @"楂樻竻") forState:UIControlStateNormal];
+ [self.fullSceneToolView videoLevel:2];
}
else if (sender == weakSelf.middleButton)
{
[weakSelf.qualityButton setTitle:NSLocalizedString(@"device_quality_median", @"鍧囪 ") forState:UIControlStateNormal];
+ [self.fullSceneToolView videoLevel:1];
}
else
{
[weakSelf.qualityButton setTitle:NSLocalizedString(@"device_quality_low", @"娴佺晠") forState:UIControlStateNormal];
+ [self.fullSceneToolView videoLevel:0];
}
if (result)
{
@@ -1061,6 +1361,7 @@
self.speakImageView.alpha = 0;
self.talkView.hidden = YES;
}];
+ self.isAnswering = NO;
}
- (IBAction)localButtonClicked:(id)sender
@@ -1068,15 +1369,16 @@
//缁撴潫鏈湴褰曞儚
if(self.localRecordButton.selected)
{
+ __weak __typeof(self)weakSelf = self;
[_player stopLocalRecordExt:^(BOOL ret) {
NSLog(@"%d", ret);
- [_recordTimer invalidate];
- _recordTimer = nil;
- self.localRecordLabel.hidden = YES;
- [self saveRecordToPhotosAlbum:_filePath];
- _filePath = nil;
+ [weakSelf.recordTimer invalidate];
+ weakSelf.recordTimer = nil;
+ weakSelf.localRecordLabel.hidden = YES;
+ [weakSelf saveRecordToPhotosAlbum:weakSelf.filePath];
+ weakSelf.filePath = nil;
}];
}
else
@@ -1153,6 +1455,47 @@
[self.talkPlayer audioTalkPressed:NO];
}
_isPressed = !_isPressed;
+}
+
+- (IBAction)clickCalloutHangupAction:(id)sender {
+ self.isShowAlert = NO;
+ [self closeTalkView:self.talkCloseButton];
+ if (self.msgId && self.msgId.length > 0) {
+ [[EZHttpUtil sharedManager] updateAnswerStatusWithMsgId:self.msgId answerStatus:@"no_answer" completion:^(ResponseData * _Nonnull responseData) {
+ HDLEZLog(@"###########鎸傛柇####锛�%@", [responseData yy_modelToJSONString]);
+ }];
+ }
+ [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (IBAction)clickCalloutIgnoreAction:(id)sender {
+// [UIView dd_showMessage:@"蹇界暐寮�鍙戜腑..."];
+ self.isShowAlert = NO;
+ self.isAnswering = NO;
+ [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (IBAction)clickCalloutAnswerAction:(id)sender {
+ self.isShowAlert = NO;
+ self.isAnswering = YES;
+ [self talkButtonClicked:self.talkButton];
+ if (self.msgId && self.msgId.length > 0) {
+ [[EZHttpUtil sharedManager] updateAnswerStatusWithMsgId:self.msgId answerStatus:@"answer" completion:^(ResponseData * _Nonnull responseData) {
+ HDLEZLog(@"###########鎺ュ惉####锛�%@", [responseData yy_modelToJSONString]);
+ }];
+ }
+}
+
+
+#pragma mark - Publish Methods
+/// 灞曠ず鍛煎彨寮规
+- (void)showCallOutAlertView {
+ self.videoCallOutView.hidden = NO;
+}
+
+/// 闅愯棌鍛煎彨寮规
+- (void)hiddenCallOutAlertView {
+ self.videoCallOutView.hidden = YES;
}
#pragma mark - Private Methods
@@ -1273,19 +1616,43 @@
[view removeFromSuperview];
}
}
- CGFloat averageWidth = [UIScreen mainScreen].bounds.size.width/5.0;
- UIImageView *lineImageView1 = [UIView dd_instanceVerticalLine:20 color:[UIColor grayColor]];
- lineImageView1.frame = CGRectMake(averageWidth, 7, lineImageView1.frame.size.width, lineImageView1.frame.size.height);
+// CGFloat averageWidth = [UIScreen mainScreen].bounds.size.width/5.0;
+ UIImageView *lineImageView1 = [UIView dd_instanceVerticalLine:20 color:HDLEZHEXCOLOR(0xFFFFFF, 0.16)];
+// lineImageView1.frame = CGRectMake(averageWidth, 7, lineImageView1.frame.size.width, lineImageView1.frame.size.height);
[self.toolBar addSubview:lineImageView1];
- UIImageView *lineImageView2 = [UIView dd_instanceVerticalLine:20 color:[UIColor grayColor]];
- lineImageView2.frame = CGRectMake(averageWidth * 2, 7, lineImageView2.frame.size.width, lineImageView2.frame.size.height);
+ [lineImageView1 mas_makeConstraints:^(MASConstraintMaker *make) {
+ make.left.mas_equalTo(self.playButton.mas_right);
+ make.centerY.mas_equalTo(self.playButton.mas_centerY);
+ make.width.mas_equalTo(lineImageView1.frame.size.width);
+ make.height.mas_equalTo(lineImageView1.frame.size.height);
+ }];
+ UIImageView *lineImageView2 = [UIView dd_instanceVerticalLine:20 color:HDLEZHEXCOLOR(0xFFFFFF, 0.16)];
+// lineImageView2.frame = CGRectMake(averageWidth * 2, 7, lineImageView2.frame.size.width, lineImageView2.frame.size.height);
[self.toolBar addSubview:lineImageView2];
- UIImageView *lineImageView3 = [UIView dd_instanceVerticalLine:20 color:[UIColor grayColor]];
- lineImageView3.frame = CGRectMake(averageWidth * 3, 7, lineImageView3.frame.size.width, lineImageView3.frame.size.height);
+ [lineImageView2 mas_makeConstraints:^(MASConstraintMaker *make) {
+ make.left.mas_equalTo(self.voiceButton.mas_right);
+ make.centerY.mas_equalTo(self.voiceButton.mas_centerY);
+ make.width.mas_equalTo(lineImageView2.frame.size.width);
+ make.height.mas_equalTo(lineImageView2.frame.size.height);
+ }];
+ UIImageView *lineImageView3 = [UIView dd_instanceVerticalLine:20 color:HDLEZHEXCOLOR(0xFFFFFF, 0.16)];
+// lineImageView3.frame = CGRectMake(averageWidth * 3, 7, lineImageView3.frame.size.width, lineImageView3.frame.size.height);
[self.toolBar addSubview:lineImageView3];
- UIImageView *lineImageView4 = [UIView dd_instanceVerticalLine:20 color:[UIColor grayColor]];
- lineImageView4.frame = CGRectMake(averageWidth * 4, 7, lineImageView4.frame.size.width, lineImageView4.frame.size.height);
+ [lineImageView3 mas_makeConstraints:^(MASConstraintMaker *make) {
+ make.left.mas_equalTo(self.qualityButton.mas_right);
+ make.centerY.mas_equalTo(self.qualityButton.mas_centerY);
+ make.width.mas_equalTo(lineImageView3.frame.size.width);
+ make.height.mas_equalTo(lineImageView3.frame.size.height);
+ }];
+ UIImageView *lineImageView4 = [UIView dd_instanceVerticalLine:20 color:HDLEZHEXCOLOR(0xFFFFFF, 0.16)];
+// lineImageView4.frame = CGRectMake(averageWidth * 4, 7, lineImageView4.frame.size.width, lineImageView4.frame.size.height);
[self.toolBar addSubview:lineImageView4];
+ [lineImageView4 mas_makeConstraints:^(MASConstraintMaker *make) {
+ make.left.mas_equalTo(self.emptyButton.mas_right);
+ make.centerY.mas_equalTo(self.emptyButton.mas_centerY);
+ make.width.mas_equalTo(lineImageView4.frame.size.width);
+ make.height.mas_equalTo(lineImageView4.frame.size.height);
+ }];
}
@@ -1386,5 +1753,100 @@
}
}
+#pragma mark - PrivateMethod (闂ㄩ攣鍏ㄥ睆鏃剁殑涓�绯诲垪鎿嶄綔)
+- (void)doorLockFullSceneOperation:(HDLEZVideoFullSceneOperation)operation {
+ switch (operation) {
+ case HDLEZVideoFullSceneOperationOfHangUp: { // 鎸傛柇
+ [self largeBack:self.largeButton];
+ [self closeTalkView:self.talkCloseButton];
+ [self hiddenCallOutAlertView];
+ [self.navigationController popViewControllerAnimated:YES];
+ }
+ break;
+ case HDLEZVideoFullSceneOperationOfPlay: { // 鎾斁
+ [self playButtonClicked:self.playButton];
+ }
+ break;
+ case HDLEZVideoFullSceneOperationOfPause: { // 鏆傚仠
+ [self playButtonClicked:self.playButton];
+ }
+ break;
+ case HDLEZVideoFullSceneOperationOfSound: { // 寮�鍚煶閲�
+ [self voiceButtonClicked:self.voiceButton];
+ }
+ break;
+ case HDLEZVideoFullSceneOperationOfSoundOff: { // 闈欓煶
+ [self voiceButtonClicked:self.voiceButton];
+ }
+ break;
+ case HDLEZVideoFullSceneOperationOfSmooth: { // 娴佺晠
+ [self qualitySelectedClicked:self.lowButton];
+ }
+ break;
+ case HDLEZVideoFullSceneOperationOfBalance: { // 鍧囪
+ [self qualitySelectedClicked:self.middleButton];
+ }
+ break;
+ case HDLEZVideoFullSceneOperationOfHDFull: { // 楂樻竻
+ [self qualitySelectedClicked:self.highButton];
+ }
+ break;
+ case HDLEZVideoFullSceneOperationOfExitFull: { // 閫�鍑哄叏灞�
+ [self largeBack:self.largeButton];
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+ if (!self.fullSceneToolView.hidden) {
+ [self.fullSceneToolView qualityStatusChanged:YES];
+ }
+}
+
+#pragma Setter
+- (void)setIsShowAlert:(BOOL)isShowAlert {
+ _isShowAlert = isShowAlert;
+ if (_isShowAlert) {
+ [self showCallOutAlertView];
+ } else {
+ [self hiddenCallOutAlertView];
+ }
+}
+
+#pragma mark - Getter
+- (HDLEZVideoDoorToolView *)fullSceneToolView {
+ if (!_fullSceneToolView) {
+ _fullSceneToolView = [[HDLEZVideoDoorToolView alloc] initWithFrame:CGRectMake(0, HDLEZ_APP_SCREEN_HEIGHT - 280, HDLEZ_APP_SCREEN_WIDTH, 280)];
+ _fullSceneToolView.hidden = YES;
+ }
+ return _fullSceneToolView;
+}
+
+- (BOOL)prefersHomeIndicatorAutoHidden {
+ return YES;
+}
+
+- (CGFloat)hdlEZStatusBarHeight {
+ if (@available(iOS 13.0, *)) {
+ NSSet *set = [UIApplication sharedApplication].connectedScenes;
+ UIWindowScene *windowScene = [set anyObject];
+ UIStatusBarManager *statusBarManager = windowScene.statusBarManager;
+ return statusBarManager.statusBarFrame.size.height;
+ } else {
+ return [UIApplication sharedApplication].statusBarFrame.size.height;
+ }
+}
+
+/// 鏄惁鏀寔涓�閿紑閿�
+- (BOOL)isSupportOneKeyUnlockDoor {
+ BOOL isSupport = YES;
+ if (self.deviceInfo && self.deviceInfo.deviceType && ([self.deviceInfo.deviceType containsString:@"LT20VC"] || [self.deviceInfo.deviceType containsString:@"LT20VC"])) {
+ isSupport = NO;
+ }
+ return isSupport;
+}
@end
--
Gitblit v1.8.0