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.

385 lines
13 KiB
Objective-C

//
// SuperPlayerSettingsView.m
// TXLiteAVDemo
//
// Created by annidyfeng on 2018/7/4.
// Copyright © 2018年 Tencent. All rights reserved.
//
#import "SuperPlayerSettingsView.h"
#import "UIView+MMLayout.h"
#import "SuperPlayer.h"
#import <MediaPlayer/MediaPlayer.h>
#import <AVFoundation/AVFoundation.h>
#import "SuperPlayerControlView.h"
#import "SuperPlayerView+Private.h"
#import "DataReport.h"
#define TAG_1_SPEED 1001
#define TAG_2_SPEED 1002
#define TAG_3_SPEED 1003
#define TAG_4_SPEED 1004
@interface SuperPlayerSettingsView()
@property (nonatomic) UIView *soundCell;
@property (nonatomic) UIView *ligthCell;
@property (nonatomic) UIView *speedCell;
@property (nonatomic) UIView *mirrorCell;
@property (nonatomic) UIView *hwCell;
@property BOOL isVolume;
@property NSDate *volumeEndTime;
@end
@implementation SuperPlayerSettingsView {
NSInteger _contentHeight;
NSInteger _speedTag;
UISwitch *_mirrorSwitch;
UISwitch *_hwSwitch;
}
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
self.mm_h = ScreenHeight;
self.mm_w = MoreViewWidth;
[self addSubview:[self soundCell]];
[self addSubview:[self lightCell]];
[self addSubview:[self speedCell]];
[self addSubview:[self mirrorCell]];
[self addSubview:[self hwCell]];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(volumeChanged:) name:@"AVSystemController_SystemVolumeDidChangeNotification"
object:nil];
return self;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)volumeChanged:(NSNotification *)notify
{
if (!self.isVolume) {
if (self.volumeEndTime != nil && -[self.volumeEndTime timeIntervalSinceNow] < 2.f)
return;
float volume = [[[notify userInfo] objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] floatValue];
self.soundSlider.value = volume;
}
}
- (void)sizeToFit
{
_contentHeight = 20;
_soundCell.m_top(_contentHeight);
_contentHeight += _soundCell.mm_h;
_ligthCell.m_top(_contentHeight);
_contentHeight += _ligthCell.mm_h;
if (self.enableSpeedAndMirrorControl) {
_speedCell.m_top(_contentHeight);
_contentHeight += _speedCell.mm_h;
_mirrorCell.m_top(_contentHeight);
_contentHeight += _mirrorCell.mm_h;
_speedCell.hidden = NO;
_mirrorCell.hidden = NO;
} else {
_speedCell.hidden = YES;
_mirrorCell.hidden = YES;
}
_hwCell.m_top(_contentHeight);
_contentHeight += _hwCell.mm_h;
}
- (UIView *)soundCell
{
if (_soundCell == nil) {
_soundCell = [[UIView alloc] initWithFrame:CGRectZero];
_soundCell.m_width(MoreViewWidth).m_height(50).m_left(10);
// 声音
UILabel *sound = [UILabel new];
sound.text = @"声音";
sound.textColor = [UIColor whiteColor];
[sound sizeToFit];
[_soundCell addSubview:sound];
sound.m_centerY();
UIImageView *soundImage1 = [[UIImageView alloc] initWithImage:SuperPlayerImage(@"sound_min")];
[_soundCell addSubview:soundImage1];
soundImage1.m_left(sound.mm_maxX+10).m_centerY();
UIImageView *soundImage2 = [[UIImageView alloc] initWithImage:SuperPlayerImage(@"sound_max")];
[_soundCell addSubview:soundImage2];
soundImage2.m_right(50).m_centerY();
UISlider *soundSlider = [[UISlider alloc] init];
[soundSlider setThumbImage:SuperPlayerImage(@"slider_thumb") forState:UIControlStateNormal];
soundSlider.maximumValue = 1;
soundSlider.minimumTrackTintColor = TintColor;
soundSlider.maximumTrackTintColor = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.5];
// slider开始滑动事件
[soundSlider addTarget:self action:@selector(soundSliderTouchBegan:) forControlEvents:UIControlEventTouchDown];
// slider滑动中事件
[soundSlider addTarget:self action:@selector(soundSliderValueChanged:) forControlEvents:UIControlEventValueChanged];
// slider结束滑动事件
[soundSlider addTarget:self action:@selector(soundSliderTouchEnded:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchCancel | UIControlEventTouchUpOutside];
[_soundCell addSubview:soundSlider];
soundSlider.m_centerY().m_left(soundImage1.mm_maxX).m_width(soundImage2.mm_minX-soundImage1.mm_maxX);
self.soundSlider = soundSlider;
}
return _soundCell;
}
- (UIView *)lightCell
{
if (_ligthCell == nil) {
_ligthCell = [[UIView alloc] initWithFrame:CGRectZero];
_ligthCell.m_width(MoreViewWidth).m_height(50).m_left(10);
// 亮度
UILabel *ligth = [UILabel new];
ligth.text = @"亮度";
ligth.textColor = [UIColor whiteColor];
[ligth sizeToFit];
[_ligthCell addSubview:ligth];
ligth.m_centerY();
UIImageView *ligthImage1 = [[UIImageView alloc] initWithImage:SuperPlayerImage(@"light_min")];
[_ligthCell addSubview:ligthImage1];
ligthImage1.m_left(ligth.mm_maxX+10).m_centerY();
UIImageView *ligthImage2 = [[UIImageView alloc] initWithImage:SuperPlayerImage(@"light_max")];
[_ligthCell addSubview:ligthImage2];
ligthImage2.m_right(50).m_centerY();
UISlider *lightSlider = [[UISlider alloc] init];
[lightSlider setThumbImage:SuperPlayerImage(@"slider_thumb") forState:UIControlStateNormal];
lightSlider.maximumValue = 1;
lightSlider.minimumTrackTintColor = TintColor;
lightSlider.maximumTrackTintColor = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.5];
// slider开始滑动事件
[lightSlider addTarget:self action:@selector(lightSliderTouchBegan:) forControlEvents:UIControlEventTouchDown];
// slider滑动中事件
[lightSlider addTarget:self action:@selector(lightSliderValueChanged:) forControlEvents:UIControlEventValueChanged];
// slider结束滑动事件
[lightSlider addTarget:self action:@selector(lightSliderTouchEnded:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchCancel | UIControlEventTouchUpOutside];
[_ligthCell addSubview:lightSlider];
lightSlider.m_centerY().m_left(ligthImage1.mm_maxX).m_width(ligthImage2.mm_minX-ligthImage1.mm_maxX);
self.lightSlider = lightSlider;
}
return _ligthCell;
}
- (UIView *)speedCell {
if (!_speedCell) {
_speedCell = [UIView new];
_speedCell.m_width(MoreViewWidth).m_height(50).m_left(10);
// 倍速
UILabel *speed = [UILabel new];
speed.text = @"倍速播放";
speed.textColor = [UIColor whiteColor];
[speed sizeToFit];
[_speedCell addSubview:speed];
speed.m_centerY();
UIButton *speed1 = [UIButton buttonWithType:UIButtonTypeCustom];
[speed1 setTitle:@"1.0X" forState:UIControlStateNormal];
[speed1 setTitleColor:TintColor forState:UIControlStateSelected];
speed1.selected = YES;
speed1.tag = TAG_1_SPEED;
[speed1 sizeToFit];
[_speedCell addSubview:speed1];
[speed1 addTarget:self action:@selector(changeSpeed:) forControlEvents:UIControlEventTouchUpInside];
speed1.m_left(speed.mm_maxX+10).m_centerY();
UIButton *speed2 = [UIButton buttonWithType:UIButtonTypeCustom];
[speed2 setTitle:@"1.25X" forState:UIControlStateNormal];
[speed2 setTitleColor:TintColor forState:UIControlStateSelected];
speed2.tag = TAG_2_SPEED;
[speed2 sizeToFit];
[_speedCell addSubview:speed2];
[speed2 addTarget:self action:@selector(changeSpeed:) forControlEvents:UIControlEventTouchUpInside];
speed2.m_left(speed1.mm_maxX+12).m_centerY();
UIButton *speed3 = [UIButton buttonWithType:UIButtonTypeCustom];
[speed3 setTitle:@"1.5X" forState:UIControlStateNormal];
[speed3 setTitleColor:TintColor forState:UIControlStateSelected];
speed3.tag = TAG_3_SPEED;
[speed3 sizeToFit];
[_speedCell addSubview:speed3];
[speed3 addTarget:self action:@selector(changeSpeed:) forControlEvents:UIControlEventTouchUpInside];
speed3.m_left(speed2.mm_maxX+12).m_centerY();
UIButton *speed4 = [UIButton buttonWithType:UIButtonTypeCustom];
[speed4 setTitle:@"2.0X" forState:UIControlStateNormal];
[speed4 setTitleColor:TintColor forState:UIControlStateSelected];
speed4.tag = TAG_4_SPEED;
[speed4 sizeToFit];
[_speedCell addSubview:speed4];
[speed4 addTarget:self action:@selector(changeSpeed:) forControlEvents:UIControlEventTouchUpInside];
speed4.m_left(speed3.mm_maxX+12).m_centerY();
}
return _speedCell;
}
- (UIView *)mirrorCell {
if (!_mirrorCell) {
_mirrorCell = [UIView new];
_mirrorCell.m_width(MoreViewWidth).m_height(50).m_left(10);
UILabel *mirror = [UILabel new];
mirror.text = @"镜像";
mirror.textColor = [UIColor whiteColor];
[mirror sizeToFit];
[_mirrorCell addSubview:mirror];
mirror.m_centerY();
UISwitch *switcher = [UISwitch new];
_mirrorSwitch = switcher;
[switcher addTarget:self action:@selector(changeMirror:) forControlEvents:UIControlEventValueChanged];
[_mirrorCell addSubview:switcher];
switcher.m_right(30).m_centerY();
}
return _mirrorCell;
}
- (UIView *)hwCell {
if (!_hwCell) {
_hwCell = [UIView new];
_hwCell.m_width(MoreViewWidth).m_height(50).m_left(10);
UILabel *hd = [UILabel new];
hd.text = @"硬件加速";
hd.textColor = [UIColor whiteColor];
[hd sizeToFit];
[_hwCell addSubview:hd];
hd.m_centerY();
UISwitch *switcher = [UISwitch new];
_hwSwitch = switcher;
[switcher addTarget:self action:@selector(changeHW:) forControlEvents:UIControlEventValueChanged];
[_hwCell addSubview:switcher];
switcher.m_right(30).m_centerY();
}
return _hwCell;
}
- (void)soundSliderTouchBegan:(UISlider *)sender {
self.isVolume = YES;
}
- (void)soundSliderValueChanged:(UISlider *)sender {
if (self.isVolume)
[SuperPlayerView volumeViewSlider].value = sender.value;
}
- (void)soundSliderTouchEnded:(UISlider *)sender {
self.isVolume = NO;
self.volumeEndTime = [NSDate date];
}
- (void)lightSliderTouchBegan:(UISlider *)sender {
}
- (void)lightSliderValueChanged:(UISlider *)sender {
[UIScreen mainScreen].brightness = sender.value;
}
- (void)lightSliderTouchEnded:(UISlider *)sender {
}
- (void)changeSpeed:(UIButton *)sender {
for (int i = TAG_1_SPEED; i <= TAG_4_SPEED; i++) {
UIButton *b = [_speedCell viewWithTag:i];
if (b.isSelected && b != sender)
b.selected = NO;
}
sender.selected = YES;
self.playerConfig.playRate = [sender.titleLabel.text floatValue];
[self.controlView.delegate controlViewConfigUpdate:self.controlView withReload:NO];
[DataReport report:@"change_speed" param:nil];
}
- (void)changeMirror:(UISwitch *)sender {
self.playerConfig.mirror = sender.on;
[self.controlView.delegate controlViewConfigUpdate:self.controlView withReload:NO];
if (sender.on) {
[DataReport report:@"mirror" param:nil];
}
}
- (void)changeHW:(UISwitch *)sender {
self.playerConfig.hwAcceleration = sender.on;
[self.controlView.delegate controlViewConfigUpdate:self.controlView withReload:YES];
[DataReport report:sender.on?@"hw_decode":@"soft_decode" param:nil];
}
- (void)update
{
self.soundSlider.value = [SuperPlayerView volumeViewSlider].value;
self.lightSlider.value = [UIScreen mainScreen].brightness;
CGFloat rate = self.playerConfig.playRate;
for (int i = TAG_1_SPEED; i <= TAG_4_SPEED; i++) {
UIButton *b = [_speedCell viewWithTag:i];
b.selected = NO;
}
if (rate == 1.0) {
[[_speedCell viewWithTag:TAG_1_SPEED] setSelected:YES];
}
if (rate == 1.25) {
[[_speedCell viewWithTag:TAG_2_SPEED] setSelected:YES];
}
if (rate == 1.5) {
[[_speedCell viewWithTag:TAG_3_SPEED] setSelected:YES];
}
if (rate == 2.0) {
[[_speedCell viewWithTag:TAG_4_SPEED] setSelected:YES];
}
_mirrorSwitch.on = self.playerConfig.mirror;
_hwSwitch.on = self.playerConfig.hwAcceleration;
[self sizeToFit];
}
@end