123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- //
- // RQExplainVideoViewController.m
- // SDJK
- //
- // Created by 张嵘 on 2022/7/5.
- //
- #import "RQExplainVideoViewController.h"
- #import <ZFPlayer/ZFAVPlayerManager.h>
- @interface RQExplainVideoViewController ()
- /// viewModel
- @property (nonatomic, readonly, strong) RQExplainVideoViewModel *viewModel;
- @property (nonatomic, readwrite, strong) UIImageView *containerView;
- @property (nonatomic, readwrite, strong) ZFPlayerController *player;
- @property (nonatomic, readwrite, strong) ZFPlayerControlView *controlView;
- @end
- @implementation RQExplainVideoViewController
- @dynamic viewModel;
- #pragma mark - SystemMethod
- - (void)viewDidLoad {
- [super viewDidLoad];
- /// 初始化
- [self rq_setup];
- if (RQ_USER_MANAGER.tryLookCount > 0) {
- RQ_USER_MANAGER.tryLookCount = RQ_USER_MANAGER.tryLookCount - 1;
- }
- }
- - (void)viewWillLayoutSubviews {
- [super viewWillLayoutSubviews];
- self.containerView.frame = CGRectMake(0, RQ_APPLICATION_STATUS_BAR_HEIGHT, RQ_SCREEN_WIDTH, RQ_SCREEN_HEIGHT - RQ_APPLICATION_STATUS_BAR_HEIGHT - RQ_APPLICATION_SAFEAREA_BOTTOM_HEIGHT);
- }
- - (void)viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
- self.player.viewControllerDisappear = NO;
- }
- - (void)viewWillDisappear:(BOOL)animated {
- [super viewWillDisappear:animated];
- self.player.viewControllerDisappear = YES;
- }
- #pragma mark - PrivateMethods
- /// 初始化
- - (void)rq_setup {
- [self.view addSubview:self.containerView];
- [self setupPlayer];
- }
- - (UIImage*)videoImageWithvideoURL:(NSURL *)videoURL {
- NSString *cacheKeyStr = [[YYWebImageManager sharedManager] cacheKeyForURL:[NSURL URLWithString:videoURL.absoluteString]];
- UIImage *memoryImage = [[YYImageCache sharedCache] getImageForKey:cacheKeyStr];
- if (memoryImage) {
- return memoryImage;
- } else {
- UIImage *thumbnailImage = [self firstFrameWithVideoURL:videoURL size:CGSizeMake(RQ_SCREEN_WIDTH - 32.f, RQ_SCREEN_HEIGHT - RQ_APPLICATION_TOP_BAR_HEIGHT - RQ_APPLICATION_SAFEAREA_BOTTOM_HEIGHT)];
- dispatch_async(dispatch_get_main_queue(), ^{
- YYImageCache * cache = [YYImageCache sharedCache];
- [cache setImage:thumbnailImage forKey:videoURL.absoluteString];
- });
- return thumbnailImage;
- }
- }
- // 获取视频第一帧
- - (UIImage*)firstFrameWithVideoURL:(NSURL*)url size:(CGSize)size {
- NSDictionary *opts = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:AVURLAssetPreferPreciseDurationAndTimingKey];
- AVURLAsset *urlAsset = [AVURLAsset URLAssetWithURL:url options:opts];
- AVAssetImageGenerator *generator = [AVAssetImageGenerator assetImageGeneratorWithAsset:urlAsset];
- generator.appliesPreferredTrackTransform = YES;
- generator.maximumSize = CGSizeMake(size.width, size.height);
- NSError*error =nil;
- CGImageRef img = [generator copyCGImageAtTime:CMTimeMake(0, 10) actualTime:NULL error:&error];
- {
- return [UIImage imageWithCGImage:img];
- }
- return nil;
- }
- - (void)setupPlayer {
- ZFAVPlayerManager *playerManager = [[ZFAVPlayerManager alloc] init];
- // ZFIJKPlayerManager *playerManager = [[ZFIJKPlayerManager alloc] init];
- playerManager.shouldAutoPlay = YES;
-
- /// 播放器相关
- self.player = [ZFPlayerController playerWithPlayerManager:playerManager containerView:self.containerView];
- self.player.controlView = self.controlView;
- /// 设置退到后台继续播放
- self.player.pauseWhenAppResignActive = NO;
- // self.player.resumePlayRecord = YES;
-
- @weakify(self)
- self.player.orientationWillChange = ^(ZFPlayerController * _Nonnull player, BOOL isFullScreen) {
- RQ_APPDELEGATE.allowOrentitaionRotation = isFullScreen;
- };
-
- /// 播放完成
- self.player.playerDidToEnd = ^(id _Nonnull asset) {
- @strongify(self)
- [self.player stop];
- [RQ_APPDELEGATE.services popViewModelAnimated:YES];
- };
-
- self.player.assetURLs = @[[NSURL URLWithString:self.viewModel.explainModel.short_video_url],
- [NSURL URLWithString:self.viewModel.explainModel.short_video_url]];
- [self.player playTheNext];
- [self.controlView showTitle:self.viewModel.title coverImage:[self videoImageWithvideoURL:[NSURL URLWithString:self.viewModel.explainModel.short_video_url]] fullScreenMode:ZFFullScreenModeAutomatic];
- }
- #pragma mark - LazyLoad
- - (ZFPlayerControlView *)controlView {
- @weakify(self)
- if (!_controlView) {
- _controlView = [ZFPlayerControlView new];
- _controlView.fastViewAnimated = YES;
- _controlView.autoHiddenTimeInterval = 5;
- _controlView.autoFadeTimeInterval = 0.5;
- _controlView.prepareShowLoading = YES;
- _controlView.prepareShowControlView = NO;
- [_controlView.portraitControlView.backBtn setTapActionWithBlock:^(UITapGestureRecognizer *tap) {
- @strongify(self)
- [self.player stop];
- [RQ_APPDELEGATE.services popViewModelAnimated:YES];
- }];
- }
- return _controlView;
- }
- - (UIImageView *)containerView {
- if (!_containerView) {
- _containerView = [[UIImageView alloc] initWithFrame:CGRectMake(0, RQ_APPLICATION_STATUS_BAR_HEIGHT, RQ_SCREEN_WIDTH, RQ_SCREEN_HEIGHT - RQ_APPLICATION_STATUS_BAR_HEIGHT - RQ_APPLICATION_SAFEAREA_BOTTOM_HEIGHT)];
- }
- return _containerView;
- }
- @end
|