3535static NSString *const kPlaybackCustomCellID = @" kPlaybackCustomCellID" ;
3636static CGFloat const kScreenScale = 0.5625 ; // 9/16 高宽比
3737
38- static NSString *const kLive = @" ipc.flv?action=live " ;
38+ static NSString *const kPlayback = @" ipc.flv?action=playback " ;
3939
4040@interface TIoTDemoLocalRecordVC ()<UIScrollViewDelegate,UITableViewDelegate,UITableViewDataSource>
4141@property (nonatomic , assign ) CGRect screenRect;
@@ -98,6 +98,8 @@ - (void)viewDidLoad {
9898 [super viewDidLoad ];
9999 // Do any additional setup after loading the view.
100100
101+ self.navigationController .navigationBar .barTintColor = [UIColor whiteColor ];
102+
101103 self.isHidePlayBtn = NO ;
102104 self.isTimerSuspend = NO ;
103105 self.screenRect = [UIApplication sharedApplication ].delegate .window .frame ;
@@ -317,7 +319,7 @@ - (void)setupUIViews {
317319 weakSelf.isHidePlayBtn = YES ;
318320 weakSelf.isPause = NO ;
319321// [weakSelf playVideoWithStartTime:weakSelf.listModel.VideoURL withTime:previousModel isChangeModel:YES];
320- [weakSelf seekDesignatedPointWithCurrentTime: previousModel.StartTime selectedTimeMoel: previousModel isChangeModel: YES ];
322+ [weakSelf seekDesignatedPointWithCurrentTime: previousModel.StartTime selectedTimeMoel: previousModel isChangeModel: YES withProgress: NO ];
321323 [weakSelf setScrollOffsetWith: previousModel];
322324 }
323325
@@ -342,7 +344,7 @@ - (void)setupUIViews {
342344 weakSelf.isHidePlayBtn = YES ;
343345 weakSelf.isPause = NO ;
344346// [weakSelf playVideoWithStartTime:weakSelf.listModel.VideoURL withTime:nextModel isChangeModel:YES];
345- [weakSelf seekDesignatedPointWithCurrentTime: nextModel.StartTime selectedTimeMoel: nextModel isChangeModel: YES ];
347+ [weakSelf seekDesignatedPointWithCurrentTime: nextModel.StartTime selectedTimeMoel: nextModel isChangeModel: YES withProgress: NO ];
346348 [weakSelf setScrollOffsetWith: nextModel];
347349 }
348350 };
@@ -385,7 +387,7 @@ - (void)setupUIViews {
385387 if (weakSelf.videoTimeModel .StartTime .integerValue <= startTimestamp && weakSelf.videoTimeModel .EndTime .integerValue >=startTimestamp ) {
386388
387389 if (weakSelf.player == nil ) { // 滑动到空数据,销毁player,重新请求
388- [weakSelf seekDesignatedPointWithCurrentTime: videoPlayStart selectedTimeMoel: currentModel isChangeModel: YES ];
390+ [weakSelf seekDesignatedPointWithCurrentTime: videoPlayStart selectedTimeMoel: currentModel isChangeModel: YES withProgress: NO ];
389391 }else {
390392 if (weakSelf.isTimerSuspend == YES ) {
391393 if (weakSelf.timer ) {
@@ -405,11 +407,11 @@ - (void)setupUIViews {
405407// [weakSelf tapVideoView:weakSelf.playPauseBtn];
406408// }
407409 [weakSelf startPlayLocalVideoWithStartTime: currentModel.StartTime.integerValue endTime: currentModel.EndTime.integerValue sliderValue: videoPlayStart.integerValue];
408- [weakSelf seekDesignatedPointWithCurrentTime: videoPlayStart selectedTimeMoel: currentModel isChangeModel: YES ];
410+ [weakSelf seekDesignatedPointWithCurrentTime: videoPlayStart selectedTimeMoel: currentModel isChangeModel: YES withProgress: NO ];
409411 }
410412
411413 }else {
412- [weakSelf seekDesignatedPointWithCurrentTime: videoPlayStart selectedTimeMoel: currentModel isChangeModel: YES ];
414+ [weakSelf seekDesignatedPointWithCurrentTime: videoPlayStart selectedTimeMoel: currentModel isChangeModel: YES withProgress: NO ];
413415 }
414416
415417 TIoTDemoCloudEventModel *scorllCurrentModel = [[TIoTDemoCloudEventModel alloc ]init];
@@ -550,7 +552,7 @@ - (void)getLocalDayTimeListDataWithCmd:(NSString *)actionString {
550552
551553 // 滚动到第一段视频起始位置开始播放
552554 self.choiceLocalDateView .nextDateBlcok (timeModel);
553- // [self setVieoPlayerStartPlay ];
555+ // [self setVieoPlayerStartPlayStartTime:<#(NSString *)#> endTime:<#(NSString *)#> ];
554556 }
555557 }
556558
@@ -559,8 +561,9 @@ - (void)getLocalDayTimeListDataWithCmd:(NSString *)actionString {
559561 }];
560562}
561563
562- // / MARK: seek 进度条滚动
563- - (void )seekDesignatedPointWithCurrentTime : (NSString *)currentTime selectedTimeMoel : (TIoTDemoCloudEventModel *)timeModel isChangeModel : (BOOL )isChange {
564+ // / MARK: seek 进度滚动控制
565+ // isControlProgress: 是否是播放器进度条
566+ - (void )seekDesignatedPointWithCurrentTime : (NSString *)currentTime selectedTimeMoel : (TIoTDemoCloudEventModel *)timeModel isChangeModel : (BOOL )isChange withProgress : (BOOL )isControlProgress {
564567
565568 if (isChange == YES ) {
566569 self.videoTimeModel = [[TIoTDemoCloudEventModel alloc ]init];
@@ -575,24 +578,29 @@ - (void)seekDesignatedPointWithCurrentTime:(NSString *)currentTime selectedTimeM
575578 channel = @" 0" ;
576579 }
577580
578- [self stopPlayMovie ];
579-
580- dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(1 * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
581- NSString *actionString = [NSString stringWithFormat: @" action=inner_define&channel=%@ &cmd=playback_seek&time=%@ " ,channel,currentTime];
582-
583- [[TIoTCoreXP2PBridge sharedInstance ] getCommandRequestWithAsync: self .deviceName?:@" " cmd: actionString timeout: 2 *1000 *1000 completion: ^(NSString * _Nonnull jsonList) {
581+ if (isControlProgress == NO ) { // 控制本地录像时间轴滚动
582+ [self stopPlayMovie ];
583+ // seek 指定时间后,设备状态正常,可起播放器
584+ dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(1 * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
585+ [self setVieoPlayerStartPlayStartTime: timeModel.StartTime endTime: timeModel.EndTime];
586+ });
587+ }else {
588+ // seek 播放器进度条后 不用重启播放器,播放流自动跟随时间播放
589+ dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(1 * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
590+ NSString *actionString = [NSString stringWithFormat: @" action=inner_define&channel=%@ &cmd=playback_seek&time=%@ " ,channel,currentTime];
584591
585- TIoTDemoDeviceStatusModel *responseModel = [TIoTDemoDeviceStatusModel yy_modelWithJSON: jsonList];
586- if ([responseModel.status isEqualToString: @" 0" ]) {
587- // seek 指定时间后,设备状态正常,可起播放器
588- [self setVieoPlayerStartPlay ];
592+ [[TIoTCoreXP2PBridge sharedInstance ] getCommandRequestWithAsync: self .deviceName?:@" " cmd: actionString timeout: 2 *1000 *1000 completion: ^(NSString * _Nonnull jsonList) {
589593
590- }else {
591- // 设备状态异常提示
592- [TIoTCoreUtil showDeviceStatusError: responseModel commandInfo: [NSString stringWithFormat: @" 发送信令: %@ \n\n 接收: %@ " ,actionString,jsonList]];
593- }
594- }];
595- });
594+ TIoTDemoDeviceStatusModel *responseModel = [TIoTDemoDeviceStatusModel yy_modelWithJSON: jsonList];
595+ if ([responseModel.status isEqualToString: @" 0" ]) {
596+
597+ }else {
598+ // 设备状态异常提示
599+ [TIoTCoreUtil showDeviceStatusError: responseModel commandInfo: [NSString stringWithFormat: @" 发送信令: %@ \n\n 接收: %@ " ,actionString,jsonList]];
600+ }
601+ }];
602+ });
603+ }
596604}
597605
598606// / MARK: 发送暂停或继续播放信令
@@ -633,16 +641,16 @@ - (void)sendPauseOrResumeSignallingWithSwitch:(BOOL)isPause {
633641}
634642
635643// / MARK:开启设备
636- - (void )setVieoPlayerStartPlay {
644+ - (void )setVieoPlayerStartPlayStartTime : ( NSString *) startTime endTime : ( NSString *) endTime {
637645
638646 dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(0 * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
639647
640648 NSString *channalID = @" " ;
641649
642650 if (self.isNVR == YES ) {
643- channalID = [NSString stringWithFormat: @" %@ &channel=%@ " , kLive ,self .deviceModel.Channel?:@" " ];
651+ channalID = [NSString stringWithFormat: @" %@ &channel=%@ &start_time= %@ &end_time= %@ " , kPlayback ,self .deviceModel.Channel?:@" " ,startTime,endTime ];
644652 }else {
645- channalID = [NSString stringWithFormat: @" %@ &channel=0" , kLive ];
653+ channalID = [NSString stringWithFormat: @" %@ &channel=0&start_time= %@ &end_time= %@ " , kPlayback ,startTime,endTime ];
646654 }
647655
648656 NSString *urlString = [[TIoTCoreXP2PBridge sharedInstance ] getUrlForHttpFlv: self .deviceName?:@" " ];
@@ -688,7 +696,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
688696 self.isPause = NO ;
689697 TIoTDemoCloudEventModel *selectedModel = self.dataArray [indexPath.row];
690698// [self playVideoWithStartTime:self.listModel.VideoURL withTime:selectedModel isChangeModel:YES];
691- [self seekDesignatedPointWithCurrentTime: selectedModel.StartTime selectedTimeMoel: selectedModel isChangeModel: YES ];
699+ [self seekDesignatedPointWithCurrentTime: selectedModel.StartTime selectedTimeMoel: selectedModel isChangeModel: YES withProgress: NO ];
692700 [self setScrollOffsetWith: selectedModel];
693701}
694702
@@ -811,23 +819,40 @@ - (void)initializedVideo {
811819 }
812820 }];
813821
814- // self.playView = [[UIView alloc]init];
815- // [self.imageView addSubview:self.playView];
816- // [self.playView mas_makeConstraints:^(MASConstraintMaker *make) {
817- // make.left.right.top.bottom.equalTo(self.imageView);
818- // }];
819-
820- // self.videoPlayBtn = [[UIButton alloc]init];
821- // [self.videoPlayBtn setImage:[UIImage imageNamed:@"video_play"] forState:UIControlStateNormal];
822- // [self.videoPlayBtn addTarget:self action:@selector(playVideo:) forControlEvents:UIControlEventTouchUpInside];
823- // [self.playView addSubview:self.videoPlayBtn];
824- // [self.videoPlayBtn mas_makeConstraints:^(MASConstraintMaker *make) {
825- // make.center.equalTo(self.playView);
826- // make.width.height.mas_equalTo(60);
827- // }];
822+ self.playView = [[UIView alloc ]init];
823+ [self .imageView addSubview: self .playView];
824+ [self .playView mas_makeConstraints: ^(MASConstraintMaker *make) {
825+ make.left .right .top .bottom .equalTo (self.imageView );
826+ }];
827+
828+ self.videoPlayBtn = [[UIButton alloc ]init];
829+ [self .videoPlayBtn setImage: [UIImage imageNamed: @" video_play" ] forState: UIControlStateNormal];
830+ [self .videoPlayBtn addTarget: self action: @selector (playVideo: ) forControlEvents: UIControlEventTouchUpInside];
831+ [self .playView addSubview: self .videoPlayBtn];
832+ [self .videoPlayBtn mas_makeConstraints: ^(MASConstraintMaker *make) {
833+ make.center .equalTo (self.playView );
834+ make.width .height .mas_equalTo (60 );
835+ }];
836+
837+ self.playView .hidden = YES ;
828838
829839}
830840
841+ // /MARK:控制播放器进度条是否显示
842+ - (void )controlProgerssAppear : (UIButton *)button {
843+ if (self.customControlVidwoView .hidden == YES ) {
844+ self.customControlVidwoView .hidden = NO ;
845+ [self autoHideControlView ];
846+
847+ }else {
848+ self.customControlVidwoView .hidden = YES ;
849+ if (self.controlTimer != nil ) {
850+ dispatch_source_cancel (self.controlTimer );
851+ self.controlTimer = nil ;
852+ }
853+ }
854+ }
855+
831856// /MARK: 控制栏隐藏状态下tap Video时响应
832857- (void )tapVideoView : (UIButton *)button {
833858
@@ -852,7 +877,7 @@ - (void)tapVideoView:(UIButton *)button {
852877
853878 if (self.isReAppearPause == YES ) {
854879 // 切换云存和本地tap时,player 进度条重新计算
855- [self seekDesignatedPointWithCurrentTime: [NSString stringWithFormat: @" %ld " ,(long )self .currentTime] selectedTimeMoel: self .videoTimeModel isChangeModel: YES ];
880+ [self seekDesignatedPointWithCurrentTime: [NSString stringWithFormat: @" %ld " ,(long )self .currentTime] selectedTimeMoel: self .videoTimeModel isChangeModel: YES withProgress: NO ];
856881 }else {
857882 [self sendPauseOrResumeSignallingWithSwitch: NO ];
858883 }
@@ -1005,7 +1030,7 @@ - (void)setupPlayerCustomControlView {
10051030 }else {
10061031 self.playPauseBtn = [UIButton buttonWithType: UIButtonTypeCustom];
10071032 self.playPauseBtn .backgroundColor = [UIColor clearColor ];
1008- [self .playPauseBtn addTarget: self action: @selector (tapVideoView : ) forControlEvents: UIControlEventTouchUpInside];
1033+ [self .playPauseBtn addTarget: self action: @selector (controlProgerssAppear : ) forControlEvents: UIControlEventTouchUpInside];
10091034 [self .imageView addSubview: self .playPauseBtn];
10101035 [self .playPauseBtn mas_makeConstraints: ^(MASConstraintMaker *make) {
10111036 make.left .right .top .equalTo (self.imageView );
@@ -1078,11 +1103,11 @@ - (void)sliderValueChanged:(id)sender {
10781103// [self tapVideoView:self.playPauseBtn];
10791104 }
10801105 self.isPause = NO ;
1081- self.player .currentPlaybackTime = self.currentTime ;
1082- [self startPlayLocalVideoWithStartTime: self .videoTimeModel.StartTime.integerValue endTime: self .videoTimeModel.EndTime.integerValue sliderValue: self .player.currentPlaybackTime ];
1106+ // self.player.currentPlaybackTime = self.currentTime;
1107+ [self startPlayLocalVideoWithStartTime: self .videoTimeModel.StartTime.integerValue endTime: self .videoTimeModel.EndTime.integerValue sliderValue: self .currentTime ];
10831108
10841109// [self getFullVideoURLWithPartURL:self.listModel.VideoURL withTime:currentTimeModel isChangeModel:NO];
1085- [self seekDesignatedPointWithCurrentTime: currentTimeModel.StartTime selectedTimeMoel: currentTimeModel isChangeModel: NO ];
1110+ [self seekDesignatedPointWithCurrentTime: currentTimeModel.StartTime selectedTimeMoel: currentTimeModel isChangeModel: NO withProgress: YES ];
10861111 [self setScrollOffsetWith: currentTimeModel];
10871112
10881113}
@@ -1279,9 +1304,10 @@ - (void)localMoviePlayBackStateDidChange:(NSNotification*)notification
12791304 self.stopNumber += 1 ;
12801305 if (self.stopNumber == 2 ) {
12811306 dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue (), ^{
1282- [self configVideo ];
1283- [self .player prepareToPlay ];
1284- [self .player play ];
1307+ // [self configVideo];
1308+ // [self.player prepareToPlay];
1309+ // [self.player play];
1310+ self.playView .hidden = NO ;
12851311 });
12861312 }
12871313 break ;
@@ -1451,7 +1477,7 @@ - (void)refushlocalVideo:(NSNotification *)notify {
14511477
14521478 [MBProgressHUD show: [NSString stringWithFormat: @" %@ 通道建立成功" ,selectedName] icon: @" " view: self .view];
14531479
1454- [self seekDesignatedPointWithCurrentTime: [NSString stringWithFormat: @" %ld " ,self .currentTime] selectedTimeMoel: nil isChangeModel: NO ];
1480+ [self seekDesignatedPointWithCurrentTime: [NSString stringWithFormat: @" %ld " ,self .currentTime] selectedTimeMoel: nil isChangeModel: NO withProgress: NO ];
14551481}
14561482
14571483- (void )responseLocalP2PdisConnect : (NSNotification *)notify {
0 commit comments