Skip to content

Commit

Permalink
1、Solve the problem of excessive memory
Browse files Browse the repository at this point in the history
  • Loading branch information
ianyanzhang committed Jul 22, 2023
1 parent c65ffce commit 2483318
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 125 deletions.
11 changes: 3 additions & 8 deletions Demo/TXLiteAVDemo/App/Main/MainViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
UIViewController *controller = [cellInfo createEntryController];
if (controller) {
if (![controller isKindOfClass:NSClassFromString(@"MoviePlayerViewController")]) {
[self _hideSuperPlayer];
[self hideSuperPlayer];
}
[self.navigationController pushViewController:controller animated:YES];
}
Expand All @@ -354,15 +354,10 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa
}

#if defined(ENABLE_PLAY) && !defined(DISABLE_VOD)
- (void)_hideSuperPlayer {
if (SuperPlayerWindowShared.isShowing) {
[SuperPlayerWindowShared hide];
[SuperPlayerWindowShared.superPlayer resetPlayer];
SuperPlayerWindowShared.backController = nil;
}
- (void)hideSuperPlayer {
}
#else
- (void)_hideSuperPlayer {
- (void)hideSuperPlayer {
}
#endif

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,17 +104,10 @@ @interface MoviePlayerViewController () <SuperPlayerDelegate, ScanQRDelegate, UI
@implementation MoviePlayerViewController

- (instancetype)init {
if (SuperPlayerWindowShared.backController) {
[SuperPlayerWindowShared hide];
MoviePlayerViewController *playerViewCtrl = (MoviePlayerViewController *)SuperPlayerWindowShared.backController;
playerViewCtrl.danmakuView.clipsToBounds = NO;
return playerViewCtrl;
} else {
if (self = [super init]) {
_manager = [AFHTTPSessionManager manager];
}
return self;
if (self = [super init]) {
_manager = [AFHTTPSessionManager manager];
}
return self;
}

- (void)addObservers {
Expand Down Expand Up @@ -159,21 +152,14 @@ - (void)dealloc {
- (void)willMoveToParentViewController:(nullable UIViewController *)parent {
}
- (void)didMoveToParentViewController:(nullable UIViewController *)parent {
if (parent == nil) {
if (!SuperPlayerWindowShared.isShowing) {
[self.playerView resetPlayer];
}
}
}

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:NO];
if (self.playerView.isFullScreen == NO ){///全屏幕的时候不要显示nav
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
imageView.image = [UIImage imageNamed:@"背景"];
[self.view insertSubview:imageView atIndex:0];
if (self.videoURL != nil ){
self.navigationItem.rightBarButtonItems = @[ self.navHelpBtn ];
} else {
Expand Down Expand Up @@ -211,7 +197,6 @@ - (void)viewWillAppear:(BOOL)animated {
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:YES animated:NO];

[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
}

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

- (void)viewDidLoad {
[super viewDidLoad];
// 背景色
self.view.backgroundColor = [UIColor whiteColor];
NSArray *colors = @[
(__bridge id)[UIColor colorWithRed:19.0 / 255.0 green:41.0 / 255.0 blue:75.0 / 255.0 alpha:1].CGColor,
(__bridge id)[UIColor colorWithRed:5.0 / 255.0 green:12.0 / 255.0 blue:23.0 / 255.0 alpha:1].CGColor
];
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.colors = colors;
gradientLayer.startPoint = CGPointMake(0, 0);
gradientLayer.endPoint = CGPointMake(1, 1);
gradientLayer.frame = self.view.bounds;
[self.view.layer insertSublayer:gradientLayer atIndex:0];

_authParamArray = [NSMutableArray new];
_vodDataSourceArray = [NSMutableArray new];
_liveDataSourceArray = [NSMutableArray new];
Expand Down Expand Up @@ -1041,15 +1039,11 @@ - (IBAction)backClick {
// 是竖屏时候响应关
if (orientation == UIInterfaceOrientationPortrait && (self.playerView.state == StatePlaying)) {
self.danmakuView.clipsToBounds = YES;
[SuperPlayerWindowShared setSuperPlayer:self.playerView];
[SuperPlayerWindowShared show];
SuperPlayerWindowShared.backController = self;
if (self.playerView.isCanShowVipTipView) {
[self.playerView showVipTipView];
}
} else {
[self.playerView resetPlayer]; //非常重要
SuperPlayerWindowShared.backController = nil;
}
[self.navigationController popViewControllerAnimated:YES];
}
Expand Down
1 change: 0 additions & 1 deletion Demo/TXLiteAVDemo/SuperPlayerKit/SuperPlayer/SuperPlayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
#import "SuperPlayerModel.h"
#import "SuperPlayerControlView.h"
#import "SuperPlayerControlViewDelegate.h"
#import "SuperPlayerWindow.h"
#import "SPDefaultControlView.h"
#import "SPWeiboControlView.h"
#import "SuperPlayerHelpers.h"
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@

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

// 小窗单例
#define SuperPlayerWindowShared [SuperPlayerWindow sharedInstance]



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

Expand Down
111 changes: 22 additions & 89 deletions Demo/TXLiteAVDemo/SuperPlayerKit/SuperPlayer/SuperPlayerView.m
Original file line number Diff line number Diff line change
Expand Up @@ -159,19 +159,6 @@ - (void)initializeThePlayer {

_playerConfig = [[SuperPlayerViewConfig alloc] init];

__weak __typeof(self) weakSelf = self;
SuperPlayerWindowShared.closeHandler = ^{
__strong __typeof(weakSelf) self = weakSelf;
if (!self) { return; }
if (self->_watermarkView) {
[self->_watermarkView releaseDynamicWater];
[self->_watermarkView removeFromSuperview];
self->_watermarkView = nil;
}
[SuperPlayerWindowShared hide];
[self resetPlayer];
SuperPlayerWindowShared.backController = nil;
};
// 添加通知
[self addNotifications];
// 添加手势
Expand Down Expand Up @@ -401,30 +388,20 @@ - (void)showVipTipView {

[self addSubview:self.vipTipView];

if (SuperPlayerWindowShared.isShowing) {
self.vipTipView.textFontSize = WINDOW_VIP_TIPVIEW_TEXT_FONT;
[self.vipTipView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self).offset(-WINDOW_VIP_TIPVIEW_BOTTOM);
make.left.equalTo(self).offset(WINDOW_VIP_TIPVIEW_LEFT);
make.right.equalTo(self);
make.height.mas_equalTo(VIP_TIPVIEW_DEFAULT_HEIGHT);
}];
} else {
[self.vipTipView mas_makeConstraints:^(MASConstraintMaker *make) {
if (self.isFullScreen) {
if (@available(iOS 11.0, *)) {
make.bottom.equalTo(self).offset(-VIP_TIPVIEW_DEFAULTX_BOTTOM);
} else {
make.bottom.equalTo(self).offset(-VIP_TIPVIEW_DEFAULT_BOTTOM);
}
[self.vipTipView mas_makeConstraints:^(MASConstraintMaker *make) {
if (self.isFullScreen) {
if (@available(iOS 11.0, *)) {
make.bottom.equalTo(self).offset(-VIP_TIPVIEW_DEFAULTX_BOTTOM);
} else {
make.bottom.equalTo(self).offset(-VIP_TIPVIEW_DEFAULT_BOTTOM);
}
make.left.equalTo(self).offset(VIP_TIPVIEW_DEFAULT_LEFT);
make.right.equalTo(self);
make.height.mas_equalTo(VIP_TIPVIEW_DEFAULT_HEIGHT);
}];
}
} else {
make.bottom.equalTo(self).offset(-VIP_TIPVIEW_DEFAULT_BOTTOM);
}
make.left.equalTo(self).offset(VIP_TIPVIEW_DEFAULT_LEFT);
make.right.equalTo(self);
make.height.mas_equalTo(VIP_TIPVIEW_DEFAULT_HEIGHT);
}];

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

self.vipWatchView.vipWatchModel = [self setCurrentVipModel];

if (SuperPlayerWindowShared.isShowing) {
self.vipWatchView.textFontSize = 10;
}

if (self.isFullScreen) {
self.vipWatchView.scale = self.vipWatchView.frame.size.width / ScreenWidth;
} else {
Expand Down Expand Up @@ -657,6 +630,7 @@ - (void)setVodPlayConfig {
[self.vodPlayer setStartTime:self.startTime];
self.startTime = 0;

[self.vodPlayer setupVideoWidget:self insertIndex:0];
[self.vodPlayer setRate:self.playerConfig.playRate];
[self.vodPlayer setMirror:self.playerConfig.mirror];
[self.vodPlayer setMute:self.playerConfig.mute];
Expand Down Expand Up @@ -702,14 +676,8 @@ - (void)setLivePlayerConfig {
- (void)preparePlayVideo {
[self.controlView setProgressTime:0 totalTime:_playerModel.duration progressValue:0 playableValue:0 / _playerModel.duration];
if (_playerModel.action == PLAY_ACTION_AUTO_PLAY) {
if (!SuperPlayerWindowShared.isShowing) {
[self.controlView setPlayState:YES];
[self.controlView setSliderState:YES];
} else {
if (self.controlView.enableFadeAction) {
[self.controlView fadeOut:0.2];
}
}
[self.controlView setPlayState:YES];
[self.controlView setSliderState:YES];
self.isPauseByUser = NO;
self.centerPlayBtn.hidden = YES;
} else if (_playerModel.action == PLAY_ACTION_PRELOAD) {
Expand Down Expand Up @@ -763,8 +731,15 @@ - (void)setCoverImage {
self.coverImageView.hidden = NO;
NSURL *customUrl = [NSURL URLWithString:_playerModel.customCoverImageUrl];
NSURL *defaultUrl = [NSURL URLWithString:_playerModel.defaultCoverImageUrl];
CGRect rect = CGRectMake(0, 0, 100, 100);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
UIColor *color = [UIColor colorWithRed:32/255 green:37/255 blue:48/255 alpha:1];
[color setFill];
UIRectFill(rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self.coverImageView sd_setImageWithURL:_playerModel.customCoverImageUrl.length > 0 ? customUrl : defaultUrl
placeholderImage:SuperPlayerImage(@"defaultCoverImage")
placeholderImage:image
options:SDWebImageAvoidDecodeImage];
}

Expand Down Expand Up @@ -1051,7 +1026,6 @@ - (void)fullScreenLayout {
*/
- (void)singleTapAction:(UIGestureRecognizer *)gesture {
if (gesture.state == UIGestureRecognizerStateRecognized) {
if (SuperPlayerWindowShared.isShowing) return;

if (self.delegate && [self.delegate respondsToSelector:@selector(singleTapClick)] && self.isFullScreen) {
[self.delegate singleTapClick];
Expand Down Expand Up @@ -1189,9 +1163,6 @@ - (void)rotateScreenIsFullScreen:(BOOL)isFullScreen {
if (self.didEnterBackground) {
return;
};
if (SuperPlayerWindowShared.isShowing) {
return;
}
UIViewController *vc = (UIViewController *)self.viewController;
if (vc == nil) {
return;
Expand Down Expand Up @@ -1225,24 +1196,6 @@ - (void)rotateScreenIsFullScreen:(BOOL)isFullScreen {
- (void)moviePlayDidEnd {
self.state = StateStopped;
self.playDidEnd = YES;
// 播放结束隐藏
if (SuperPlayerWindowShared.isShowing) {
if (!_isVideoList) { // 非轮播
if (_watermarkView) {
[_watermarkView releaseDynamicWater];
[_watermarkView removeFromSuperview];
_watermarkView = nil;
}
[SuperPlayerWindowShared hide];
[self resetPlayer];
SuperPlayerWindowShared.backController = nil;
} else { // 轮播,如果不是循环播放并且是列表的最后一个,则需要隐藏小窗口
if (!_isLoopPlayList && _playingIndex == _videoModelList.count - 1) {
[SuperPlayerWindowShared hide];
[self resetPlayer];
}
}
}
[self.controlView setPlayState:NO];
[self.controlView fadeOut:0.2];
[self fastViewUnavaliable];
Expand Down Expand Up @@ -1394,10 +1347,6 @@ - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if (self.isLockScreen) {
return NO;
}
if (SuperPlayerWindowShared.isShowing) {
return NO;
}

if (self.isFullScreen) {
return YES;
} else {
Expand Down Expand Up @@ -1628,8 +1577,6 @@ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceive
return NO;
}

if (SuperPlayerWindowShared.isShowing) return NO;

return YES;
}

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

if (EvtID == EVT_VIDEO_PLAY_BEGIN) {
[self setNeedsLayout];
[self layoutIfNeeded];
self.isLoaded = YES;
[self _removeOldPlayer];
[self.vodPlayer setupVideoWidget:self insertIndex:0];
[self layoutSubviews]; // 防止横屏状态下添加view显示不全

for (SPVideoFrameDescription *p in self.keyFrameDescList) {
if (player.duration > 0) p.where = p.time / duration;
}
Expand All @@ -2213,8 +2154,6 @@ - (void)onPlayEvent:(TXVodPlayer *)player event:(int)EvtID withParam:(NSDictiona
self.centerPlayBtn.hidden = YES;
self.repeatBtn.hidden = YES;
self.playDidEnd = NO;
self.controlView.hidden = SuperPlayerWindowShared.isShowing ? YES : NO;

// 不使用vodPlayer.autoPlay的原因是暂停的时候会黑屏,影响体验
[self prepareAutoplay];
}
Expand Down Expand Up @@ -2349,12 +2288,7 @@ - (void)onPlayEvent:(int)EvtID withParam:(NSDictionary *)param {

if (EvtID == PLAY_EVT_PLAY_BEGIN) {
if (!self.isLoaded) {
[self setNeedsLayout];
[self layoutIfNeeded];
self.isLoaded = YES;
[self _removeOldPlayer];
[self.livePlayer setupVideoWidget:CGRectZero containView:self insertIndex:0];
[self layoutSubviews]; // 防止横屏状态下添加view显示不全
self.state = StatePlaying;
[self.controlView setPlayState:YES];
if ([self.delegate respondsToSelector:@selector(superPlayerDidStart:)]) {
Expand Down Expand Up @@ -2758,7 +2692,6 @@ - (UIImageView *)coverImageView {
_coverImageView = [[UIImageView alloc] init];
_coverImageView.userInteractionEnabled = YES;
_coverImageView.clipsToBounds = YES;
_coverImageView.image = SuperPlayerImage(@"defaultCoverImage");
_coverImageView.contentMode = UIViewContentModeScaleAspectFill;
[self insertSubview:_coverImageView belowSubview:self.controlView];
[_coverImageView mas_makeConstraints:^(MASConstraintMaker *make) {
Expand Down

0 comments on commit 2483318

Please sign in to comment.