iOS之基于FreeStreamer的简单音乐播放器示例

2020-01-21 02:24:13于海丽

前提准备

为了能够有明确的思路来做这个demo,我下载了QQ音乐和网易云音乐,然后分别对比,最终选择了QQ音乐来参照,先是获取了其中的所有资源文件(如果有不知道怎么提取资源文件的,可以参考iOS提取APP中的图片资源),在这之后就是研究使用技术,这里我选择了FreeStreamer,虽然系统也有,但是该框架可能更好用点。

实现部分

在这之前,先来看看大概效果图吧

iOS,FreeStreamer音乐播放器,音乐播放器,简单音乐播放器

iOS,FreeStreamer音乐播放器,音乐播放器,简单音乐播放器

iOS,FreeStreamer音乐播放器,音乐播放器,简单音乐播放器

再看完效果图之后,我们就来看看这其中涉及到的几个难点吧(在我看开~)

1、先让播放器跑起来

这里我使用的是pods来管理三方库,代码如下


platform:ios,'8.0'
target "GLMusicBox" do
pod 'FreeStreamer', '~> 3.7.3'
pod 'SDWebImage', '~> 4.0.0'
pod 'MJRefresh', '~> 3.1.11'
pod 'Masonry', '~> 1.0.2'
pod 'Reachability', '~> 3.2'
pod 'AFNetworking', '~> 3.0'
pod 'IQKeyboardManager', '~> 3.3.2'
end

针对FreeStreamer我简单进行了封装下


#import "FSAudioStream.h"
@class GLMusicLRCModel;
typedef NS_ENUM(NSInteger,GLLoopState){
  GLSingleLoop = 0,//单曲循环
  GLForeverLoop,//重复循环
  GLRandomLoop,//随机播放
  GLOnceLoop//列表一次顺序播放
};
@protocol GLMusicPlayerDelegate/**
 *
 实时更新
 *
 **/
- (void)updateProgressWithCurrentPosition:(FSStreamPosition)currentPosition endPosition:(FSStreamPosition)endPosition;
- (void)updateMusicLrc;
@end
@interface GLMusicPlayer : FSAudioStream
/**
 *
 播放列表
 *
 **/
@property (nonatomic,strong) NSMutableArray *musicListArray;
/**
 当前播放歌曲的歌词
 */
@property (nonatomic,strong) NSMutableArray *musicLRCArray;
/**
 *
 当前播放
 *
 **/
@property (nonatomic,assign,readonly) NSUInteger currentIndex;
/**
 *
 当前播放的音乐的标题
 *
 **/
@property (nonatomic,strong) NSString *currentTitle;
/**
 是否是暂停状态
 */
@property (nonatomic,assign) BOOL isPause;
@property (nonatomic,weak) idglPlayerDelegate;
//默认 重复循环 GLForeverLoop
@property (nonatomic,assign) GLLoopState loopState;
/**
 *
 单例播放器
 *
 **/
+ (instancetype)defaultPlayer;
/**
 播放队列中的指定的文件 
 @param index 序号
 */
- (void)playMusicAtIndex:(NSUInteger)index;
/**
 播放前一首
 */
- (void)playFont;
/**
 播放下一首
 */
- (void)playNext;
@end