瀏覽代碼

发布作品分享弹窗强引用问题

Steven 11 月之前
父節點
當前提交
2052df3f76

+ 26 - 8
KulexiuForStudent/KulexiuForStudent/Common/MediaMerge/AudioMerge/KSMediaMergeView.m

@@ -179,8 +179,8 @@
     self.originalOffset = 0;
     [self.contrlView configWithOffsetTime:0];
     self.contrlView.hideBackView = NO;
-    [self configPlayer];
     [self configUI];
+    [self configPlayer];
 }
 
 - (void)configRemoteVideoUrl:(NSString *)remoteVideoUrl bgAudioUrl:(NSString *)remoteBgAudioUrl recordUrl:(NSString *)remoteRecrodUrl jsonConfig:(NSString *)jsonConfig callback:(DraftEditCallback)callback {
@@ -217,8 +217,8 @@
     [self downloadAudio];
     dispatch_group_notify(self.requestGroup, dispatch_get_main_queue(), ^{
         [LOADING_MANAGER removeCustomLoading];
-        [self configPlayer];
         [self configUI];
+        [self configPlayer];
     });
 }
 
@@ -376,8 +376,8 @@
         make.left.mas_equalTo(self.mas_left).offset(10);
         make.top.mas_equalTo(self.mas_top).offset(10);
     }];
-    float totalTime = [self.recordPlayer getTotalDuration];
-    [self.playControlView configWithDuration:totalTime];
+    
+    [self refreshTotalTime];
     
     UILabel *songLabel = [[UILabel alloc] init];
     songLabel.font = [UIFont systemFontOfSize:16.0f weight:UIFontWeightSemibold];
@@ -405,6 +405,11 @@
     // 缓冲完成后播放
 }
 
+- (void)refreshTotalTime {
+    float totalTime = [self.recordPlayer getTotalDuration];
+    [self.playControlView configWithDuration:totalTime];
+}
+
 - (void)backAction {
     if (self.hasModify) {
         MJWeakSelf;
@@ -959,12 +964,24 @@
 #pragma mark ----- player delegate
 
 - (void)videoPlayerIsReadyPlay:(AVPlayer *)player {
-    
+    if (self.bgPlayer.isReady && self.recordPlayer.isReady) {
+        [self startPlay];
+    }
 }
 
 - (void)playerIsReadyPlay:(kSNewPlayer *)player {
-    if (self.bgPlayer.isReady && self.recordPlayer.isReady) {
-        [self startPlay];
+    if (player == self.recordPlayer) {
+        [self refreshTotalTime];
+    }
+    if (self.isVideoPlay) {
+        if (self.bgPlayer.isReady && self.recordPlayer.isReady && self.videoView.isReady) {
+            [self startPlay];
+        }
+    }
+    else {
+        if (self.bgPlayer.isReady && self.recordPlayer.isReady) {
+            [self startPlay];
+        }
     }
 }
 
@@ -1196,8 +1213,9 @@
     }
     ShareFunctionView *shareView = [ShareFunctionView shareInstance];
     [shareView showShareView:self];
+    MJWeakSelf;
     [shareView shareOutCallback:^(MINESHARETYPE type) {
-        [self shareAction:type desc:desc productId:productId];
+        [weakSelf shareAction:type desc:desc productId:productId];
     }];
     
 }

+ 2 - 0
KulexiuForStudent/KulexiuForStudent/Common/MediaMerge/AudioMerge/VideoPlayerView/KSVideoPlayerView.h

@@ -28,6 +28,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface KSVideoPlayerView : UIView
 
+@property (nonatomic, assign) BOOL isReady; // 是否准备好播放
+
 @property(nonatomic,weak)id<KSVideoPlayerViewDelegate>delegate;
 
 

+ 20 - 10
KulexiuForStudent/KulexiuForStudent/Common/MediaMerge/AudioMerge/VideoPlayerView/KSVideoPlayerView.m

@@ -7,6 +7,8 @@
 
 #import "KSVideoPlayerView.h"
 #import <AVFoundation/AVFoundation.h>
+#import <CloudAccompanyLibrary/AVPlayer+KSSeekSmoothly.h>
+
 
 @interface KSVideoPlayerView ()
 
@@ -97,10 +99,11 @@
         [_videoPlayer pause];
     }
     _isPlaying = YES;
-    MJWeakSelf;
+    @weakObj(self);
     CMTime toleranceTime = kCMTimeZero;
-    [_videoPlayer seekToTime:kCMTimeZero toleranceBefore:toleranceTime toleranceAfter:toleranceTime completionHandler:^(BOOL finished) {
-        [weakSelf.videoPlayer play];
+    [_videoPlayer ss_seekToTime:kCMTimeZero toleranceBefore:toleranceTime toleranceAfter:toleranceTime completionHandler:^(BOOL finished) {
+        @strongObj(self);
+        [self.videoPlayer play];
     }];
 }
 
@@ -130,7 +133,7 @@
 
 - (void)seekToStart {
     CMTime toleranceTime = CMTimeMake(1, 1000);
-    [_videoPlayer seekToTime:kCMTimeZero toleranceBefore:toleranceTime toleranceAfter:toleranceTime completionHandler:^(BOOL finished) {
+    [_videoPlayer ss_seekToTime:kCMTimeZero toleranceBefore:toleranceTime toleranceAfter:toleranceTime completionHandler:^(BOOL finished) {
         
     }];
 }
@@ -141,20 +144,26 @@
         [_videoPlayer pause];
     }
     _isPlaying = YES;
-    MJWeakSelf;
+    
     CMTime offsetCTTime = CMTimeMake(labs(time), 1000);
     CMTime toleranceTime = CMTimeMake(1, 1000);
-    [_videoPlayer seekToTime:offsetCTTime toleranceBefore:toleranceTime toleranceAfter:toleranceTime completionHandler:^(BOOL finished) {
-        [weakSelf.videoPlayer play];
-
+    @weakObj(self);
+    [_videoPlayer ss_seekToTime:offsetCTTime toleranceBefore:toleranceTime toleranceAfter:toleranceTime completionHandler:^(BOOL finished) {
+        @strongObj(self);
+        [self.videoPlayer play];
     }];
 }
 
 - (void)seekOffsetTime:(NSInteger)offsetTime {
     CMTime newTime = CMTimeMake(offsetTime, 1000);
     CMTime toleranceTime = CMTimeMake(1, 1000);
-    [_videoPlayer seekToTime:newTime toleranceBefore:toleranceTime toleranceAfter:toleranceTime completionHandler:^(BOOL finished) {
-
+    [self.videoPlayer pause];
+    @weakObj(self);
+    [self.videoPlayer ss_seekToTime:newTime toleranceBefore:toleranceTime toleranceAfter:toleranceTime completionHandler:^(BOOL finished) {
+        @strongObj(self);
+        if (self.isPlaying) {
+            [self.videoPlayer play];
+        }
     }];
 }
 
@@ -240,6 +249,7 @@
             case AVPlayerStatusReadyToPlay:{
                 NSLog(@"准备完毕,可以播放");
                 dispatch_main_sync_safe(^{
+                    self.isReady = YES;
                     if (self.delegate && [self.delegate respondsToSelector:@selector(videoPlayerIsReadyPlay:)]) {
                         [self.delegate videoPlayerIsReadyPlay:self.videoPlayer];
                     }