// // RQVideoModule.m // SDJK // // Created by 张嵘 on 2021/10/25. // #import "RQVideoModule.h" /// 播放视频 NSString * const RQPlayVideoUrlNotification = @"RQPlayVideoUrlNotification"; /// 播放视频Model NSString * const RQPlayVideoItemKey = @"RQPlayVideoItemKey"; /// 播放视频ModelArr NSString * const RQPlayVideoItemArrKey = @"RQPlayVideoItemArrKey"; /// 视频Index NSString * const RQVideoItemIndexKey = @"RQVideoItemIndexKey"; /// 视频IndexPath NSString * const RQVideoItemIndexPathKey = @"RQVideoItemIndexPathKey"; /// 视频Source NSString * const RQVideoSourceTypeKey = @"RQVideoSourceTypeKey"; @interface RQVideoModule () @property (nonatomic, readwrite, strong) ZFPlayerControlView *controlView; @property (nonatomic, readwrite, assign) RQADDoType adDoType; @property (nonatomic, readwrite, assign) ZFPlayerPlaybackState playState; @end @implementation RQVideoModule @def_singleton(RQVideoModule); - (void)playVideoWithVideosItem:(VideosItem *)videosItem videosItemArr:(NSArray *)videosItemArr playView:(UIView *)playView scrollView:(UIScrollView *)scrollView { if (self.playerController && self.playerController.isPlaying) { [self.playerController stop]; self.playerController = [[MPPlayerController alloc] initWithContainerView:playView]; [self requestDataWithVideosItem:videosItem videosItemArr:videosItemArr playView:playView scrollView:scrollView]; } else { self.playerController = [[MPPlayerController alloc] initWithContainerView:playView]; [self requestDataWithVideosItem:videosItem videosItemArr:videosItemArr playView:playView scrollView:scrollView]; } } - (void)requestDataWithVideosItem:(VideosItem *)videoItem videosItemArr:(NSArray *)videosItemArr playView:(UIView *)playView scrollView:(UIScrollView *)scrollView { @weakify(self) if (RQ_Video_Module.currentpPlayVideosItem.isPlaying) { RQ_Video_Module.currentpPlayVideosItem.isPlaying = NO; } [self.playerController.player setExitFullScreenWhenStop:NO]; self.playerController.playableArray = videosItemArr; self.playerController.controlView = self.controlView; [self.controlView showTitle:videoItem.title coverURLString:videoItem.coverFileUrl placeholderImage:RQWebVideoImagePlaceholder() fullScreenMode:ZFFullScreenModeAutomatic]; [self.playerController playWithPlayable:videoItem]; // [self.playerController.currentPlayerManager pause]; // [RQ_AD_MANAGER loadAdWithAdType:RQADType_native customView:playView]; // [RQ_AD_MANAGER initCloseBlock:^(RQADDoType adDoType) { // self.adDoType = adDoType; // ZFPlayerPlaybackState playState = self.playerController.currentPlayerManager.playState; // if (adDoType == RQADDoType_Miss) { // // } // // switch (adDoType) { // case RQADDoType_Success: // case RQADDoType_Click:{ // if (playState == ZFPlayerPlayStatePlaying) { // [self.playerController.currentPlayerManager pause]; // } // break; // } // // case RQADDoType_Faild: // case RQADDoType_Close:{ // if (playState == ZFPlayerPlayStatePaused) { // NSLog(@"%@",NSStringFromClass([RQControllerHelper.currentViewController class])); // if (!self.playerController.player.isFullScreen) { // [self.playerController.currentPlayerManager play]; // self.adDoType = RQADDoType_Miss; // } else { // if ([NSStringFromClass([RQControllerHelper.currentViewController class]) isEqualToString:@"ZFLandscapeViewController"]) { // [self.playerController.currentPlayerManager play]; // self.adDoType = RQADDoType_Miss; // } else { // // } // } // } // break; // } // // default: // break; // } // }]; self.playerController.currentPlayerManager.playerDidToEnd = ^(id _Nonnull asset) { @strongify(self) if (!self.playerController.player.isFullScreen) { videoItem.isPlaying = NO; NSInteger currentIndex = [videosItemArr indexOfObject:videoItem]; NSInteger nextIndex = (currentIndex + 1 >= self.playerController.playableArray.count)? 0 : currentIndex + 1; VideosItem *nextVideoItem = (VideosItem *)videosItemArr[nextIndex]; nextVideoItem.isPlaying = YES; [self requestDataWithVideosItem:nextVideoItem videosItemArr:videosItemArr playView:playView scrollView:scrollView]; [scrollView zf_scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:nextIndex inSection:0] atScrollPosition:ZFPlayerScrollViewScrollPositionCenteredVertically animated:YES completionHandler:nil]; } else { // [RQ_AD_MANAGER loadAdWithAdType:RQADType_fullScreen customView:nil]; __block BOOL isSure; __block BOOL isShow; SCLAlertView *alert = [[SCLAlertView alloc] initWithNewWindow]; alert.backgroundViewColor = backGroundColor; alert.customViewColor = defGreen; [alert addButton:@"立即播放 " actionBlock:^(void) { isSure = YES; RQ_Video_Module.currentpPlayVideosItem.isPlaying = NO; NSInteger currentIndex = [videosItemArr indexOfObject:RQ_Video_Module.currentpPlayVideosItem]; NSInteger nextIndex = (currentIndex + 1 >= self.playerController.playableArray.count)? 0 : currentIndex + 1; VideosItem *nextVideoItem = (VideosItem *)videosItemArr[nextIndex]; [self.playerController playWithPlayable:nextVideoItem]; nextVideoItem.isPlaying = YES; // [self.playerController.currentPlayerManager pause]; [self.controlView updateTitle:nextVideoItem.title coverURLString:nextVideoItem.coverFileUrl placeholderImage:RQWebVideoImagePlaceholder() fullScreenMode:ZFFullScreenModeAutomatic]; RQ_Video_Module.currentpPlayVideosItem = nextVideoItem; }]; [alert addTimerToButtonIndex:0 reverse:YES]; [alert showNotice:@"温馨提示" subTitle:@"即将播放下一个视频" closeButtonTitle:@"取消" duration:5.0f]; isShow = YES; [alert alertIsDismissed:^{ if (isSure) { // [RQ_AD_MANAGER showAdWithAdType:RQADType_fullScreen]; } isShow = NO; }]; // for (UIView *view in UIApplication.sharedApplication.keyWindow.subviews) { // if ([view isKindOfClass:NSClassFromString(@"UITransitionView")]) { // for (UIView *view1 in view.subviews) { // if ([view1 isKindOfClass:NSClassFromString(@"UIDropShadowView")]) { // for (UIView *view2 in view1.subviews) { // [RQ_AD_MANAGER loadAdWithAdType:RQADType_native customView:view2]; // } // } // } // } // } } }; //延时 [[[RACSignal createSignal:^RACDisposable *(id subscriber) { [subscriber sendNext:@"延时1.f秒"]; return nil; }] delay:1.f] subscribeNext:^(id x) { NSInteger index = [videosItemArr indexOfObject:videoItem]; [scrollView zf_scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:ZFPlayerScrollViewScrollPositionCenteredVertically animated:YES completionHandler:nil]; }]; videoItem.isPlaying = YES; RQ_Video_Module.currentpPlayVideosItem = videoItem; } #pragma mark - LazyLoad - (ZFPlayerControlView *)controlView { if (!_controlView) { _controlView = [[ZFPlayerControlView alloc] init]; @weakify(self) [_controlView.portraitControlView.backBtn setTapActionWithBlock:^(UITapGestureRecognizer *tap) { @strongify(self) [self.playerController stop]; [RQ_APPDELEGATE.services popViewModelAnimated:YES]; }]; } return _controlView; } @end