RQVideoModule.m 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. //
  2. // RQVideoModule.m
  3. // SDJK
  4. //
  5. // Created by 张嵘 on 2021/10/25.
  6. //
  7. #import "RQVideoModule.h"
  8. /// 播放视频
  9. NSString * const RQPlayVideoUrlNotification = @"RQPlayVideoUrlNotification";
  10. /// 播放视频Model
  11. NSString * const RQPlayVideoItemKey = @"RQPlayVideoItemKey";
  12. /// 播放视频ModelArr
  13. NSString * const RQPlayVideoItemArrKey = @"RQPlayVideoItemArrKey";
  14. /// 视频Index
  15. NSString * const RQVideoItemIndexKey = @"RQVideoItemIndexKey";
  16. /// 视频IndexPath
  17. NSString * const RQVideoItemIndexPathKey = @"RQVideoItemIndexPathKey";
  18. /// 视频Source
  19. NSString * const RQVideoSourceTypeKey = @"RQVideoSourceTypeKey";
  20. @interface RQVideoModule ()
  21. @property (nonatomic, readwrite, strong) ZFPlayerControlView *controlView;
  22. @property (nonatomic, readwrite, assign) RQADDoType adDoType;
  23. @property (nonatomic, readwrite, assign) ZFPlayerPlaybackState playState;
  24. @end
  25. @implementation RQVideoModule
  26. @def_singleton(RQVideoModule);
  27. - (void)playVideoWithVideosItem:(VideosItem *)videosItem videosItemArr:(NSArray *)videosItemArr playView:(UIView *)playView scrollView:(UIScrollView *)scrollView {
  28. if (self.playerController && self.playerController.isPlaying) {
  29. [self.playerController stop];
  30. self.playerController = [[MPPlayerController alloc] initWithContainerView:playView];
  31. [self requestDataWithVideosItem:videosItem videosItemArr:videosItemArr playView:playView scrollView:scrollView];
  32. } else {
  33. self.playerController = [[MPPlayerController alloc] initWithContainerView:playView];
  34. [self requestDataWithVideosItem:videosItem videosItemArr:videosItemArr playView:playView scrollView:scrollView];
  35. }
  36. }
  37. - (void)requestDataWithVideosItem:(VideosItem *)videoItem videosItemArr:(NSArray *)videosItemArr playView:(UIView *)playView scrollView:(UIScrollView *)scrollView {
  38. @weakify(self)
  39. if (RQ_Video_Module.currentpPlayVideosItem.isPlaying) {
  40. RQ_Video_Module.currentpPlayVideosItem.isPlaying = NO;
  41. }
  42. [self.playerController.player setExitFullScreenWhenStop:NO];
  43. self.playerController.playableArray = videosItemArr;
  44. self.playerController.controlView = self.controlView;
  45. [self.controlView showTitle:videoItem.title coverURLString:videoItem.coverFileUrl placeholderImage:RQWebVideoImagePlaceholder() fullScreenMode:ZFFullScreenModeAutomatic];
  46. [self.playerController playWithPlayable:videoItem];
  47. // [self.playerController.currentPlayerManager pause];
  48. // [RQ_AD_MANAGER loadAdWithAdType:RQADType_native customView:playView];
  49. // [RQ_AD_MANAGER initCloseBlock:^(RQADDoType adDoType) {
  50. // self.adDoType = adDoType;
  51. // ZFPlayerPlaybackState playState = self.playerController.currentPlayerManager.playState;
  52. // if (adDoType == RQADDoType_Miss) {
  53. //
  54. // }
  55. //
  56. // switch (adDoType) {
  57. // case RQADDoType_Success:
  58. // case RQADDoType_Click:{
  59. // if (playState == ZFPlayerPlayStatePlaying) {
  60. // [self.playerController.currentPlayerManager pause];
  61. // }
  62. // break;
  63. // }
  64. //
  65. // case RQADDoType_Faild:
  66. // case RQADDoType_Close:{
  67. // if (playState == ZFPlayerPlayStatePaused) {
  68. // NSLog(@"%@",NSStringFromClass([RQControllerHelper.currentViewController class]));
  69. // if (!self.playerController.player.isFullScreen) {
  70. // [self.playerController.currentPlayerManager play];
  71. // self.adDoType = RQADDoType_Miss;
  72. // } else {
  73. // if ([NSStringFromClass([RQControllerHelper.currentViewController class]) isEqualToString:@"ZFLandscapeViewController"]) {
  74. // [self.playerController.currentPlayerManager play];
  75. // self.adDoType = RQADDoType_Miss;
  76. // } else {
  77. //
  78. // }
  79. // }
  80. // }
  81. // break;
  82. // }
  83. //
  84. // default:
  85. // break;
  86. // }
  87. // }];
  88. self.playerController.currentPlayerManager.playerDidToEnd = ^(id<ZFPlayerMediaPlayback> _Nonnull asset) {
  89. @strongify(self)
  90. if (!self.playerController.player.isFullScreen) {
  91. videoItem.isPlaying = NO;
  92. NSInteger currentIndex = [videosItemArr indexOfObject:videoItem];
  93. NSInteger nextIndex = (currentIndex + 1 >= self.playerController.playableArray.count)? 0 : currentIndex + 1;
  94. VideosItem *nextVideoItem = (VideosItem *)videosItemArr[nextIndex];
  95. nextVideoItem.isPlaying = YES;
  96. [self requestDataWithVideosItem:nextVideoItem videosItemArr:videosItemArr playView:playView scrollView:scrollView];
  97. [scrollView zf_scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:nextIndex inSection:0] atScrollPosition:ZFPlayerScrollViewScrollPositionCenteredVertically animated:YES completionHandler:nil];
  98. } else {
  99. // [RQ_AD_MANAGER loadAdWithAdType:RQADType_fullScreen customView:nil];
  100. __block BOOL isSure;
  101. __block BOOL isShow;
  102. SCLAlertView *alert = [[SCLAlertView alloc] initWithNewWindow];
  103. alert.backgroundViewColor = backGroundColor;
  104. alert.customViewColor = defGreen;
  105. [alert addButton:@"立即播放 " actionBlock:^(void) {
  106. isSure = YES;
  107. RQ_Video_Module.currentpPlayVideosItem.isPlaying = NO;
  108. NSInteger currentIndex = [videosItemArr indexOfObject:RQ_Video_Module.currentpPlayVideosItem];
  109. NSInteger nextIndex = (currentIndex + 1 >= self.playerController.playableArray.count)? 0 : currentIndex + 1;
  110. VideosItem *nextVideoItem = (VideosItem *)videosItemArr[nextIndex];
  111. [self.playerController playWithPlayable:nextVideoItem];
  112. nextVideoItem.isPlaying = YES;
  113. // [self.playerController.currentPlayerManager pause];
  114. [self.controlView updateTitle:nextVideoItem.title coverURLString:nextVideoItem.coverFileUrl placeholderImage:RQWebVideoImagePlaceholder() fullScreenMode:ZFFullScreenModeAutomatic];
  115. RQ_Video_Module.currentpPlayVideosItem = nextVideoItem;
  116. }];
  117. [alert addTimerToButtonIndex:0 reverse:YES];
  118. [alert showNotice:@"温馨提示" subTitle:@"即将播放下一个视频" closeButtonTitle:@"取消" duration:5.0f];
  119. isShow = YES;
  120. [alert alertIsDismissed:^{
  121. if (isSure) {
  122. // [RQ_AD_MANAGER showAdWithAdType:RQADType_fullScreen];
  123. }
  124. isShow = NO;
  125. }];
  126. // for (UIView *view in UIApplication.sharedApplication.keyWindow.subviews) {
  127. // if ([view isKindOfClass:NSClassFromString(@"UITransitionView")]) {
  128. // for (UIView *view1 in view.subviews) {
  129. // if ([view1 isKindOfClass:NSClassFromString(@"UIDropShadowView")]) {
  130. // for (UIView *view2 in view1.subviews) {
  131. // [RQ_AD_MANAGER loadAdWithAdType:RQADType_native customView:view2];
  132. // }
  133. // }
  134. // }
  135. // }
  136. // }
  137. }
  138. };
  139. //延时
  140. [[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
  141. [subscriber sendNext:@"延时1.f秒"];
  142. return nil;
  143. }] delay:1.f] subscribeNext:^(id x) {
  144. NSInteger index = [videosItemArr indexOfObject:videoItem];
  145. [scrollView zf_scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:ZFPlayerScrollViewScrollPositionCenteredVertically animated:YES completionHandler:nil];
  146. }];
  147. videoItem.isPlaying = YES;
  148. RQ_Video_Module.currentpPlayVideosItem = videoItem;
  149. }
  150. #pragma mark - LazyLoad
  151. - (ZFPlayerControlView *)controlView {
  152. if (!_controlView) {
  153. _controlView = [[ZFPlayerControlView alloc] init];
  154. @weakify(self)
  155. [_controlView.portraitControlView.backBtn setTapActionWithBlock:^(UITapGestureRecognizer *tap) {
  156. @strongify(self)
  157. [self.playerController stop];
  158. [RQ_APPDELEGATE.services popViewModelAnimated:YES];
  159. }];
  160. }
  161. return _controlView;
  162. }
  163. @end