You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

775 lines
27 KiB
Objective-C

#import "SuperPlayerControlView.h"
#import <AVFoundation/AVFoundation.h>
#import <MediaPlayer/MediaPlayer.h>
#import "SuperPlayerSettingsView.h"
#import "DataReport.h"
#import "SuperPlayerFastView.h"
#import "PlayerSlider.h"
#import "UIView+MMLayout.h"
#import "SuperPlayerView+Private.h"
#import "StrUtils.h"
#import "SPDefaultControlView.h"
#import "UIView+Fade.h"
#pragma clang diagnostic push
#pragma clang diagnostic ignored"-Wdeprecated-declarations"
#define MODEL_TAG_BEGIN 20
#define BOTTOM_IMAGE_VIEW_HEIGHT 50
@interface SPDefaultControlView () <UIGestureRecognizerDelegate, PlayerSliderDelegate>
@property BOOL isLive;
@end
@implementation SPDefaultControlView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self addSubview:self.topImageView];
[self addSubview:self.bottomImageView];
[self.bottomImageView addSubview:self.startBtn];
[self.bottomImageView addSubview:self.currentTimeLabel];
[self.bottomImageView addSubview:self.videoSlider];
[self.bottomImageView addSubview:self.resolutionBtn];
[self.bottomImageView addSubview:self.fullScreenBtn];
[self.bottomImageView addSubview:self.totalTimeLabel];
[self.topImageView addSubview:self.captureBtn];
[self.topImageView addSubview:self.danmakuBtn];
[self.topImageView addSubview:self.moreBtn];
[self addSubview:self.lockBtn];
[self.topImageView addSubview:self.backBtn];
[self addSubview:self.playeBtn];
[self.topImageView addSubview:self.titleLabel];
[self addSubview:self.backLiveBtn];
// 添加子控件的约束
[self makeSubViewsConstraints];
self.captureBtn.hidden = YES;
self.danmakuBtn.hidden = YES;
self.moreBtn.hidden = YES;
self.resolutionBtn.hidden = YES;
self.moreContentView.hidden = YES;
// 初始化时重置controlView
[self playerResetControlView];
}
return self;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)makeSubViewsConstraints {
[self.topImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.equalTo(self);
make.top.equalTo(self.mas_top).offset(0);
make.height.mas_equalTo(50);
}];
[self.backBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.topImageView.mas_leading).offset(5);
make.top.equalTo(self.topImageView.mas_top).offset(3);
make.width.height.mas_equalTo(40);
}];
[self.moreBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(40);
make.height.mas_equalTo(49);
make.trailing.equalTo(self.topImageView.mas_trailing).offset(-10);
make.centerY.equalTo(self.backBtn.mas_centerY);
}];
[self.captureBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(40);
make.height.mas_equalTo(49);
make.trailing.equalTo(self.moreBtn.mas_leading).offset(-10);
make.centerY.equalTo(self.backBtn.mas_centerY);
}];
[self.danmakuBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(40);
make.height.mas_equalTo(49);
make.trailing.equalTo(self.captureBtn.mas_leading).offset(-10);
make.centerY.equalTo(self.backBtn.mas_centerY);
}];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.backBtn.mas_trailing).offset(5);
make.centerY.equalTo(self.backBtn.mas_centerY);
make.trailing.equalTo(self.captureBtn.mas_leading).offset(-10);
}];
[self.bottomImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.bottom.mas_equalTo(0);
make.height.mas_equalTo(BOTTOM_IMAGE_VIEW_HEIGHT);
}];
[self.startBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.bottomImageView.mas_leading).offset(5);
make.top.equalTo(self.bottomImageView.mas_top).offset(10);
make.width.height.mas_equalTo(30);
}];
[self.currentTimeLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.startBtn.mas_trailing);
make.centerY.equalTo(self.startBtn.mas_centerY);
make.width.mas_equalTo(60);
}];
[self.fullScreenBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(30);
make.trailing.equalTo(self.bottomImageView.mas_trailing).offset(-8);
make.centerY.equalTo(self.startBtn.mas_centerY);
}];
[self.resolutionBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(30);
make.width.mas_greaterThanOrEqualTo(45);
make.trailing.equalTo(self.bottomImageView.mas_trailing).offset(-8);
make.centerY.equalTo(self.startBtn.mas_centerY);
}];
[self.totalTimeLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.trailing.equalTo(self.fullScreenBtn.mas_leading);
make.centerY.equalTo(self.startBtn.mas_centerY);
make.width.mas_equalTo(60);
}];
[self.videoSlider mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.currentTimeLabel.mas_trailing);
make.trailing.equalTo(self.totalTimeLabel.mas_leading);
make.centerY.equalTo(self.currentTimeLabel.mas_centerY).offset(-1);
}];
[self.lockBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.mas_leading).offset(15);
make.centerY.equalTo(self.mas_centerY);
make.width.height.mas_equalTo(32);
}];
[self.playeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(50);
make.center.equalTo(self);
}];
[self.backLiveBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(self.startBtn.mas_top).mas_offset(-15);
make.width.mas_equalTo(70);
make.centerX.equalTo(self);
}];
}
#pragma mark - Action
/**
* 点击切换分别率按钮
*/
- (void)changeResolution:(UIButton *)sender {
self.resoultionCurrentBtn.selected = NO;
self.resoultionCurrentBtn.backgroundColor = [UIColor clearColor];
self.resoultionCurrentBtn = sender;
self.resoultionCurrentBtn.selected = YES;
self.resoultionCurrentBtn.backgroundColor = RGBA(34, 30, 24, 1);
// topImageView上的按钮的文字
[self.resolutionBtn setTitle:sender.titleLabel.text forState:UIControlStateNormal];
[self.delegate controlViewSwitch:self withDefinition:sender.titleLabel.text];
}
- (void)backBtnClick:(UIButton *)sender {
if ([self.delegate respondsToSelector:@selector(controlViewBack:)]) {
[self.delegate controlViewBack:self];
}
}
- (void)exitFullScreen:(UIButton *)sender {
if ([self.delegate respondsToSelector:@selector(controlViewChangeScreen:withFullScreen:)]) {
[self.delegate controlViewChangeScreen:self withFullScreen:NO];
}
}
- (void)lockScrrenBtnClick:(UIButton *)sender {
sender.selected = !sender.selected;
self.isLockScreen = sender.selected;
self.topImageView.hidden = self.isLockScreen;
self.bottomImageView.hidden = self.isLockScreen;
if (self.isLive) {
self.backLiveBtn.hidden = self.isLockScreen;
}
[self.delegate controlViewLockScreen:self withLock:self.isLockScreen];
[self fadeOut:3];
}
- (void)playBtnClick:(UIButton *)sender {
sender.selected = !sender.selected;
if (sender.selected) {
[self.delegate controlViewPlay:self];
} else {
[self.delegate controlViewPause:self];
}
[self cancelFadeOut];
}
- (void)fullScreenBtnClick:(UIButton *)sender {
sender.selected = !sender.selected;
self.fullScreen = !self.fullScreen;
[self.delegate controlViewChangeScreen:self withFullScreen:YES];
[self fadeOut:3];
}
- (void)captureBtnClick:(UIButton *)sender {
[self.delegate controlViewSnapshot:self];
[self fadeOut:3];
}
- (void)danmakuBtnClick:(UIButton *)sender {
sender.selected = !sender.selected;
[self fadeOut:3];
}
- (void)moreBtnClick:(UIButton *)sender {
self.topImageView.hidden = YES;
self.bottomImageView.hidden = YES;
self.lockBtn.hidden = YES;
self.moreContentView.playerConfig = self.playerConfig;
[self.moreContentView update];
self.moreContentView.hidden = NO;
[self cancelFadeOut];
self.isShowSecondView = YES;
}
- (UIView *)resolutionView {
if (!_resolutionView) {
// 添加分辨率按钮和分辨率下拉列表
_resolutionView = [[UIView alloc] initWithFrame:CGRectZero];
_resolutionView.hidden = YES;
[self addSubview:_resolutionView];
[_resolutionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(330);
make.height.mas_equalTo(self.mas_height);
make.trailing.equalTo(self.mas_trailing).offset(0);
make.top.equalTo(self.mas_top).offset(0);
}];
_resolutionView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
}
return _resolutionView;
}
- (void)resolutionBtnClick:(UIButton *)sender {
self.topImageView.hidden = YES;
self.bottomImageView.hidden = YES;
self.lockBtn.hidden = YES;
// 显示隐藏分辨率View
self.resolutionView.hidden = NO;
[DataReport report:@"change_resolution" param:nil];
[self cancelFadeOut];
self.isShowSecondView = YES;
}
- (void)progressSliderTouchBegan:(UISlider *)sender {
self.isDragging = YES;
[self cancelFadeOut];
}
- (void)progressSliderValueChanged:(UISlider *)sender {
if (self.maxPlayableRatio > 0 && sender.value > self.maxPlayableRatio) {
sender.value = self.maxPlayableRatio;
}
[self.delegate controlViewPreview:self where:sender.value];
}
- (void)progressSliderTouchEnded:(UISlider *)sender {
[self.delegate controlViewSeek:self where:sender.value];
self.isDragging = NO;
[self fadeOut:5];
}
- (void)backLiveClick:(UIButton *)sender {
[self.delegate controlViewReload:self];
}
- (void)pointJumpClick:(UIButton *)sender {
self.pointJumpBtn.hidden = YES;
PlayerPoint *point = [self.videoSlider.pointArray objectAtIndex:self.pointJumpBtn.tag];
[self.delegate controlViewSeek:self where:point.where];
[self fadeOut:0.1];
}
- (void)setDisableBackBtn:(BOOL)disableBackBtn {
_disableBackBtn = disableBackBtn;
self.backBtn.hidden = disableBackBtn;
}
- (void)setDisableMoreBtn:(BOOL)disableMoreBtn {
_disableMoreBtn = disableMoreBtn;
if (self.fullScreen) {
self.moreBtn.hidden = disableMoreBtn;
}
}
- (void)setDisableCaptureBtn:(BOOL)disableCaptureBtn {
_disableCaptureBtn = disableCaptureBtn;
if (self.fullScreen) {
self.captureBtn.hidden = disableCaptureBtn;
}
}
- (void)setDisableDanmakuBtn:(BOOL)disableDanmakuBtn {
_disableDanmakuBtn = disableDanmakuBtn;
if (self.fullScreen) {
self.danmakuBtn.hidden = disableDanmakuBtn;
}
}
/**
* 屏幕方向发生变化会调用这里
*/
- (void)setOrientationLandscapeConstraint {
self.fullScreen = YES;
self.lockBtn.hidden = NO;
self.fullScreenBtn.selected = self.isLockScreen;
self.fullScreenBtn.hidden = YES;
self.resolutionBtn.hidden = self.resolutionArray.count == 0;
self.moreBtn.hidden = self.disableMoreBtn;
self.captureBtn.hidden = self.disableCaptureBtn;
self.danmakuBtn.hidden = self.disableDanmakuBtn;
[self.backBtn setImage:SuperPlayerImage(@"back_full") forState:UIControlStateNormal];
[self.totalTimeLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
if (self.resolutionArray.count > 0) {
make.trailing.equalTo(self.resolutionBtn.mas_leading);
} else {
make.trailing.equalTo(self.bottomImageView.mas_trailing);
}
make.centerY.equalTo(self.startBtn.mas_centerY);
make.width.mas_equalTo(self.isLive?10:60);
}];
[self.bottomImageView mas_updateConstraints:^(MASConstraintMaker *make) {
CGFloat b = self.superview.mm_safeAreaBottomGap;
make.height.mas_equalTo(BOTTOM_IMAGE_VIEW_HEIGHT+b);
}];
self.videoSlider.hiddenPoints = NO;
}
/**
* 设置竖屏的约束
*/
- (void)setOrientationPortraitConstraint {
self.fullScreen = NO;
self.lockBtn.hidden = YES;
self.fullScreenBtn.selected = NO;
self.fullScreenBtn.hidden = NO;
self.resolutionBtn.hidden = YES;
self.moreBtn.hidden = YES;
self.captureBtn.hidden = YES;
self.danmakuBtn.hidden = YES;
self.moreContentView.hidden = YES;
self.resolutionView.hidden = YES;
[self.totalTimeLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.trailing.equalTo(self.fullScreenBtn.mas_leading);
make.centerY.equalTo(self.startBtn.mas_centerY);
make.width.mas_equalTo(self.isLive?10:60);
}];
[self.bottomImageView mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(BOTTOM_IMAGE_VIEW_HEIGHT);
}];
self.videoSlider.hiddenPoints = YES;
self.pointJumpBtn.hidden = YES;
}
#pragma mark - Private Method
#pragma mark - setter
- (UILabel *)titleLabel {
if (!_titleLabel) {
_titleLabel = [[UILabel alloc] init];
_titleLabel.textColor = [UIColor whiteColor];
_titleLabel.font = [UIFont systemFontOfSize:15.0];
}
return _titleLabel;
}
- (UIButton *)backBtn {
if (!_backBtn) {
_backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[_backBtn setImage:SuperPlayerImage(@"back_full") forState:UIControlStateNormal];
[_backBtn addTarget:self action:@selector(backBtnClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _backBtn;
}
- (UIImageView *)topImageView {
if (!_topImageView) {
_topImageView = [[UIImageView alloc] init];
_topImageView.userInteractionEnabled = YES;
_topImageView.image = SuperPlayerImage(@"top_shadow");
}
return _topImageView;
}
- (UIImageView *)bottomImageView {
if (!_bottomImageView) {
_bottomImageView = [[UIImageView alloc] init];
_bottomImageView.userInteractionEnabled = YES;
_bottomImageView.image = SuperPlayerImage(@"bottom_shadow");
}
return _bottomImageView;
}
- (UIButton *)lockBtn {
if (!_lockBtn) {
_lockBtn = [UIButton buttonWithType:UIButtonTypeCustom];
_lockBtn.exclusiveTouch = YES;
[_lockBtn setImage:SuperPlayerImage(@"unlock-nor") forState:UIControlStateNormal];
[_lockBtn setImage:SuperPlayerImage(@"lock-nor") forState:UIControlStateSelected];
[_lockBtn addTarget:self action:@selector(lockScrrenBtnClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _lockBtn;
}
- (UIButton *)startBtn {
if (!_startBtn) {
_startBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[_startBtn setImage:SuperPlayerImage(@"play") forState:UIControlStateNormal];
[_startBtn setImage:SuperPlayerImage(@"pause") forState:UIControlStateSelected];
[_startBtn addTarget:self action:@selector(playBtnClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _startBtn;
}
- (UILabel *)currentTimeLabel {
if (!_currentTimeLabel) {
_currentTimeLabel = [[UILabel alloc] init];
_currentTimeLabel.textColor = [UIColor whiteColor];
_currentTimeLabel.font = [UIFont systemFontOfSize:12.0f];
_currentTimeLabel.textAlignment = NSTextAlignmentCenter;
}
return _currentTimeLabel;
}
- (PlayerSlider *)videoSlider {
if (!_videoSlider) {
_videoSlider = [[PlayerSlider alloc] init];
[_videoSlider setThumbImage:SuperPlayerImage(@"slider_thumb") forState:UIControlStateNormal];
_videoSlider.minimumTrackTintColor = TintColor;
// slider开始滑动事件
[_videoSlider addTarget:self action:@selector(progressSliderTouchBegan:) forControlEvents:UIControlEventTouchDown];
// slider滑动中事件
[_videoSlider addTarget:self action:@selector(progressSliderValueChanged:) forControlEvents:UIControlEventValueChanged];
// slider结束滑动事件
[_videoSlider addTarget:self action:@selector(progressSliderTouchEnded:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside];
_videoSlider.delegate = self;
}
return _videoSlider;
}
- (UILabel *)totalTimeLabel {
if (!_totalTimeLabel) {
_totalTimeLabel = [[UILabel alloc] init];
_totalTimeLabel.textColor = [UIColor whiteColor];
_totalTimeLabel.font = [UIFont systemFontOfSize:12.0f];
_totalTimeLabel.textAlignment = NSTextAlignmentCenter;
}
return _totalTimeLabel;
}
- (UIButton *)fullScreenBtn {
if (!_fullScreenBtn) {
_fullScreenBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[_fullScreenBtn setImage:SuperPlayerImage(@"fullscreen") forState:UIControlStateNormal];
[_fullScreenBtn addTarget:self action:@selector(fullScreenBtnClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _fullScreenBtn;
}
- (UIButton *)captureBtn {
if (!_captureBtn) {
_captureBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[_captureBtn setImage:SuperPlayerImage(@"capture") forState:UIControlStateNormal];
[_captureBtn setImage:SuperPlayerImage(@"capture_pressed") forState:UIControlStateSelected];
[_captureBtn addTarget:self action:@selector(captureBtnClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _captureBtn;
}
- (UIButton *)danmakuBtn {
if (!_danmakuBtn) {
_danmakuBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[_danmakuBtn setImage:SuperPlayerImage(@"danmu") forState:UIControlStateNormal];
[_danmakuBtn setImage:SuperPlayerImage(@"danmu_pressed") forState:UIControlStateSelected];
[_danmakuBtn addTarget:self action:@selector(danmakuBtnClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _danmakuBtn;
}
- (UIButton *)moreBtn {
if (!_moreBtn) {
_moreBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[_moreBtn setImage:SuperPlayerImage(@"more") forState:UIControlStateNormal];
[_moreBtn setImage:SuperPlayerImage(@"more_pressed") forState:UIControlStateSelected];
[_moreBtn addTarget:self action:@selector(moreBtnClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _moreBtn;
}
- (UIButton *)resolutionBtn {
if (!_resolutionBtn) {
_resolutionBtn = [UIButton buttonWithType:UIButtonTypeCustom];
_resolutionBtn.titleLabel.font = [UIFont systemFontOfSize:12];
_resolutionBtn.backgroundColor = [UIColor clearColor];
[_resolutionBtn addTarget:self action:@selector(resolutionBtnClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _resolutionBtn;
}
- (UIButton *)backLiveBtn {
if (!_backLiveBtn) {
_backLiveBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[_backLiveBtn setTitle:@"返回直播" forState:UIControlStateNormal];
_backLiveBtn.titleLabel.font = [UIFont systemFontOfSize:14];
UIImage *image = SuperPlayerImage(@"qg_online_bg");
UIImage *resizableImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(33 * 0.5, 33 * 0.5, 33 * 0.5, 33 * 0.5)];
[_backLiveBtn setBackgroundImage:resizableImage forState:UIControlStateNormal];
[_backLiveBtn addTarget:self action:@selector(backLiveClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _backLiveBtn;
}
- (UIButton *)pointJumpBtn {
if (!_pointJumpBtn) {
_pointJumpBtn = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *image = SuperPlayerImage(@"copywright_bg");
UIImage *resizableImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20, 0, 20) resizingMode:UIImageResizingModeStretch];
[_pointJumpBtn setBackgroundImage:resizableImage forState:UIControlStateNormal];
_pointJumpBtn.titleLabel.font = [UIFont systemFontOfSize:14];
[_pointJumpBtn addTarget:self action:@selector(pointJumpClick:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:_pointJumpBtn];
}
return _pointJumpBtn;
}
- (SuperPlayerSettingsView *)moreContentView {
if (!_moreContentView) {
_moreContentView = [[SuperPlayerSettingsView alloc] initWithFrame:CGRectZero];
_moreContentView.controlView = self;
_moreContentView.hidden = YES;
[self addSubview:_moreContentView];
[_moreContentView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(330);
make.height.mas_equalTo(self.mas_height);
make.trailing.equalTo(self.mas_trailing).offset(0);
make.top.equalTo(self.mas_top).offset(0);
}];
_moreContentView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
}
return _moreContentView;
}
#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UISlider class]]) { // 如果在滑块上点击就不响应pan手势
return NO;
}
return YES;
}
#pragma mark - Public method
- (void)setHidden:(BOOL)hidden
{
[super setHidden:hidden];
if (hidden) {
self.resolutionView.hidden = YES;
self.moreContentView.hidden = YES;
if (!self.isLockScreen) {
self.topImageView.hidden = NO;
self.bottomImageView.hidden = NO;
}
}
self.lockBtn.hidden = !self.isFullScreen;
self.isShowSecondView = NO;
self.pointJumpBtn.hidden = YES;
}
/** 重置ControlView */
- (void)playerResetControlView {
self.videoSlider.value = 0;
self.videoSlider.progressView.progress = 0;
self.currentTimeLabel.text = @"00:00";
self.totalTimeLabel.text = @"00:00";
self.playeBtn.hidden = YES;
self.resolutionView.hidden = YES;
self.backgroundColor = [UIColor clearColor];
self.moreBtn.enabled = !self.disableMoreBtn;
self.lockBtn.hidden = !self.isFullScreen;
self.danmakuBtn.enabled = YES;
self.captureBtn.enabled = YES;
self.backLiveBtn.hidden = YES;
}
- (void)setPointArray:(NSArray *)pointArray
{
[super setPointArray:pointArray];
for (PlayerPoint *holder in self.videoSlider.pointArray) {
[holder.holder removeFromSuperview];
}
[self.videoSlider.pointArray removeAllObjects];
for (SPVideoFrameDescription *p in pointArray) {
PlayerPoint *point = [self.videoSlider addPoint:p.where];
point.content = p.text;
point.timeOffset = p.time;
}
}
- (void)onPlayerPointSelected:(PlayerPoint *)point {
NSString *text = [NSString stringWithFormat:@" %@ %@ ", [StrUtils timeFormat:point.timeOffset],
point.content];
[self.pointJumpBtn setTitle:text forState:UIControlStateNormal];
[self.pointJumpBtn sizeToFit];
CGFloat x = self.videoSlider.mm_x + self.videoSlider.mm_w * point.where - self.pointJumpBtn.mm_h/2;
if (x < 0)
x = 0;
if (x + self.pointJumpBtn.mm_h/2 > ScreenWidth)
x = ScreenWidth - self.pointJumpBtn.mm_h/2;
self.pointJumpBtn.tag = [self.videoSlider.pointArray indexOfObject:point];
self.pointJumpBtn.m_left(x).m_bottom(60);
self.pointJumpBtn.hidden = NO;
[DataReport report:@"player_point" param:nil];
}
- (void)setProgressTime:(NSInteger)currentTime
totalTime:(NSInteger)totalTime
progressValue:(CGFloat)progress
playableValue:(CGFloat)playable {
if (!self.isDragging) {
// 更新slider
self.videoSlider.value = progress;
}
// 更新当前播放时间
self.currentTimeLabel.text = [StrUtils timeFormat:currentTime];
// 更新总时间
self.totalTimeLabel.text = [StrUtils timeFormat:totalTime];
[self.videoSlider.progressView setProgress:playable animated:NO];
}
- (void)resetWithResolutionNames:(NSArray<NSString *> *)resolutionNames
currentResolutionIndex:(NSUInteger)currentResolutionIndex
isLive:(BOOL)isLive
isTimeShifting:(BOOL)isTimeShifting
isPlaying:(BOOL)isPlaying
{
NSAssert(resolutionNames.count == 0 || currentResolutionIndex < resolutionNames.count,
@"Invalid argument when reseeting %@", NSStringFromClass(self.class));
[self setPlayState:isPlaying];
self.backLiveBtn.hidden = !isTimeShifting;
self.moreContentView.enableSpeedAndMirrorControl = !isLive;
for (UIView *subview in self.resolutionView.subviews)
[subview removeFromSuperview];
_resolutionArray = resolutionNames;
if (_resolutionArray.count > 0) {
[self.resolutionBtn setTitle:resolutionNames[currentResolutionIndex]
forState:UIControlStateNormal];
}
UILabel *lable = [UILabel new];
lable.text = @"清晰度";
lable.textAlignment = NSTextAlignmentCenter;
lable.textColor = [UIColor whiteColor];
[self.resolutionView addSubview:lable];
[lable mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.equalTo(self.resolutionView.mas_width);
make.height.mas_equalTo(30);
make.left.equalTo(self.resolutionView.mas_left);
make.top.equalTo(self.resolutionView.mas_top).mas_offset(20);
}];
// 分辨率View上边的Btn
for (NSInteger i = 0 ; i < _resolutionArray.count; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setTitle:_resolutionArray[i] forState:UIControlStateNormal];
[btn setTitleColor:RGBA(252, 89, 81, 1) forState:UIControlStateSelected];
[self.resolutionView addSubview:btn];
[btn addTarget:self action:@selector(changeResolution:) forControlEvents:UIControlEventTouchUpInside];
[btn mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.equalTo(self.resolutionView.mas_width);
make.height.mas_equalTo(45);
make.left.equalTo(self.resolutionView.mas_left);
make.centerY.equalTo(self.resolutionView.mas_centerY).offset((i-self.resolutionArray.count/2.0+0.5)*45);
}];
btn.tag = MODEL_TAG_BEGIN+i;
if (i == currentResolutionIndex) {
btn.selected = YES;
btn.backgroundColor = RGBA(34, 30, 24, 1);
self.resoultionCurrentBtn = btn;
}
}
if (self.isLive != isLive) {
self.isLive = isLive;
[self setNeedsLayout];
}
// 时移的时候不能切清晰度
self.resolutionBtn.userInteractionEnabled = !isTimeShifting;
}
/** 播放按钮状态 */
- (void)setPlayState:(BOOL)state {
self.startBtn.selected = state;
}
- (void)setTitle:(NSString *)title
{
[super setTitle:title];
self.titleLabel.text = title;
}
- (void)hideDanmu {
[self setDisableDanmakuBtn:YES];
}
- (void)hideReplay {
[self.repeatBtn setHidden:YES];
}
#pragma clang diagnostic pop
@end