Commit f283b9c3 cgx

优化播放逻辑,完成上一首/下一首功能

1 个父辈 f02ca2ec
...@@ -38,4 +38,6 @@ ...@@ -38,4 +38,6 @@
#import "LoginUtils.h" #import "LoginUtils.h"
#import "TimerProxy.h"
#endif /* PrefixHeader_pch */ #endif /* PrefixHeader_pch */
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#import "MusicPlayerController.h" #import "MusicPlayerController.h"
#import "MusicPlayerView.h" #import "MusicPlayerView.h"
#import <FSAudioController.h> #import <FSAudioController.h>
#import "TimerProxy.h"
#import "SubAudioModel.h" #import "SubAudioModel.h"
@interface MusicPlayerController () <MusicPlayerViewDelegate> @interface MusicPlayerController () <MusicPlayerViewDelegate>
...@@ -19,6 +18,8 @@ ...@@ -19,6 +18,8 @@
@property (nonatomic, strong) CADisplayLink *progressTimer; @property (nonatomic, strong) CADisplayLink *progressTimer;
/// 是否正在拖动滑块 /// 是否正在拖动滑块
@property (nonatomic, assign) BOOL isDraging; @property (nonatomic, assign) BOOL isDraging;
/// streamState
@property (nonatomic, assign) FSAudioStreamState streamState;
@end @end
@implementation MusicPlayerController @implementation MusicPlayerController
...@@ -31,14 +32,13 @@ ...@@ -31,14 +32,13 @@
[super viewDidLoad]; [super viewDidLoad];
if (self.currentIndex >= self.playAudios.count) { return; } if (self.currentIndex >= self.playAudios.count) { return; }
SubAudioModel *currentAudioModel = self.playAudios[self.currentIndex]; [self launchPlayer];
[self.playerView updatePlayerView:currentAudioModel];
WS(weakSelf); WS(weakSelf);
[self.audioStream playFromURL:[NSURL URLWithString:currentAudioModel.audio_url]];
[self.audioStream setOnStateChange:^(FSAudioStreamState state) { [self.audioStream setOnStateChange:^(FSAudioStreamState state) {
weakSelf.streamState = state;
weakSelf.playerView.isPlaying = state == kFsAudioStreamPlaying; weakSelf.playerView.isPlaying = state == kFsAudioStreamPlaying;
[weakSelf.progressTimer setPaused:!(state == kFsAudioStreamPlaying)];
switch (state) { switch (state) {
case kFsAudioStreamRetrievingURL: case kFsAudioStreamRetrievingURL:
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
break; break;
case kFsAudioStreamStopped: case kFsAudioStreamStopped:
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
DSLog(@"kFsAudioStreamStopped --- 停止播放了 "); DSLog(@"kFsAudioStreamStopped --- 停止播放了");
break; break;
case kFsAudioStreamBuffering: { case kFsAudioStreamBuffering: {
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
break; break;
case kFsAudioStreamPlaying: case kFsAudioStreamPlaying:
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
DSLog(@"播放ing -- "); DSLog(@"播放ing...");
break; break;
case kFsAudioStreamFailed: case kFsAudioStreamFailed:
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
...@@ -98,51 +98,49 @@ ...@@ -98,51 +98,49 @@
self.progressTimer = nil; self.progressTimer = nil;
} }
#pragma mark - private
- (void)updateProgress { - (void)updateProgress {
if (self.isDraging == YES) return; if (self.isDraging == YES) return;
FSStreamPosition cur = self.audioStream.currentTimePlayed; FSStreamPosition cur = self.audioStream.currentTimePlayed;
FSStreamPosition end = self.audioStream.duration; FSStreamPosition end = self.audioStream.duration;
// 音频播放进度、音频当前播放时间、音频总时间 // 更新音频播放进度、音频当前播放时间、音频总时间
[self.playerView updateProgress:cur.position currentTime:[NSString stringWithFormat:@"%02i:%02i", cur.minute, cur.second] totalTime:[NSString stringWithFormat:@"%02i:%02i", end.minute, end.second]]; [self.playerView updateProgress:cur.position currentTime:[NSString stringWithFormat:@"%02i:%02i", cur.minute, cur.second] totalTime:[NSString stringWithFormat:@"%02i:%02i", end.minute, end.second]];
} }
- (void)audioStreamPlaybackCompleted { - (void)audioStreamPlaybackCompleted {
DSLog(@"kFsAudioStreamPlaybackCompleted -- 回放完成"); DSLog(@"kFsAudioStreamPlaybackCompleted -- 回放完成");
[self.progressTimer setPaused:YES]; if (self.playerView.mode == SoundPlayModeSingle) { // 单节播放:播放完当前音频就自动停止了
if (self.playerView.mode == SoundPlayModeSingle) { // 单节播放 [self reset];
// 判断是否有下一首
if (self.currentIndex < self.playAudios.count - 1) {
self.currentIndex++;
SubAudioModel *audioModel = self.playAudios[self.currentIndex];
[self.playerView updatePlayerView:audioModel];
[self.audioStream playFromURL:[NSURL URLWithString:audioModel.audio_url]];
[self.progressTimer setPaused:NO];
} else {
FSStreamPosition pos = {0};
pos.position = 0;
[self.audioStream seekToPosition:pos];
FSStreamPosition end = self.audioStream.duration;
[self.playerView updateProgress:0 currentTime:@"00:00" totalTime:[NSString stringWithFormat:@"%02i:%02i", end.minute, end.second]];
}
} else if (self.playerView.mode == SoundPlayModeCycle) { // 单曲循环 } else if (self.playerView.mode == SoundPlayModeCycle) { // 单曲循环
[self.audioStream play]; [self.audioStream play];
[self.progressTimer setPaused:NO];
} else if (self.playerView.mode == SoundPlayModeOrder) { // 顺序播放 } else if (self.playerView.mode == SoundPlayModeOrder) { // 顺序播放
// 获取下一首需要播放的音频 // 播放列表最后一个音频
if (self.currentIndex + 1 >= self.playAudios.count) { if (self.currentIndex + 1 >= self.playAudios.count) {
self.currentIndex = 0; [self reset];
} else { } else {
// 获取下一首需要播放的音频
self.currentIndex++; self.currentIndex++;
[self launchPlayer];
} }
SubAudioModel *audioModel = self.playAudios[self.currentIndex];
[self.playerView updatePlayerView:audioModel];
[self.audioStream playFromURL:[NSURL URLWithString:audioModel.audio_url]];
[self.progressTimer setPaused:NO];
} }
} }
- (void)reset {
FSStreamPosition pos = {0};
pos.position = 0;
[self.audioStream seekToPosition:pos];
FSStreamPosition end = self.audioStream.duration;
[self.playerView updateProgress:0 currentTime:@"00:00" totalTime:[NSString stringWithFormat:@"%02i:%02i", end.minute, end.second]];
}
- (void)launchPlayer {
SubAudioModel *audioModel = self.playAudios[self.currentIndex];
[self.playerView updatePlayerView:audioModel];
[self.audioStream playFromURL:[NSURL URLWithString:audioModel.audio_url]];
}
#pragma mark - MusicPlayerViewDelegate #pragma mark - MusicPlayerViewDelegate
- (void)didSliderTouchBegan:(float)value { - (void)didSliderTouchBegan:(float)value {
self.isDraging = YES; self.isDraging = YES;
...@@ -163,9 +161,44 @@ ...@@ -163,9 +161,44 @@
self.isDraging = YES; self.isDraging = YES;
} }
- (void)didClickPlayBtn { - (void)playControlActionWithItem:(UIButton *)item {
// 播放和暂停是同一个方法 switch (item.tag) {
[self.audioStream pause]; case 1: // 上一首
{
if (self.currentIndex - 1 < 0) {
[DSProgressHUD showToast:@"没有上一首了"];
return;
}
self.currentIndex--;
[self launchPlayer];
}
break;
case 2: // 播放暂停
{
if (self.streamState == kFsAudioStreamStopped) {
[self.audioStream play];
} else if (self.streamState == kFsAudioStreamPlaying) {
// 暂停播放
[self.audioStream pause];
} else if (self.streamState == kFsAudioStreamPaused) {
// 恢复播放
[self.audioStream pause];
}
}
break;
case 3: // 下一首
{
if (self.currentIndex + 1 >= self.playAudios.count) {
[DSProgressHUD showToast:@"没有下一首了"];
return;
}
self.currentIndex++;
[self launchPlayer];
}
break;
default:
break;
}
} }
#pragma mark - 隐藏导航栏 #pragma mark - 隐藏导航栏
......
...@@ -21,8 +21,9 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -21,8 +21,9 @@ NS_ASSUME_NONNULL_BEGIN
- (void)didSliderTouchEnded:(float)value; - (void)didSliderTouchEnded:(float)value;
- (void)didSliderValueChange:(float)value; - (void)didSliderValueChange:(float)value;
/// 点击播放按钮事件 /// 上一首、播放、下一首事件
- (void)didClickPlayBtn; /// @param item item
- (void)playControlActionWithItem:(UIButton *)item;
@end @end
/// 音频播放页面 /// 音频播放页面
......
...@@ -178,9 +178,9 @@ ...@@ -178,9 +178,9 @@
} }
} }
- (void)playerBtnClick:(UIButton *)sender { - (void)playControlAction:(UIButton *)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickPlayBtn)]) { if (self.delegate && [self.delegate respondsToSelector:@selector(playControlActionWithItem:)]) {
[self.delegate didClickPlayBtn]; [self.delegate playControlActionWithItem:sender];
} }
} }
...@@ -275,7 +275,8 @@ ...@@ -275,7 +275,8 @@
- (UIButton *)playerBtn { - (UIButton *)playerBtn {
if (!_playerBtn) { if (!_playerBtn) {
_playerBtn = [UIButton new]; _playerBtn = [UIButton new];
[_playerBtn addTarget:self action:@selector(playerBtnClick:) forControlEvents:UIControlEventTouchUpInside]; _playerBtn.tag = 2;
[_playerBtn addTarget:self action:@selector(playControlAction:) forControlEvents:UIControlEventTouchUpInside];
[_playerBtn dk_setBackgroundImage:DKImagePickerWithNames(@"audio_play_icon", @"dk_audio_play_icon", @"dk_audio_play_icon") forState:UIControlStateNormal]; [_playerBtn dk_setBackgroundImage:DKImagePickerWithNames(@"audio_play_icon", @"dk_audio_play_icon", @"dk_audio_play_icon") forState:UIControlStateNormal];
[_playerBtn dk_setBackgroundImage:DKImagePickerWithNames(@"audio_pause", @"dk_audio_pause", @"dk_audio_pause") forState:UIControlStateSelected]; [_playerBtn dk_setBackgroundImage:DKImagePickerWithNames(@"audio_pause", @"dk_audio_pause", @"dk_audio_pause") forState:UIControlStateSelected];
} }
...@@ -285,7 +286,8 @@ ...@@ -285,7 +286,8 @@
- (UIButton *)leftPlayBtn { - (UIButton *)leftPlayBtn {
if (!_leftPlayBtn) { if (!_leftPlayBtn) {
_leftPlayBtn = [UIButton new]; _leftPlayBtn = [UIButton new];
[_leftPlayBtn addTarget:self action:@selector(leftPlayBtnClick:) forControlEvents:UIControlEventTouchUpInside]; _leftPlayBtn.tag = 1;
[_leftPlayBtn addTarget:self action:@selector(playControlAction:) forControlEvents:UIControlEventTouchUpInside];
[_leftPlayBtn setBackgroundImage:[UIImage imageNamed:@"previous_icon"] forState:UIControlStateNormal]; [_leftPlayBtn setBackgroundImage:[UIImage imageNamed:@"previous_icon"] forState:UIControlStateNormal];
} }
return _leftPlayBtn; return _leftPlayBtn;
...@@ -294,7 +296,8 @@ ...@@ -294,7 +296,8 @@
- (UIButton *)rightPlayBtn { - (UIButton *)rightPlayBtn {
if (!_rightPlayBtn) { if (!_rightPlayBtn) {
_rightPlayBtn = [UIButton new]; _rightPlayBtn = [UIButton new];
[_rightPlayBtn addTarget:self action:@selector(rightPlayBtnClick:) forControlEvents:UIControlEventTouchUpInside]; _rightPlayBtn.tag = 3;
[_rightPlayBtn addTarget:self action:@selector(playControlAction:) forControlEvents:UIControlEventTouchUpInside];
[_rightPlayBtn setBackgroundImage:[UIImage imageNamed:@"next_icon"] forState:UIControlStateNormal]; [_rightPlayBtn setBackgroundImage:[UIImage imageNamed:@"next_icon"] forState:UIControlStateNormal];
} }
return _rightPlayBtn; return _rightPlayBtn;
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!