Skip to content

Commit 2483318

Browse files
author
ianyanzhang
committed
1、Solve the problem of excessive memory
1 parent c65ffce commit 2483318

File tree

5 files changed

+46
-125
lines changed

5 files changed

+46
-125
lines changed

Demo/TXLiteAVDemo/App/Main/MainViewController.m

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
336336
UIViewController *controller = [cellInfo createEntryController];
337337
if (controller) {
338338
if (![controller isKindOfClass:NSClassFromString(@"MoviePlayerViewController")]) {
339-
[self _hideSuperPlayer];
339+
[self hideSuperPlayer];
340340
}
341341
[self.navigationController pushViewController:controller animated:YES];
342342
}
@@ -354,15 +354,10 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa
354354
}
355355

356356
#if defined(ENABLE_PLAY) && !defined(DISABLE_VOD)
357-
- (void)_hideSuperPlayer {
358-
if (SuperPlayerWindowShared.isShowing) {
359-
[SuperPlayerWindowShared hide];
360-
[SuperPlayerWindowShared.superPlayer resetPlayer];
361-
SuperPlayerWindowShared.backController = nil;
362-
}
357+
- (void)hideSuperPlayer {
363358
}
364359
#else
365-
- (void)_hideSuperPlayer {
360+
- (void)hideSuperPlayer {
366361
}
367362
#endif
368363

Demo/TXLiteAVDemo/SuperPlayerDemo/SuperPlayer/MoviePlayerViewController.m

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -104,17 +104,10 @@ @interface MoviePlayerViewController () <SuperPlayerDelegate, ScanQRDelegate, UI
104104
@implementation MoviePlayerViewController
105105

106106
- (instancetype)init {
107-
if (SuperPlayerWindowShared.backController) {
108-
[SuperPlayerWindowShared hide];
109-
MoviePlayerViewController *playerViewCtrl = (MoviePlayerViewController *)SuperPlayerWindowShared.backController;
110-
playerViewCtrl.danmakuView.clipsToBounds = NO;
111-
return playerViewCtrl;
112-
} else {
113-
if (self = [super init]) {
114-
_manager = [AFHTTPSessionManager manager];
115-
}
116-
return self;
107+
if (self = [super init]) {
108+
_manager = [AFHTTPSessionManager manager];
117109
}
110+
return self;
118111
}
119112

120113
- (void)addObservers {
@@ -159,21 +152,14 @@ - (void)dealloc {
159152
- (void)willMoveToParentViewController:(nullable UIViewController *)parent {
160153
}
161154
- (void)didMoveToParentViewController:(nullable UIViewController *)parent {
162-
if (parent == nil) {
163-
if (!SuperPlayerWindowShared.isShowing) {
164-
[self.playerView resetPlayer];
165-
}
166-
}
167155
}
168156

169157
- (void)viewWillAppear:(BOOL)animated {
170158
[super viewWillAppear:animated];
171-
[self.navigationController setNavigationBarHidden:NO animated:NO];
159+
if (self.playerView.isFullScreen == NO ){///全屏幕的时候不要显示nav
160+
[self.navigationController setNavigationBarHidden:NO animated:NO];
161+
}
172162
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
173-
174-
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
175-
imageView.image = [UIImage imageNamed:@"背景"];
176-
[self.view insertSubview:imageView atIndex:0];
177163
if (self.videoURL != nil ){
178164
self.navigationItem.rightBarButtonItems = @[ self.navHelpBtn ];
179165
} else {
@@ -211,7 +197,6 @@ - (void)viewWillAppear:(BOOL)animated {
211197
- (void)viewWillDisappear:(BOOL)animated {
212198
[super viewWillDisappear:animated];
213199
[self.navigationController setNavigationBarHidden:YES animated:NO];
214-
215200
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
216201
}
217202

@@ -236,6 +221,19 @@ - (void)viewDidLayoutSubviews {
236221

237222
- (void)viewDidLoad {
238223
[super viewDidLoad];
224+
// 背景色
225+
self.view.backgroundColor = [UIColor whiteColor];
226+
NSArray *colors = @[
227+
(__bridge id)[UIColor colorWithRed:19.0 / 255.0 green:41.0 / 255.0 blue:75.0 / 255.0 alpha:1].CGColor,
228+
(__bridge id)[UIColor colorWithRed:5.0 / 255.0 green:12.0 / 255.0 blue:23.0 / 255.0 alpha:1].CGColor
229+
];
230+
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
231+
gradientLayer.colors = colors;
232+
gradientLayer.startPoint = CGPointMake(0, 0);
233+
gradientLayer.endPoint = CGPointMake(1, 1);
234+
gradientLayer.frame = self.view.bounds;
235+
[self.view.layer insertSublayer:gradientLayer atIndex:0];
236+
239237
_authParamArray = [NSMutableArray new];
240238
_vodDataSourceArray = [NSMutableArray new];
241239
_liveDataSourceArray = [NSMutableArray new];
@@ -1041,15 +1039,11 @@ - (IBAction)backClick {
10411039
// 是竖屏时候响应关
10421040
if (orientation == UIInterfaceOrientationPortrait && (self.playerView.state == StatePlaying)) {
10431041
self.danmakuView.clipsToBounds = YES;
1044-
[SuperPlayerWindowShared setSuperPlayer:self.playerView];
1045-
[SuperPlayerWindowShared show];
1046-
SuperPlayerWindowShared.backController = self;
10471042
if (self.playerView.isCanShowVipTipView) {
10481043
[self.playerView showVipTipView];
10491044
}
10501045
} else {
10511046
[self.playerView resetPlayer]; //非常重要
1052-
SuperPlayerWindowShared.backController = nil;
10531047
}
10541048
[self.navigationController popViewControllerAnimated:YES];
10551049
}

Demo/TXLiteAVDemo/SuperPlayerKit/SuperPlayer/SuperPlayer.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#import "SuperPlayerModel.h"
33
#import "SuperPlayerControlView.h"
44
#import "SuperPlayerControlViewDelegate.h"
5-
#import "SuperPlayerWindow.h"
65
#import "SPDefaultControlView.h"
76
#import "SPWeiboControlView.h"
87
#import "SuperPlayerHelpers.h"

Demo/TXLiteAVDemo/SuperPlayerKit/SuperPlayer/SuperPlayerHelpers.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121

2222
#define IsIPhoneX (ScreenHeight >= 812 || ScreenWidth >= 812)
2323

24-
// 小窗单例
25-
#define SuperPlayerWindowShared [SuperPlayerWindow sharedInstance]
24+
25+
2626

2727
#define TintColor RGBA(252, 89, 81, 1)
2828

Demo/TXLiteAVDemo/SuperPlayerKit/SuperPlayer/SuperPlayerView.m

Lines changed: 22 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -159,19 +159,6 @@ - (void)initializeThePlayer {
159159

160160
_playerConfig = [[SuperPlayerViewConfig alloc] init];
161161

162-
__weak __typeof(self) weakSelf = self;
163-
SuperPlayerWindowShared.closeHandler = ^{
164-
__strong __typeof(weakSelf) self = weakSelf;
165-
if (!self) { return; }
166-
if (self->_watermarkView) {
167-
[self->_watermarkView releaseDynamicWater];
168-
[self->_watermarkView removeFromSuperview];
169-
self->_watermarkView = nil;
170-
}
171-
[SuperPlayerWindowShared hide];
172-
[self resetPlayer];
173-
SuperPlayerWindowShared.backController = nil;
174-
};
175162
// 添加通知
176163
[self addNotifications];
177164
// 添加手势
@@ -401,30 +388,20 @@ - (void)showVipTipView {
401388

402389
[self addSubview:self.vipTipView];
403390

404-
if (SuperPlayerWindowShared.isShowing) {
405-
self.vipTipView.textFontSize = WINDOW_VIP_TIPVIEW_TEXT_FONT;
406-
[self.vipTipView mas_makeConstraints:^(MASConstraintMaker *make) {
407-
make.bottom.equalTo(self).offset(-WINDOW_VIP_TIPVIEW_BOTTOM);
408-
make.left.equalTo(self).offset(WINDOW_VIP_TIPVIEW_LEFT);
409-
make.right.equalTo(self);
410-
make.height.mas_equalTo(VIP_TIPVIEW_DEFAULT_HEIGHT);
411-
}];
412-
} else {
413-
[self.vipTipView mas_makeConstraints:^(MASConstraintMaker *make) {
414-
if (self.isFullScreen) {
415-
if (@available(iOS 11.0, *)) {
416-
make.bottom.equalTo(self).offset(-VIP_TIPVIEW_DEFAULTX_BOTTOM);
417-
} else {
418-
make.bottom.equalTo(self).offset(-VIP_TIPVIEW_DEFAULT_BOTTOM);
419-
}
391+
[self.vipTipView mas_makeConstraints:^(MASConstraintMaker *make) {
392+
if (self.isFullScreen) {
393+
if (@available(iOS 11.0, *)) {
394+
make.bottom.equalTo(self).offset(-VIP_TIPVIEW_DEFAULTX_BOTTOM);
420395
} else {
421396
make.bottom.equalTo(self).offset(-VIP_TIPVIEW_DEFAULT_BOTTOM);
422397
}
423-
make.left.equalTo(self).offset(VIP_TIPVIEW_DEFAULT_LEFT);
424-
make.right.equalTo(self);
425-
make.height.mas_equalTo(VIP_TIPVIEW_DEFAULT_HEIGHT);
426-
}];
427-
}
398+
} else {
399+
make.bottom.equalTo(self).offset(-VIP_TIPVIEW_DEFAULT_BOTTOM);
400+
}
401+
make.left.equalTo(self).offset(VIP_TIPVIEW_DEFAULT_LEFT);
402+
make.right.equalTo(self);
403+
make.height.mas_equalTo(VIP_TIPVIEW_DEFAULT_HEIGHT);
404+
}];
428405

429406
[self.vipTipView setVipWatchModel:[self setCurrentVipModel]];
430407
isShowVipTipView = YES;
@@ -459,10 +436,6 @@ - (void)showVipWatchView {
459436

460437
self.vipWatchView.vipWatchModel = [self setCurrentVipModel];
461438

462-
if (SuperPlayerWindowShared.isShowing) {
463-
self.vipWatchView.textFontSize = 10;
464-
}
465-
466439
if (self.isFullScreen) {
467440
self.vipWatchView.scale = self.vipWatchView.frame.size.width / ScreenWidth;
468441
} else {
@@ -657,6 +630,7 @@ - (void)setVodPlayConfig {
657630
[self.vodPlayer setStartTime:self.startTime];
658631
self.startTime = 0;
659632

633+
[self.vodPlayer setupVideoWidget:self insertIndex:0];
660634
[self.vodPlayer setRate:self.playerConfig.playRate];
661635
[self.vodPlayer setMirror:self.playerConfig.mirror];
662636
[self.vodPlayer setMute:self.playerConfig.mute];
@@ -702,14 +676,8 @@ - (void)setLivePlayerConfig {
702676
- (void)preparePlayVideo {
703677
[self.controlView setProgressTime:0 totalTime:_playerModel.duration progressValue:0 playableValue:0 / _playerModel.duration];
704678
if (_playerModel.action == PLAY_ACTION_AUTO_PLAY) {
705-
if (!SuperPlayerWindowShared.isShowing) {
706-
[self.controlView setPlayState:YES];
707-
[self.controlView setSliderState:YES];
708-
} else {
709-
if (self.controlView.enableFadeAction) {
710-
[self.controlView fadeOut:0.2];
711-
}
712-
}
679+
[self.controlView setPlayState:YES];
680+
[self.controlView setSliderState:YES];
713681
self.isPauseByUser = NO;
714682
self.centerPlayBtn.hidden = YES;
715683
} else if (_playerModel.action == PLAY_ACTION_PRELOAD) {
@@ -763,8 +731,15 @@ - (void)setCoverImage {
763731
self.coverImageView.hidden = NO;
764732
NSURL *customUrl = [NSURL URLWithString:_playerModel.customCoverImageUrl];
765733
NSURL *defaultUrl = [NSURL URLWithString:_playerModel.defaultCoverImageUrl];
734+
CGRect rect = CGRectMake(0, 0, 100, 100);
735+
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
736+
UIColor *color = [UIColor colorWithRed:32/255 green:37/255 blue:48/255 alpha:1];
737+
[color setFill];
738+
UIRectFill(rect);
739+
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
740+
UIGraphicsEndImageContext();
766741
[self.coverImageView sd_setImageWithURL:_playerModel.customCoverImageUrl.length > 0 ? customUrl : defaultUrl
767-
placeholderImage:SuperPlayerImage(@"defaultCoverImage")
742+
placeholderImage:image
768743
options:SDWebImageAvoidDecodeImage];
769744
}
770745

@@ -1051,7 +1026,6 @@ - (void)fullScreenLayout {
10511026
*/
10521027
- (void)singleTapAction:(UIGestureRecognizer *)gesture {
10531028
if (gesture.state == UIGestureRecognizerStateRecognized) {
1054-
if (SuperPlayerWindowShared.isShowing) return;
10551029

10561030
if (self.delegate && [self.delegate respondsToSelector:@selector(singleTapClick)] && self.isFullScreen) {
10571031
[self.delegate singleTapClick];
@@ -1189,9 +1163,6 @@ - (void)rotateScreenIsFullScreen:(BOOL)isFullScreen {
11891163
if (self.didEnterBackground) {
11901164
return;
11911165
};
1192-
if (SuperPlayerWindowShared.isShowing) {
1193-
return;
1194-
}
11951166
UIViewController *vc = (UIViewController *)self.viewController;
11961167
if (vc == nil) {
11971168
return;
@@ -1225,24 +1196,6 @@ - (void)rotateScreenIsFullScreen:(BOOL)isFullScreen {
12251196
- (void)moviePlayDidEnd {
12261197
self.state = StateStopped;
12271198
self.playDidEnd = YES;
1228-
// 播放结束隐藏
1229-
if (SuperPlayerWindowShared.isShowing) {
1230-
if (!_isVideoList) { // 非轮播
1231-
if (_watermarkView) {
1232-
[_watermarkView releaseDynamicWater];
1233-
[_watermarkView removeFromSuperview];
1234-
_watermarkView = nil;
1235-
}
1236-
[SuperPlayerWindowShared hide];
1237-
[self resetPlayer];
1238-
SuperPlayerWindowShared.backController = nil;
1239-
} else { // 轮播,如果不是循环播放并且是列表的最后一个,则需要隐藏小窗口
1240-
if (!_isLoopPlayList && _playingIndex == _videoModelList.count - 1) {
1241-
[SuperPlayerWindowShared hide];
1242-
[self resetPlayer];
1243-
}
1244-
}
1245-
}
12461199
[self.controlView setPlayState:NO];
12471200
[self.controlView fadeOut:0.2];
12481201
[self fastViewUnavaliable];
@@ -1394,10 +1347,6 @@ - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
13941347
if (self.isLockScreen) {
13951348
return NO;
13961349
}
1397-
if (SuperPlayerWindowShared.isShowing) {
1398-
return NO;
1399-
}
1400-
14011350
if (self.isFullScreen) {
14021351
return YES;
14031352
} else {
@@ -1628,8 +1577,6 @@ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceive
16281577
return NO;
16291578
}
16301579

1631-
if (SuperPlayerWindowShared.isShowing) return NO;
1632-
16331580
return YES;
16341581
}
16351582

@@ -2197,13 +2144,7 @@ - (void)onPlayEvent:(TXVodPlayer *)player event:(int)EvtID withParam:(NSDictiona
21972144
}
21982145

21992146
if (EvtID == EVT_VIDEO_PLAY_BEGIN) {
2200-
[self setNeedsLayout];
2201-
[self layoutIfNeeded];
22022147
self.isLoaded = YES;
2203-
[self _removeOldPlayer];
2204-
[self.vodPlayer setupVideoWidget:self insertIndex:0];
2205-
[self layoutSubviews]; // 防止横屏状态下添加view显示不全
2206-
22072148
for (SPVideoFrameDescription *p in self.keyFrameDescList) {
22082149
if (player.duration > 0) p.where = p.time / duration;
22092150
}
@@ -2213,8 +2154,6 @@ - (void)onPlayEvent:(TXVodPlayer *)player event:(int)EvtID withParam:(NSDictiona
22132154
self.centerPlayBtn.hidden = YES;
22142155
self.repeatBtn.hidden = YES;
22152156
self.playDidEnd = NO;
2216-
self.controlView.hidden = SuperPlayerWindowShared.isShowing ? YES : NO;
2217-
22182157
// 不使用vodPlayer.autoPlay的原因是暂停的时候会黑屏,影响体验
22192158
[self prepareAutoplay];
22202159
}
@@ -2349,12 +2288,7 @@ - (void)onPlayEvent:(int)EvtID withParam:(NSDictionary *)param {
23492288

23502289
if (EvtID == PLAY_EVT_PLAY_BEGIN) {
23512290
if (!self.isLoaded) {
2352-
[self setNeedsLayout];
2353-
[self layoutIfNeeded];
23542291
self.isLoaded = YES;
2355-
[self _removeOldPlayer];
2356-
[self.livePlayer setupVideoWidget:CGRectZero containView:self insertIndex:0];
2357-
[self layoutSubviews]; // 防止横屏状态下添加view显示不全
23582292
self.state = StatePlaying;
23592293
[self.controlView setPlayState:YES];
23602294
if ([self.delegate respondsToSelector:@selector(superPlayerDidStart:)]) {
@@ -2758,7 +2692,6 @@ - (UIImageView *)coverImageView {
27582692
_coverImageView = [[UIImageView alloc] init];
27592693
_coverImageView.userInteractionEnabled = YES;
27602694
_coverImageView.clipsToBounds = YES;
2761-
_coverImageView.image = SuperPlayerImage(@"defaultCoverImage");
27622695
_coverImageView.contentMode = UIViewContentModeScaleAspectFill;
27632696
[self insertSubview:_coverImageView belowSubview:self.controlView];
27642697
[_coverImageView mas_makeConstraints:^(MASConstraintMaker *make) {

0 commit comments

Comments
 (0)